From 59e0710d8323a4b3897dd3d29ddee1f0b7502021 Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Mon, 13 Jun 2022 10:28:56 +0200 Subject: [PATCH 001/120] Bump sdk version to v0.45.5 --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 413ea998d0..f9276486c7 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.17 require ( github.com/CosmWasm/wasmvm v1.0.0 - github.com/cosmos/cosmos-sdk v0.45.4 + github.com/cosmos/cosmos-sdk v0.45.5 github.com/cosmos/iavl v0.17.3 github.com/cosmos/ibc-go/v3 v3.0.0 github.com/cosmos/interchain-accounts v0.1.0 diff --git a/go.sum b/go.sum index d75e51f2a6..8f71a28710 100644 --- a/go.sum +++ b/go.sum @@ -227,8 +227,8 @@ github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfc github.com/cosmos/btcutil v1.0.4 h1:n7C2ngKXo7UC9gNyMNLbzqz7Asuf+7Qv4gnX/rOdQ44= github.com/cosmos/btcutil v1.0.4/go.mod h1:Ffqc8Hn6TJUdDgHBwIZLtrLQC1KdJ9jGJl/TvgUaxbU= github.com/cosmos/cosmos-sdk v0.45.1/go.mod h1:XXS/asyCqWNWkx2rW6pSuen+EVcpAFxq6khrhnZgHaQ= -github.com/cosmos/cosmos-sdk v0.45.4 h1:eStDAhJdMY8n5arbBRe+OwpNeBSunxSBHp1g55ulfdA= -github.com/cosmos/cosmos-sdk v0.45.4/go.mod h1:WOqtDxN3eCCmnYLVla10xG7lEXkFjpTaqm2a2WasgCc= +github.com/cosmos/cosmos-sdk v0.45.5 h1:GVrZM+lss6y626Pq6loxh/3KLRgK/J6/alTkcKkYmGU= +github.com/cosmos/cosmos-sdk v0.45.5/go.mod h1:WOqtDxN3eCCmnYLVla10xG7lEXkFjpTaqm2a2WasgCc= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= From 8d8d082c8788033c74a963e3fa2108657f7dc91e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 08:20:51 +0000 Subject: [PATCH 002/120] Bump github.com/stretchr/testify from 1.7.2 to 1.8.0 Bumps [github.com/stretchr/testify](https://github.com/stretchr/testify) from 1.7.2 to 1.8.0. - [Release notes](https://github.com/stretchr/testify/releases) - [Commits](https://github.com/stretchr/testify/compare/v1.7.2...v1.8.0) --- updated-dependencies: - dependency-name: github.com/stretchr/testify dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 413ea998d0..fb469c5004 100644 --- a/go.mod +++ b/go.mod @@ -23,7 +23,7 @@ require ( github.com/spf13/cobra v1.4.0 github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.11.0 - github.com/stretchr/testify v1.7.2 + github.com/stretchr/testify v1.8.0 github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca github.com/tendermint/tendermint v0.34.19 github.com/tendermint/tm-db v0.6.7 diff --git a/go.sum b/go.sum index d75e51f2a6..1e2039cc67 100644 --- a/go.sum +++ b/go.sum @@ -960,8 +960,9 @@ github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5J github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -969,8 +970,8 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s= -github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= +github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= From 72e8b7d40b624f1323e06d185637e9fe33c8c9dc Mon Sep 17 00:00:00 2001 From: "shiki.takahashi" Date: Fri, 8 Jul 2022 15:55:43 +0900 Subject: [PATCH 003/120] Remove unnecessary string --- x/wasm/client/cli/genesis_msg.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x/wasm/client/cli/genesis_msg.go b/x/wasm/client/cli/genesis_msg.go index c77ab3519c..f4ba94fbd2 100644 --- a/x/wasm/client/cli/genesis_msg.go +++ b/x/wasm/client/cli/genesis_msg.go @@ -127,7 +127,7 @@ func GenesisInstantiateContractCmd(defaultNodeHome string, genesisMutator Genesi } // permissions correct? if !codeInfo.Info.InstantiateConfig.Allowed(senderAddr) { - return fmt.Errorf("permissions were not granted for %state", senderAddr) + return fmt.Errorf("permissions were not granted for %s", senderAddr) } state.GenMsgs = append(state.GenMsgs, types.GenesisState_GenMsgs{ Sum: &types.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: &msg}, @@ -180,7 +180,7 @@ func GenesisExecuteContractCmd(defaultNodeHome string, genesisMutator GenesisMut // - does contract address exists? if !hasContract(state, msg.Contract) { - return fmt.Errorf("unknown contract: %state", msg.Contract) + return fmt.Errorf("unknown contract: %s", msg.Contract) } state.GenMsgs = append(state.GenMsgs, types.GenesisState_GenMsgs{ Sum: &types.GenesisState_GenMsgs_ExecuteContract{ExecuteContract: &msg}, From ffd8a3c8710d06bb473c3c7a26fcb1a67203e27f Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Fri, 8 Jul 2022 13:13:21 +0200 Subject: [PATCH 004/120] Prevent migration to a restricted code --- x/wasm/keeper/contract_keeper.go | 2 +- x/wasm/keeper/keeper.go | 4 ++++ x/wasm/keeper/keeper_test.go | 13 +++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/x/wasm/keeper/contract_keeper.go b/x/wasm/keeper/contract_keeper.go index 9dc0a4be9d..a6a0adf0e1 100644 --- a/x/wasm/keeper/contract_keeper.go +++ b/x/wasm/keeper/contract_keeper.go @@ -75,7 +75,7 @@ func (p PermissionedKeeper) UnpinCode(ctx sdk.Context, codeID uint64) error { return p.nested.unpinCode(ctx, codeID) } -// SetExtraContractAttributes updates the extra attributes that can be stored with the contract info +// SetContractInfoExtension updates the extra attributes that can be stored with the contract info func (p PermissionedKeeper) SetContractInfoExtension(ctx sdk.Context, contract sdk.AccAddress, extra types.ContractInfoExtension) error { return p.nested.setContractInfoExtension(ctx, contract, extra) } diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index 3fdcbec483..d261a8b9ce 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -395,6 +395,10 @@ func (k Keeper) migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "unknown code") } + if !authZ.CanInstantiateContract(newCodeInfo.InstantiateConfig, caller) { + return nil, sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "to use new code") + } + // check for IBC flag switch report, err := k.wasmVM.AnalyzeCode(newCodeInfo.CodeHash); { case err != nil: diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index bb20a39267..44527ac97c 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -875,6 +875,10 @@ func TestMigrate(t *testing.T) { ibcCodeID := StoreIBCReflectContract(t, ctx, keepers).CodeID require.NotEqual(t, originalCodeID, newCodeID) + restrictedCodeID := StoreHackatomExampleContract(t, ctx, keepers).CodeID + keeper.SetAccessConfig(ctx, restrictedCodeID, types.AllowNobody) + require.NotEqual(t, originalCodeID, restrictedCodeID) + anyAddr := RandomAccountAddress(t) newVerifierAddr := RandomAccountAddress(t) initMsgBz := HackatomExampleInitMsg{ @@ -952,6 +956,15 @@ func TestMigrate(t *testing.T) { toCodeID: originalCodeID, expErr: sdkerrors.ErrUnauthorized, }, + "prevent migration when new code is restricted": { + admin: creator, + caller: creator, + initMsg: initMsgBz, + fromCodeID: originalCodeID, + toCodeID: restrictedCodeID, + migrateMsg: migMsgBz, + expErr: sdkerrors.ErrUnauthorized, + }, "fail with non existing code id": { admin: creator, caller: creator, From e5ff7c195a1f7cb9eb61333a64a403bc7adcd890 Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Fri, 8 Jul 2022 14:28:45 +0200 Subject: [PATCH 005/120] Restrict code access config modifications --- x/wasm/keeper/authz_policy.go | 9 ++++ x/wasm/keeper/contract_keeper.go | 6 +-- x/wasm/keeper/keeper.go | 9 +++- x/wasm/keeper/keeper_test.go | 84 +++++++++++++++++++++++++++++++ x/wasm/keeper/proposal_handler.go | 3 +- x/wasm/types/exported_keepers.go | 2 +- x/wasm/types/types.go | 22 ++++++-- x/wasm/types/types_test.go | 77 +++++++++++++++++++++++++++- 8 files changed, 199 insertions(+), 13 deletions(-) diff --git a/x/wasm/keeper/authz_policy.go b/x/wasm/keeper/authz_policy.go index 32d8c9952b..1a222719a8 100644 --- a/x/wasm/keeper/authz_policy.go +++ b/x/wasm/keeper/authz_policy.go @@ -10,6 +10,7 @@ type AuthorizationPolicy interface { CanCreateCode(c types.AccessConfig, creator sdk.AccAddress) bool CanInstantiateContract(c types.AccessConfig, actor sdk.AccAddress) bool CanModifyContract(admin, actor sdk.AccAddress) bool + CanModifyCodeAccessConfig(creator, actor sdk.AccAddress, isSubset bool) bool } type DefaultAuthorizationPolicy struct{} @@ -26,6 +27,10 @@ func (p DefaultAuthorizationPolicy) CanModifyContract(admin, actor sdk.AccAddres return admin != nil && admin.Equals(actor) } +func (p DefaultAuthorizationPolicy) CanModifyCodeAccessConfig(creator, actor sdk.AccAddress, isSubset bool) bool { + return creator != nil && creator.Equals(actor) && isSubset +} + type GovAuthorizationPolicy struct{} func (p GovAuthorizationPolicy) CanCreateCode(types.AccessConfig, sdk.AccAddress) bool { @@ -39,3 +44,7 @@ func (p GovAuthorizationPolicy) CanInstantiateContract(types.AccessConfig, sdk.A func (p GovAuthorizationPolicy) CanModifyContract(sdk.AccAddress, sdk.AccAddress) bool { return true } + +func (p GovAuthorizationPolicy) CanModifyCodeAccessConfig(sdk.AccAddress, sdk.AccAddress, bool) bool { + return true +} diff --git a/x/wasm/keeper/contract_keeper.go b/x/wasm/keeper/contract_keeper.go index 9dc0a4be9d..852ef687e8 100644 --- a/x/wasm/keeper/contract_keeper.go +++ b/x/wasm/keeper/contract_keeper.go @@ -19,7 +19,7 @@ type decoratedKeeper interface { execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, msg []byte, coins sdk.Coins) ([]byte, error) Sudo(ctx sdk.Context, contractAddress sdk.AccAddress, msg []byte) ([]byte, error) setContractInfoExtension(ctx sdk.Context, contract sdk.AccAddress, extra types.ContractInfoExtension) error - setAccessConfig(ctx sdk.Context, codeID uint64, config types.AccessConfig) error + setAccessConfig(ctx sdk.Context, codeID uint64, caller sdk.AccAddress, newConfig types.AccessConfig, autz AuthorizationPolicy) error } type PermissionedKeeper struct { @@ -81,6 +81,6 @@ func (p PermissionedKeeper) SetContractInfoExtension(ctx sdk.Context, contract s } // SetAccessConfig updates the access config of a code id. -func (p PermissionedKeeper) SetAccessConfig(ctx sdk.Context, codeID uint64, config types.AccessConfig) error { - return p.nested.setAccessConfig(ctx, codeID, config) +func (p PermissionedKeeper) SetAccessConfig(ctx sdk.Context, codeID uint64, caller sdk.AccAddress, newConfig types.AccessConfig) error { + return p.nested.setAccessConfig(ctx, codeID, caller, newConfig, p.authZPolicy) } diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index 3fdcbec483..12928d26b3 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -879,12 +879,17 @@ func (k Keeper) setContractInfoExtension(ctx sdk.Context, contractAddr sdk.AccAd } // setAccessConfig updates the access config of a code id. -func (k Keeper) setAccessConfig(ctx sdk.Context, codeID uint64, config types.AccessConfig) error { +func (k Keeper) setAccessConfig(ctx sdk.Context, codeID uint64, caller sdk.AccAddress, newConfig types.AccessConfig, authz AuthorizationPolicy) error { info := k.GetCodeInfo(ctx, codeID) if info == nil { return sdkerrors.Wrap(types.ErrNotFound, "code info") } - info.InstantiateConfig = config + isSubset := newConfig.Permission.IsSubset(k.getInstantiateAccessConfig(ctx)) + if !authz.CanModifyCodeAccessConfig(sdk.MustAccAddressFromBech32(info.Creator), caller, isSubset) { + return sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "can not modify code access config") + } + + info.InstantiateConfig = newConfig k.storeCodeInfo(ctx, codeID, *info) return nil } diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index bb20a39267..b6a425a72f 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -1823,3 +1823,87 @@ func TestBuildContractAddress(t *testing.T) { }) } } +func TestSetAccessConfig(t *testing.T) { + parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures) + k := keepers.WasmKeeper + creatorAddr := RandomAccountAddress(t) + nonCreatorAddr := RandomAccountAddress(t) + + specs := map[string]struct { + authz AuthorizationPolicy + chainPermission types.AccessType + newConfig types.AccessConfig + caller sdk.AccAddress + expErr bool + }{ + "user with new permissions == chain permissions": { + authz: DefaultAuthorizationPolicy{}, + chainPermission: types.AccessTypeEverybody, + newConfig: types.AllowEverybody, + caller: creatorAddr, + }, + "user with new permissions < chain permissions": { + authz: DefaultAuthorizationPolicy{}, + chainPermission: types.AccessTypeEverybody, + newConfig: types.AllowNobody, + caller: creatorAddr, + }, + "user with new permissions > chain permissions": { + authz: DefaultAuthorizationPolicy{}, + chainPermission: types.AccessTypeNobody, + newConfig: types.AllowEverybody, + caller: creatorAddr, + expErr: true, + }, + "different actor": { + authz: DefaultAuthorizationPolicy{}, + chainPermission: types.AccessTypeEverybody, + newConfig: types.AllowEverybody, + caller: nonCreatorAddr, + expErr: true, + }, + "gov with new permissions == chain permissions": { + authz: GovAuthorizationPolicy{}, + chainPermission: types.AccessTypeEverybody, + newConfig: types.AllowEverybody, + caller: creatorAddr, + }, + "gov with new permissions < chain permissions": { + authz: GovAuthorizationPolicy{}, + chainPermission: types.AccessTypeEverybody, + newConfig: types.AllowNobody, + caller: creatorAddr, + }, + "gov with new permissions > chain permissions": { + authz: GovAuthorizationPolicy{}, + chainPermission: types.AccessTypeNobody, + newConfig: types.AccessTypeOnlyAddress.With(creatorAddr), + caller: creatorAddr, + }, + "gov without actor": { + authz: GovAuthorizationPolicy{}, + chainPermission: types.AccessTypeEverybody, + newConfig: types.AllowEverybody, + }, + } + const codeID = 1 + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + ctx, _ := parentCtx.CacheContext() + newParams := types.DefaultParams() + newParams.InstantiateDefaultPermission = spec.chainPermission + k.SetParams(ctx, newParams) + + k.storeCodeInfo(ctx, codeID, types.NewCodeInfo(nil, creatorAddr, types.AllowNobody)) + // when + gotErr := k.setAccessConfig(ctx, codeID, spec.caller, spec.newConfig, spec.authz) + if spec.expErr { + require.Error(t, gotErr) + return + } + require.NoError(t, gotErr) + + }) + } + +} diff --git a/x/wasm/keeper/proposal_handler.go b/x/wasm/keeper/proposal_handler.go index 9da330ce0f..beac2563bb 100644 --- a/x/wasm/keeper/proposal_handler.go +++ b/x/wasm/keeper/proposal_handler.go @@ -229,8 +229,9 @@ func handleUpdateInstantiateConfigProposal(ctx sdk.Context, k types.ContractOpsK return err } + var emptyCaller sdk.AccAddress for _, accessConfigUpdate := range p.AccessConfigUpdates { - if err := k.SetAccessConfig(ctx, accessConfigUpdate.CodeID, accessConfigUpdate.InstantiatePermission); err != nil { + if err := k.SetAccessConfig(ctx, accessConfigUpdate.CodeID, emptyCaller, accessConfigUpdate.InstantiatePermission); err != nil { return sdkerrors.Wrapf(err, "code id: %d", accessConfigUpdate.CodeID) } } diff --git a/x/wasm/types/exported_keepers.go b/x/wasm/types/exported_keepers.go index bb919a3189..cb08488386 100644 --- a/x/wasm/types/exported_keepers.go +++ b/x/wasm/types/exported_keepers.go @@ -55,7 +55,7 @@ type ContractOpsKeeper interface { SetContractInfoExtension(ctx sdk.Context, contract sdk.AccAddress, extra ContractInfoExtension) error // SetAccessConfig updates the access config of a code id. - SetAccessConfig(ctx sdk.Context, codeID uint64, config AccessConfig) error + SetAccessConfig(ctx sdk.Context, codeID uint64, caller sdk.AccAddress, newConfig AccessConfig) error } // IBCContractKeeper IBC lifecycle event handler diff --git a/x/wasm/types/types.go b/x/wasm/types/types.go index 7c9e14e64e..e3da189f85 100644 --- a/x/wasm/types/types.go +++ b/x/wasm/types/types.go @@ -333,18 +333,30 @@ func VerifyAddressLen() func(addr []byte) error { // IsSubset will return true if the caller is the same as the superset, // or if the caller is more restrictive than the superset. -func (a AccessConfig) IsSubset(superSet AccessConfig) bool { - switch superSet.Permission { +func (a AccessType) IsSubset(superSet AccessType) bool { + switch superSet { case AccessTypeEverybody: // Everything is a subset of this - return a.Permission != AccessTypeUnspecified + return a != AccessTypeUnspecified case AccessTypeNobody: // Only an exact match is a subset of this - return a.Permission == AccessTypeNobody + return a == AccessTypeNobody case AccessTypeOnlyAddress: // An exact match or nobody - return a.Permission == AccessTypeNobody || (a.Permission == AccessTypeOnlyAddress && a.Address == superSet.Address) + return a == AccessTypeNobody || a == AccessTypeOnlyAddress default: return false } } + +// IsSubset will return true if the caller is the same as the superset, +// or if the caller is more restrictive than the superset. +func (a AccessConfig) IsSubset(superSet AccessConfig) bool { + switch superSet.Permission { + case AccessTypeOnlyAddress: + // An exact match or nobody + return a.Permission == AccessTypeNobody || (a.Permission == AccessTypeOnlyAddress && a.Address == superSet.Address) + default: + return a.Permission.IsSubset(superSet.Permission) + } +} diff --git a/x/wasm/types/types_test.go b/x/wasm/types/types_test.go index 117415930d..91b39419c5 100644 --- a/x/wasm/types/types_test.go +++ b/x/wasm/types/types_test.go @@ -373,7 +373,7 @@ func TestVerifyAddressLen(t *testing.T) { } } -func TestAccesConfigSubset(t *testing.T) { +func TestAccessConfigSubset(t *testing.T) { specs := map[string]struct { check AccessConfig superSet AccessConfig @@ -453,3 +453,78 @@ func TestAccesConfigSubset(t *testing.T) { }) } } + +func TestAccessTypeSubset(t *testing.T) { + specs := map[string]struct { + check AccessType + superSet AccessType + isSubSet bool + }{ + "nobody <= nobody": { + superSet: AccessTypeNobody, + check: AccessTypeNobody, + isSubSet: true, + }, + "only > nobody": { + superSet: AccessTypeNobody, + check: AccessTypeOnlyAddress, + isSubSet: false, + }, + "everybody > nobody": { + superSet: AccessTypeNobody, + check: AccessTypeEverybody, + isSubSet: false, + }, + "unspecified > nobody": { + superSet: AccessTypeNobody, + check: AccessTypeUnspecified, + isSubSet: false, + }, + "nobody <= everybody": { + superSet: AccessTypeEverybody, + check: AccessTypeNobody, + isSubSet: true, + }, + "only <= everybody": { + superSet: AccessTypeEverybody, + check: AccessTypeOnlyAddress, + isSubSet: true, + }, + "everybody <= everybody": { + superSet: AccessTypeEverybody, + check: AccessTypeEverybody, + isSubSet: true, + }, + "unspecified > everybody": { + superSet: AccessTypeEverybody, + check: AccessTypeUnspecified, + isSubSet: false, + }, + "nobody <= only": { + superSet: AccessTypeOnlyAddress, + check: AccessTypeNobody, + isSubSet: true, + }, + "only <= only(same)": { + superSet: AccessTypeOnlyAddress, + check: AccessTypeOnlyAddress, + isSubSet: true, + }, + "everybody > only": { + superSet: AccessTypeOnlyAddress, + check: AccessTypeEverybody, + isSubSet: false, + }, + "nobody > unspecified": { + superSet: AccessTypeUnspecified, + check: AccessTypeNobody, + isSubSet: false, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + subset := spec.check.IsSubset(spec.superSet) + require.Equal(t, spec.isSubSet, subset) + }) + } +} From b570f49f5eaa8da93a0727b75c8eda9f47f7ea4e Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Mon, 11 Jul 2022 08:40:41 +0200 Subject: [PATCH 006/120] Remove outdated proto.md --- docs/proto/proto.md | 1121 ------------------------------------------- 1 file changed, 1121 deletions(-) delete mode 100644 docs/proto/proto.md diff --git a/docs/proto/proto.md b/docs/proto/proto.md deleted file mode 100644 index 6637b9a28f..0000000000 --- a/docs/proto/proto.md +++ /dev/null @@ -1,1121 +0,0 @@ -# Protocol Documentation - - -## Table of Contents - -- [x/wasm/types/genesis.proto](#x/wasm/types/genesis.proto) - - [Code](#cosmwasm.wasm.v1beta1.Code) - - [Contract](#cosmwasm.wasm.v1beta1.Contract) - - [GenesisState](#cosmwasm.wasm.v1beta1.GenesisState) - - [GenesisState.GenMsgs](#cosmwasm.wasm.v1beta1.GenesisState.GenMsgs) - - [Sequence](#cosmwasm.wasm.v1beta1.Sequence) - -- [x/wasm/types/ibc.proto](#x/wasm/types/ibc.proto) - - [MsgIBCCloseChannel](#cosmwasm.wasm.v1beta1.MsgIBCCloseChannel) - - [MsgIBCSend](#cosmwasm.wasm.v1beta1.MsgIBCSend) - -- [x/wasm/types/proposal.proto](#x/wasm/types/proposal.proto) - - [ClearAdminProposal](#cosmwasm.wasm.v1beta1.ClearAdminProposal) - - [InstantiateContractProposal](#cosmwasm.wasm.v1beta1.InstantiateContractProposal) - - [MigrateContractProposal](#cosmwasm.wasm.v1beta1.MigrateContractProposal) - - [PinCodesProposal](#cosmwasm.wasm.v1beta1.PinCodesProposal) - - [StoreCodeProposal](#cosmwasm.wasm.v1beta1.StoreCodeProposal) - - [UnpinCodesProposal](#cosmwasm.wasm.v1beta1.UnpinCodesProposal) - - [UpdateAdminProposal](#cosmwasm.wasm.v1beta1.UpdateAdminProposal) - -- [x/wasm/types/query.proto](#x/wasm/types/query.proto) - - [CodeInfoResponse](#cosmwasm.wasm.v1beta1.CodeInfoResponse) - - [ContractInfoWithAddress](#cosmwasm.wasm.v1beta1.ContractInfoWithAddress) - - [QueryAllContractStateRequest](#cosmwasm.wasm.v1beta1.QueryAllContractStateRequest) - - [QueryAllContractStateResponse](#cosmwasm.wasm.v1beta1.QueryAllContractStateResponse) - - [QueryCodeRequest](#cosmwasm.wasm.v1beta1.QueryCodeRequest) - - [QueryCodeResponse](#cosmwasm.wasm.v1beta1.QueryCodeResponse) - - [QueryCodesRequest](#cosmwasm.wasm.v1beta1.QueryCodesRequest) - - [QueryCodesResponse](#cosmwasm.wasm.v1beta1.QueryCodesResponse) - - [QueryContractHistoryRequest](#cosmwasm.wasm.v1beta1.QueryContractHistoryRequest) - - [QueryContractHistoryResponse](#cosmwasm.wasm.v1beta1.QueryContractHistoryResponse) - - [QueryContractInfoRequest](#cosmwasm.wasm.v1beta1.QueryContractInfoRequest) - - [QueryContractInfoResponse](#cosmwasm.wasm.v1beta1.QueryContractInfoResponse) - - [QueryContractsByCodeRequest](#cosmwasm.wasm.v1beta1.QueryContractsByCodeRequest) - - [QueryContractsByCodeResponse](#cosmwasm.wasm.v1beta1.QueryContractsByCodeResponse) - - [QueryRawContractStateRequest](#cosmwasm.wasm.v1beta1.QueryRawContractStateRequest) - - [QueryRawContractStateResponse](#cosmwasm.wasm.v1beta1.QueryRawContractStateResponse) - - [QuerySmartContractStateRequest](#cosmwasm.wasm.v1beta1.QuerySmartContractStateRequest) - - [QuerySmartContractStateResponse](#cosmwasm.wasm.v1beta1.QuerySmartContractStateResponse) - - - [Query](#cosmwasm.wasm.v1beta1.Query) - -- [x/wasm/types/tx.proto](#x/wasm/types/tx.proto) - - [MsgClearAdmin](#cosmwasm.wasm.v1beta1.MsgClearAdmin) - - [MsgClearAdminResponse](#cosmwasm.wasm.v1beta1.MsgClearAdminResponse) - - [MsgExecuteContract](#cosmwasm.wasm.v1beta1.MsgExecuteContract) - - [MsgExecuteContractResponse](#cosmwasm.wasm.v1beta1.MsgExecuteContractResponse) - - [MsgInstantiateContract](#cosmwasm.wasm.v1beta1.MsgInstantiateContract) - - [MsgInstantiateContractResponse](#cosmwasm.wasm.v1beta1.MsgInstantiateContractResponse) - - [MsgMigrateContract](#cosmwasm.wasm.v1beta1.MsgMigrateContract) - - [MsgMigrateContractResponse](#cosmwasm.wasm.v1beta1.MsgMigrateContractResponse) - - [MsgStoreCode](#cosmwasm.wasm.v1beta1.MsgStoreCode) - - [MsgStoreCodeResponse](#cosmwasm.wasm.v1beta1.MsgStoreCodeResponse) - - [MsgUpdateAdmin](#cosmwasm.wasm.v1beta1.MsgUpdateAdmin) - - [MsgUpdateAdminResponse](#cosmwasm.wasm.v1beta1.MsgUpdateAdminResponse) - - - [Msg](#cosmwasm.wasm.v1beta1.Msg) - -- [x/wasm/types/types.proto](#x/wasm/types/types.proto) - - [AbsoluteTxPosition](#cosmwasm.wasm.v1beta1.AbsoluteTxPosition) - - [AccessConfig](#cosmwasm.wasm.v1beta1.AccessConfig) - - [AccessTypeParam](#cosmwasm.wasm.v1beta1.AccessTypeParam) - - [CodeInfo](#cosmwasm.wasm.v1beta1.CodeInfo) - - [ContractCodeHistoryEntry](#cosmwasm.wasm.v1beta1.ContractCodeHistoryEntry) - - [ContractInfo](#cosmwasm.wasm.v1beta1.ContractInfo) - - [Model](#cosmwasm.wasm.v1beta1.Model) - - [Params](#cosmwasm.wasm.v1beta1.Params) - - - [AccessType](#cosmwasm.wasm.v1beta1.AccessType) - - [ContractCodeHistoryOperationType](#cosmwasm.wasm.v1beta1.ContractCodeHistoryOperationType) - -- [Scalar Value Types](#scalar-value-types) - - - - -

Top

- -## x/wasm/types/genesis.proto - - - - - -### Code -Code struct encompasses CodeInfo and CodeBytes - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| code_id | [uint64](#uint64) | | | -| code_info | [CodeInfo](#cosmwasm.wasm.v1beta1.CodeInfo) | | | -| code_bytes | [bytes](#bytes) | | | -| pinned | [bool](#bool) | | Pinned to wasmvm cache | - - - - - - - - -### Contract -Contract struct encompasses ContractAddress, ContractInfo, and ContractState - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| contract_address | [string](#string) | | | -| contract_info | [ContractInfo](#cosmwasm.wasm.v1beta1.ContractInfo) | | | -| contract_state | [Model](#cosmwasm.wasm.v1beta1.Model) | repeated | | - - - - - - - - -### GenesisState -GenesisState - genesis state of x/wasm - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| params | [Params](#cosmwasm.wasm.v1beta1.Params) | | | -| codes | [Code](#cosmwasm.wasm.v1beta1.Code) | repeated | | -| contracts | [Contract](#cosmwasm.wasm.v1beta1.Contract) | repeated | | -| sequences | [Sequence](#cosmwasm.wasm.v1beta1.Sequence) | repeated | | -| gen_msgs | [GenesisState.GenMsgs](#cosmwasm.wasm.v1beta1.GenesisState.GenMsgs) | repeated | | - - - - - - - - -### GenesisState.GenMsgs -GenMsgs define the messages that can be executed during genesis phase in order. -The intention is to have more human readable data that is auditable. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| store_code | [MsgStoreCode](#cosmwasm.wasm.v1beta1.MsgStoreCode) | | | -| instantiate_contract | [MsgInstantiateContract](#cosmwasm.wasm.v1beta1.MsgInstantiateContract) | | | -| execute_contract | [MsgExecuteContract](#cosmwasm.wasm.v1beta1.MsgExecuteContract) | | | - - - - - - - - -### Sequence -Sequence key and value of an id generation counter - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| id_key | [bytes](#bytes) | | | -| value | [uint64](#uint64) | | | - - - - - - - - - - - - - - - - -

Top

- -## x/wasm/types/ibc.proto - - - - - -### MsgIBCCloseChannel -MsgIBCCloseChannel port and channel need to be owned by the contract - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| channel | [string](#string) | | | - - - - - - - - -### MsgIBCSend -MsgIBCSend - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| channel | [string](#string) | | the channel by which the packet will be sent | -| timeout_height | [uint64](#uint64) | | Timeout height relative to the current block height. The timeout is disabled when set to 0. | -| timeout_timestamp | [uint64](#uint64) | | Timeout timestamp (in nanoseconds) relative to the current block timestamp. The timeout is disabled when set to 0. | -| data | [bytes](#bytes) | | data is the payload to transfer | - - - - - - - - - - - - - - - - -

Top

- -## x/wasm/types/proposal.proto - - - - - -### ClearAdminProposal -ClearAdminProposal gov proposal content type to clear the admin of a contract. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| title | [string](#string) | | Title is a short summary | -| description | [string](#string) | | Description is a human readable text | -| contract | [string](#string) | | Contract is the address of the smart contract | - - - - - - - - -### InstantiateContractProposal -InstantiateContractProposal gov proposal content type to instantiate a contract. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| title | [string](#string) | | Title is a short summary | -| description | [string](#string) | | Description is a human readable text | -| run_as | [string](#string) | | RunAs is the address that is passed to the contract's environment as sender | -| admin | [string](#string) | | Admin is an optional address that can execute migrations | -| code_id | [uint64](#uint64) | | CodeID is the reference to the stored WASM code | -| label | [string](#string) | | Label is optional metadata to be stored with a constract instance. | -| init_msg | [bytes](#bytes) | | InitMsg json encoded message to be passed to the contract on instantiation | -| funds | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated | Funds coins that are transferred to the contract on instantiation | - - - - - - - - -### MigrateContractProposal -MigrateContractProposal gov proposal content type to migrate a contract. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| title | [string](#string) | | Title is a short summary | -| description | [string](#string) | | Description is a human readable text | -| run_as | [string](#string) | | RunAs is the address that is passed to the contract's environment as sender | -| contract | [string](#string) | | Contract is the address of the smart contract | -| code_id | [uint64](#uint64) | | CodeID references the new WASM code | -| migrate_msg | [bytes](#bytes) | | MigrateMsg json encoded message to be passed to the contract on migration | - - - - - - - - -### PinCodesProposal -PinCodesProposal gov proposal content type to pin a set of code ids in the wasmvm cache. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| title | [string](#string) | | Title is a short summary | -| description | [string](#string) | | Description is a human readable text | -| code_ids | [uint64](#uint64) | repeated | CodeIDs references the new WASM codes | - - - - - - - - -### StoreCodeProposal -StoreCodeProposal gov proposal content type to submit WASM code to the system - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| title | [string](#string) | | Title is a short summary | -| description | [string](#string) | | Description is a human readable text | -| run_as | [string](#string) | | RunAs is the address that is passed to the contract's environment as sender | -| wasm_byte_code | [bytes](#bytes) | | WASMByteCode can be raw or gzip compressed | -| source | [string](#string) | | Source is a valid absolute HTTPS URI to the contract's source code, optional | -| builder | [string](#string) | | Builder is a valid docker image name with tag, optional | -| instantiate_permission | [AccessConfig](#cosmwasm.wasm.v1beta1.AccessConfig) | | InstantiatePermission to apply on contract creation, optional | - - - - - - - - -### UnpinCodesProposal -UnpinCodesProposal gov proposal content type to unpin a set of code ids in the wasmvm cache. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| title | [string](#string) | | Title is a short summary | -| description | [string](#string) | | Description is a human readable text | -| code_ids | [uint64](#uint64) | repeated | CodeIDs references the WASM codes | - - - - - - - - -### UpdateAdminProposal -UpdateAdminProposal gov proposal content type to set an admin for a contract. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| title | [string](#string) | | Title is a short summary | -| description | [string](#string) | | Description is a human readable text | -| new_admin | [string](#string) | | NewAdmin address to be set | -| contract | [string](#string) | | Contract is the address of the smart contract | - - - - - - - - - - - - - - - - -

Top

- -## x/wasm/types/query.proto - - - - - -### CodeInfoResponse -CodeInfoResponse contains code meta data from CodeInfo - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| code_id | [uint64](#uint64) | | id for legacy support | -| creator | [string](#string) | | | -| data_hash | [bytes](#bytes) | | | -| source | [string](#string) | | | -| builder | [string](#string) | | | - - - - - - - - -### ContractInfoWithAddress -ContractInfoWithAddress adds the address (key) to the ContractInfo representation - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| address | [string](#string) | | | -| contract_info | [ContractInfo](#cosmwasm.wasm.v1beta1.ContractInfo) | | | - - - - - - - - -### QueryAllContractStateRequest -QueryAllContractStateRequest is the request type for the Query/AllContractState RPC method - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| address | [string](#string) | | address is the address of the contract | -| pagination | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) | | pagination defines an optional pagination for the request. | - - - - - - - - -### QueryAllContractStateResponse -QueryAllContractStateResponse is the response type for the Query/AllContractState RPC method - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| models | [Model](#cosmwasm.wasm.v1beta1.Model) | repeated | | -| pagination | [cosmos.base.query.v1beta1.PageResponse](#cosmos.base.query.v1beta1.PageResponse) | | pagination defines the pagination in the response. | - - - - - - - - -### QueryCodeRequest -QueryCodeRequest is the request type for the Query/Code RPC method - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| code_id | [uint64](#uint64) | | grpc-gateway_out does not support Go style CodID | - - - - - - - - -### QueryCodeResponse -QueryCodeResponse is the response type for the Query/Code RPC method - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| code_info | [CodeInfoResponse](#cosmwasm.wasm.v1beta1.CodeInfoResponse) | | | -| data | [bytes](#bytes) | | | - - - - - - - - -### QueryCodesRequest -QueryCodesRequest is the request type for the Query/Codes RPC method - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| pagination | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) | | pagination defines an optional pagination for the request. | - - - - - - - - -### QueryCodesResponse -QueryCodesResponse is the response type for the Query/Codes RPC method - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| code_infos | [CodeInfoResponse](#cosmwasm.wasm.v1beta1.CodeInfoResponse) | repeated | | -| pagination | [cosmos.base.query.v1beta1.PageResponse](#cosmos.base.query.v1beta1.PageResponse) | | pagination defines the pagination in the response. | - - - - - - - - -### QueryContractHistoryRequest -QueryContractHistoryRequest is the request type for the Query/ContractHistory RPC method - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| address | [string](#string) | | address is the address of the contract to query | -| pagination | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) | | pagination defines an optional pagination for the request. | - - - - - - - - -### QueryContractHistoryResponse -QueryContractHistoryResponse is the response type for the Query/ContractHistory RPC method - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| entries | [ContractCodeHistoryEntry](#cosmwasm.wasm.v1beta1.ContractCodeHistoryEntry) | repeated | | -| pagination | [cosmos.base.query.v1beta1.PageResponse](#cosmos.base.query.v1beta1.PageResponse) | | pagination defines the pagination in the response. | - - - - - - - - -### QueryContractInfoRequest -QueryContractInfoRequest is the request type for the Query/ContractInfo RPC method - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| address | [string](#string) | | address is the address of the contract to query | - - - - - - - - -### QueryContractInfoResponse -QueryContractInfoResponse is the response type for the Query/ContractInfo RPC method - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| address | [string](#string) | | address is the address of the contract | -| contract_info | [ContractInfo](#cosmwasm.wasm.v1beta1.ContractInfo) | | | - - - - - - - - -### QueryContractsByCodeRequest -QueryContractsByCodeRequest is the request type for the Query/ContractsByCode RPC method - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| code_id | [uint64](#uint64) | | grpc-gateway_out does not support Go style CodID | -| pagination | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) | | pagination defines an optional pagination for the request. | - - - - - - - - -### QueryContractsByCodeResponse -QueryContractsByCodeResponse is the response type for the Query/ContractsByCode RPC method - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| contract_infos | [ContractInfoWithAddress](#cosmwasm.wasm.v1beta1.ContractInfoWithAddress) | repeated | | -| pagination | [cosmos.base.query.v1beta1.PageResponse](#cosmos.base.query.v1beta1.PageResponse) | | pagination defines the pagination in the response. | - - - - - - - - -### QueryRawContractStateRequest -QueryRawContractStateRequest is the request type for the Query/RawContractState RPC method - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| address | [string](#string) | | address is the address of the contract | -| query_data | [bytes](#bytes) | | | - - - - - - - - -### QueryRawContractStateResponse -QueryRawContractStateResponse is the response type for the Query/RawContractState RPC method - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| data | [bytes](#bytes) | | Data contains the raw store data | - - - - - - - - -### QuerySmartContractStateRequest -QuerySmartContractStateRequest is the request type for the Query/SmartContractState RPC method - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| address | [string](#string) | | address is the address of the contract | -| query_data | [bytes](#bytes) | | QueryData contains the query data passed to the contract | - - - - - - - - -### QuerySmartContractStateResponse -QuerySmartContractStateResponse is the response type for the Query/SmartContractState RPC method - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| data | [bytes](#bytes) | | Data contains the json data returned from the smart contract | - - - - - - - - - - - - - - -### Query -Query provides defines the gRPC querier service - -| Method Name | Request Type | Response Type | Description | -| ----------- | ------------ | ------------- | ------------| -| ContractInfo | [QueryContractInfoRequest](#cosmwasm.wasm.v1beta1.QueryContractInfoRequest) | [QueryContractInfoResponse](#cosmwasm.wasm.v1beta1.QueryContractInfoResponse) | ContractInfo gets the contract meta data | -| ContractHistory | [QueryContractHistoryRequest](#cosmwasm.wasm.v1beta1.QueryContractHistoryRequest) | [QueryContractHistoryResponse](#cosmwasm.wasm.v1beta1.QueryContractHistoryResponse) | ContractHistory gets the contract code history | -| ContractsByCode | [QueryContractsByCodeRequest](#cosmwasm.wasm.v1beta1.QueryContractsByCodeRequest) | [QueryContractsByCodeResponse](#cosmwasm.wasm.v1beta1.QueryContractsByCodeResponse) | ContractsByCode lists all smart contracts for a code id | -| AllContractState | [QueryAllContractStateRequest](#cosmwasm.wasm.v1beta1.QueryAllContractStateRequest) | [QueryAllContractStateResponse](#cosmwasm.wasm.v1beta1.QueryAllContractStateResponse) | AllContractState gets all raw store data for a single contract | -| RawContractState | [QueryRawContractStateRequest](#cosmwasm.wasm.v1beta1.QueryRawContractStateRequest) | [QueryRawContractStateResponse](#cosmwasm.wasm.v1beta1.QueryRawContractStateResponse) | RawContractState gets single key from the raw store data of a contract | -| SmartContractState | [QuerySmartContractStateRequest](#cosmwasm.wasm.v1beta1.QuerySmartContractStateRequest) | [QuerySmartContractStateResponse](#cosmwasm.wasm.v1beta1.QuerySmartContractStateResponse) | SmartContractState get smart query result from the contract | -| Code | [QueryCodeRequest](#cosmwasm.wasm.v1beta1.QueryCodeRequest) | [QueryCodeResponse](#cosmwasm.wasm.v1beta1.QueryCodeResponse) | Code gets the binary code and metadata for a singe wasm code | -| Codes | [QueryCodesRequest](#cosmwasm.wasm.v1beta1.QueryCodesRequest) | [QueryCodesResponse](#cosmwasm.wasm.v1beta1.QueryCodesResponse) | Codes gets the metadata for all stored wasm codes | - - - - - - -

Top

- -## x/wasm/types/tx.proto - - - - - -### MsgClearAdmin -MsgClearAdmin removes any admin stored for a smart contract - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| sender | [string](#string) | | Sender is the that actor that signed the messages | -| contract | [string](#string) | | Contract is the address of the smart contract | - - - - - - - - -### MsgClearAdminResponse -MsgClearAdminResponse returns empty data - - - - - - - - -### MsgExecuteContract -MsgExecuteContract submits the given message data to a smart contract - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| sender | [string](#string) | | Sender is the that actor that signed the messages | -| contract | [string](#string) | | Contract is the address of the smart contract | -| msg | [bytes](#bytes) | | Msg json encoded message to be passed to the contract | -| funds | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated | Funds coins that are transferred to the contract on execution | - - - - - - - - -### MsgExecuteContractResponse -MsgExecuteContractResponse returns execution result data. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| data | [bytes](#bytes) | | Data contains base64-encoded bytes to returned from the contract | - - - - - - - - -### MsgInstantiateContract -MsgInstantiateContract create a new smart contract instance for the given code id. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| sender | [string](#string) | | Sender is the that actor that signed the messages | -| admin | [string](#string) | | Admin is an optional address that can execute migrations | -| code_id | [uint64](#uint64) | | CodeID is the reference to the stored WASM code | -| label | [string](#string) | | Label is optional metadata to be stored with a contract instance. | -| init_msg | [bytes](#bytes) | | InitMsg json encoded message to be passed to the contract on instantiation | -| funds | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated | Funds coins that are transferred to the contract on instantiation | - - - - - - - - -### MsgInstantiateContractResponse -MsgInstantiateContractResponse return instantiation result data - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| address | [string](#string) | | Address is the bech32 address of the new contract instance. | -| data | [bytes](#bytes) | | Data contains base64-encoded bytes to returned from the contract | - - - - - - - - -### MsgMigrateContract -MsgMigrateContract runs a code upgrade/ downgrade for a smart contract - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| sender | [string](#string) | | Sender is the that actor that signed the messages | -| contract | [string](#string) | | Contract is the address of the smart contract | -| code_id | [uint64](#uint64) | | CodeID references the new WASM code | -| migrate_msg | [bytes](#bytes) | | MigrateMsg json encoded message to be passed to the contract on migration | - - - - - - - - -### MsgMigrateContractResponse -MsgMigrateContractResponse returns contract migration result data. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| data | [bytes](#bytes) | | Data contains same raw bytes returned as data from the wasm contract. (May be empty) | - - - - - - - - -### MsgStoreCode -MsgStoreCode submit Wasm code to the system - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| sender | [string](#string) | | Sender is the that actor that signed the messages | -| wasm_byte_code | [bytes](#bytes) | | WASMByteCode can be raw or gzip compressed | -| source | [string](#string) | | Source is a valid absolute HTTPS URI to the contract's source code, optional | -| builder | [string](#string) | | Builder is a valid docker image name with tag, optional | -| instantiate_permission | [AccessConfig](#cosmwasm.wasm.v1beta1.AccessConfig) | | InstantiatePermission access control to apply on contract creation, optional | - - - - - - - - -### MsgStoreCodeResponse -MsgStoreCodeResponse returns store result data. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| code_id | [uint64](#uint64) | | CodeID is the reference to the stored WASM code | - - - - - - - - -### MsgUpdateAdmin -MsgUpdateAdmin sets a new admin for a smart contract - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| sender | [string](#string) | | Sender is the that actor that signed the messages | -| new_admin | [string](#string) | | NewAdmin address to be set | -| contract | [string](#string) | | Contract is the address of the smart contract | - - - - - - - - -### MsgUpdateAdminResponse -MsgUpdateAdminResponse returns empty data - - - - - - - - - - - - - - -### Msg -Msg defines the wasm Msg service. - -| Method Name | Request Type | Response Type | Description | -| ----------- | ------------ | ------------- | ------------| -| StoreCode | [MsgStoreCode](#cosmwasm.wasm.v1beta1.MsgStoreCode) | [MsgStoreCodeResponse](#cosmwasm.wasm.v1beta1.MsgStoreCodeResponse) | StoreCode to submit Wasm code to the system | -| InstantiateContract | [MsgInstantiateContract](#cosmwasm.wasm.v1beta1.MsgInstantiateContract) | [MsgInstantiateContractResponse](#cosmwasm.wasm.v1beta1.MsgInstantiateContractResponse) | Instantiate creates a new smart contract instance for the given code id. | -| ExecuteContract | [MsgExecuteContract](#cosmwasm.wasm.v1beta1.MsgExecuteContract) | [MsgExecuteContractResponse](#cosmwasm.wasm.v1beta1.MsgExecuteContractResponse) | Execute submits the given message data to a smart contract | -| MigrateContract | [MsgMigrateContract](#cosmwasm.wasm.v1beta1.MsgMigrateContract) | [MsgMigrateContractResponse](#cosmwasm.wasm.v1beta1.MsgMigrateContractResponse) | Migrate runs a code upgrade/ downgrade for a smart contract | -| UpdateAdmin | [MsgUpdateAdmin](#cosmwasm.wasm.v1beta1.MsgUpdateAdmin) | [MsgUpdateAdminResponse](#cosmwasm.wasm.v1beta1.MsgUpdateAdminResponse) | UpdateAdmin sets a new admin for a smart contract | -| ClearAdmin | [MsgClearAdmin](#cosmwasm.wasm.v1beta1.MsgClearAdmin) | [MsgClearAdminResponse](#cosmwasm.wasm.v1beta1.MsgClearAdminResponse) | ClearAdmin removes any admin stored for a smart contract | - - - - - - -

Top

- -## x/wasm/types/types.proto - - - - - -### AbsoluteTxPosition -AbsoluteTxPosition is a unique transaction position that allows for global ordering of transactions. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| block_height | [uint64](#uint64) | | BlockHeight is the block the contract was created at | -| tx_index | [uint64](#uint64) | | TxIndex is a monotonic counter within the block (actual transaction index, or gas consumed) | - - - - - - - - -### AccessConfig -AccessConfig access control type. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| permission | [AccessType](#cosmwasm.wasm.v1beta1.AccessType) | | | -| address | [string](#string) | | | - - - - - - - - -### AccessTypeParam -AccessTypeParam - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| value | [AccessType](#cosmwasm.wasm.v1beta1.AccessType) | | | - - - - - - - - -### CodeInfo -CodeInfo is data for the uploaded contract WASM code - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| code_hash | [bytes](#bytes) | | CodeHash is the unique identifier created by wasmvm | -| creator | [string](#string) | | Creator address who initially stored the code | -| source | [string](#string) | | Source is a valid absolute HTTPS URI to the contract's source code, optional | -| builder | [string](#string) | | Builder is a valid docker image name with tag, optional | -| instantiate_config | [AccessConfig](#cosmwasm.wasm.v1beta1.AccessConfig) | | InstantiateConfig access control to apply on contract creation, optional | - - - - - - - - -### ContractCodeHistoryEntry -ContractCodeHistoryEntry metadata to a contract. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| operation | [ContractCodeHistoryOperationType](#cosmwasm.wasm.v1beta1.ContractCodeHistoryOperationType) | | | -| code_id | [uint64](#uint64) | | CodeID is the reference to the stored WASM code | -| updated | [AbsoluteTxPosition](#cosmwasm.wasm.v1beta1.AbsoluteTxPosition) | | Updated Tx position when the operation was executed. | -| msg | [bytes](#bytes) | | | - - - - - - - - -### ContractInfo -ContractInfo stores a WASM contract instance - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| code_id | [uint64](#uint64) | | CodeID is the reference to the stored Wasm code | -| creator | [string](#string) | | Creator address who initially instantiated the contract | -| admin | [string](#string) | | Admin is an optional address that can execute migrations | -| label | [string](#string) | | Label is optional metadata to be stored with a contract instance. | -| created | [AbsoluteTxPosition](#cosmwasm.wasm.v1beta1.AbsoluteTxPosition) | | Created Tx position when the contract was instantiated. This data should kept internal and not be exposed via query results. Just use for sorting | -| ibc_port_id | [string](#string) | | | - - - - - - - - -### Model -Model is a struct that holds a KV pair - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| key | [bytes](#bytes) | | hex-encode key to read it better (this is often ascii) | -| value | [bytes](#bytes) | | base64-encode raw value | - - - - - - - - -### Params -Params defines the set of wasm parameters. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| code_upload_access | [AccessConfig](#cosmwasm.wasm.v1beta1.AccessConfig) | | | -| instantiate_default_permission | [AccessType](#cosmwasm.wasm.v1beta1.AccessType) | | | -| max_wasm_code_size | [uint64](#uint64) | | | - - - - - - - - - - -### AccessType -AccessType permission types - -| Name | Number | Description | -| ---- | ------ | ----------- | -| ACCESS_TYPE_UNSPECIFIED | 0 | AccessTypeUnspecified placeholder for empty value | -| ACCESS_TYPE_NOBODY | 1 | AccessTypeNobody forbidden | -| ACCESS_TYPE_ONLY_ADDRESS | 2 | AccessTypeOnlyAddress restricted to an address | -| ACCESS_TYPE_EVERYBODY | 3 | AccessTypeEverybody unrestricted | - - - - - -### ContractCodeHistoryOperationType -ContractCodeHistoryOperationType actions that caused a code change - -| Name | Number | Description | -| ---- | ------ | ----------- | -| CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED | 0 | ContractCodeHistoryOperationTypeUnspecified placeholder for empty value | -| CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT | 1 | ContractCodeHistoryOperationTypeInit on chain contract instantiation | -| CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE | 2 | ContractCodeHistoryOperationTypeMigrate code migration | -| CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS | 3 | ContractCodeHistoryOperationTypeGenesis based on genesis data | - - - - - - - - - - -## Scalar Value Types - -| .proto Type | Notes | C++ | Java | Python | Go | C# | PHP | Ruby | -| ----------- | ----- | --- | ---- | ------ | -- | -- | --- | ---- | -| double | | double | double | float | float64 | double | float | Float | -| float | | float | float | float | float32 | float | float | Float | -| int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) | -| int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long | int64 | long | integer/string | Bignum | -| uint32 | Uses variable-length encoding. | uint32 | int | int/long | uint32 | uint | integer | Bignum or Fixnum (as required) | -| uint64 | Uses variable-length encoding. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum or Fixnum (as required) | -| sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) | -| sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long | int64 | long | integer/string | Bignum | -| fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int | uint32 | uint | integer | Bignum or Fixnum (as required) | -| fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum | -| sfixed32 | Always four bytes. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) | -| sfixed64 | Always eight bytes. | int64 | long | int/long | int64 | long | integer/string | Bignum | -| bool | | bool | boolean | boolean | bool | bool | boolean | TrueClass/FalseClass | -| string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | string | string | string | String (UTF-8) | -| bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | []byte | ByteString | string | String (ASCII-8BIT) | - From 29340b692a94e71fa01be3fcf4fa41f47fb35187 Mon Sep 17 00:00:00 2001 From: "shiki.takahashi" Date: Tue, 19 Jul 2022 16:24:34 +0900 Subject: [PATCH 007/120] Remove unnecessary error check --- x/wasm/keeper/proposal_handler.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/x/wasm/keeper/proposal_handler.go b/x/wasm/keeper/proposal_handler.go index 9da330ce0f..6d99fb3624 100644 --- a/x/wasm/keeper/proposal_handler.go +++ b/x/wasm/keeper/proposal_handler.go @@ -107,9 +107,7 @@ func handleMigrateProposal(ctx sdk.Context, k types.ContractOpsKeeper, p types.M if err != nil { return sdkerrors.Wrap(err, "contract") } - if err != nil { - return sdkerrors.Wrap(err, "run as address") - } + // runAs is not used if this is permissioned, so just put any valid address there (second contractAddr) data, err := k.Migrate(ctx, contractAddr, contractAddr, p.CodeID, p.Msg) if err != nil { From 3864815113aabf281442e800e2fa6f7a8b3d6aeb Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Thu, 21 Jul 2022 10:02:59 +0700 Subject: [PATCH 008/120] Create .gitpod.yml --- .gitpod.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitpod.yml diff --git a/.gitpod.yml b/.gitpod.yml new file mode 100644 index 0000000000..1a76547d87 --- /dev/null +++ b/.gitpod.yml @@ -0,0 +1 @@ +image: github.com/notional-labs/cosmos From ee44cc06d0a6c8a35c5657cb765f6c6ba39902fa Mon Sep 17 00:00:00 2001 From: Assaf Morami Date: Thu, 28 Jul 2022 12:52:06 +0300 Subject: [PATCH 009/120] Don't pass non-wasm events to reply() Output events are not part of consensus and can be non-deterministic --- x/wasm/keeper/msg_dispatcher.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/x/wasm/keeper/msg_dispatcher.go b/x/wasm/keeper/msg_dispatcher.go index a3e7e3a142..1a32af409f 100644 --- a/x/wasm/keeper/msg_dispatcher.go +++ b/x/wasm/keeper/msg_dispatcher.go @@ -107,6 +107,9 @@ func (d MessageDispatcher) DispatchSubmessages(ctx sdk.Context, contractAddr sdk commit() filteredEvents = filterEvents(append(em.Events(), events...)) ctx.EventManager().EmitEvents(filteredEvents) + if msg.Msg.Wasm != nil { + filteredEvents = []sdk.Event{} + } } // on failure, revert state from sandbox, and ignore events (just skip doing the above) // we only callback if requested. Short-circuit here the cases we don't want to From 9671a21430e5a0e64c4adf5dc7d273c1a976a7ff Mon Sep 17 00:00:00 2001 From: Assaf Morami Date: Thu, 28 Jul 2022 12:53:28 +0300 Subject: [PATCH 010/120] Oops --- x/wasm/keeper/msg_dispatcher.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/wasm/keeper/msg_dispatcher.go b/x/wasm/keeper/msg_dispatcher.go index 1a32af409f..51650d85ef 100644 --- a/x/wasm/keeper/msg_dispatcher.go +++ b/x/wasm/keeper/msg_dispatcher.go @@ -107,7 +107,7 @@ func (d MessageDispatcher) DispatchSubmessages(ctx sdk.Context, contractAddr sdk commit() filteredEvents = filterEvents(append(em.Events(), events...)) ctx.EventManager().EmitEvents(filteredEvents) - if msg.Msg.Wasm != nil { + if msg.Msg.Wasm == nil { filteredEvents = []sdk.Event{} } } // on failure, revert state from sandbox, and ignore events (just skip doing the above) From f7211b8dd05d040d6fbe67fb20980dcd2bb0e6f4 Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Fri, 29 Jul 2022 07:54:13 +0200 Subject: [PATCH 011/120] Add changelog for fix --- CHANGELOG.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a718846617..9467435b3e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,20 @@ ## [Unreleased](https://github.com/CosmWasm/wasmd/tree/HEAD) -[Full Changelog](https://github.com/CosmWasm/wasmd/compare/v0.27.0...HEAD) +[Full Changelog](https://github.com/CosmWasm/wasmd/compare/v0.28.0...HEAD) + +## [v0.27.0](https://github.com/CosmWasm/wasmd/tree/v0.28.0) (2022-07-29) + +[Full Changelog](https://github.com/CosmWasm/wasmd/compare/v0.27.0...v0.28.0) + +**API Breaking** + +No + +**Fixed Bugs** + +- Fix: Make events in reply completely determinisitic by stripping out anything coming from Cosmos SDK (not CosmWasm codebase) [\#917](https://github.com/CosmWasm/wasmd/pull/917) ([assafmo](https://github.com/assafmo)) + ## [v0.27.0](https://github.com/CosmWasm/wasmd/tree/v0.27.0) (2022-05-19) From ce1cf7446dc80c06cbdd54c3e003a7f6e49f56e4 Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Fri, 29 Jul 2022 08:09:39 +0200 Subject: [PATCH 012/120] Fix tests in keeper --- CHANGELOG.md | 6 ++++ x/wasm/keeper/msg_dispatcher_test.go | 47 ++++++++++++++++++++++++++-- x/wasm/keeper/submsg_test.go | 15 +++------ 3 files changed, 55 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9467435b3e..fedf6aafec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,12 @@ No - Fix: Make events in reply completely determinisitic by stripping out anything coming from Cosmos SDK (not CosmWasm codebase) [\#917](https://github.com/CosmWasm/wasmd/pull/917) ([assafmo](https://github.com/assafmo)) +Migration notes: + +* Contracts can no longer parse events from any calls except if they call another contract (or instantiate it, migrate it, etc). +The main issue here is likely "Custom" queries from a blockchain, which want to send info (eg. how many tokens were swapped). +Since those custom bindings are maintained by the chain, they can use the data field to pass any deterministic information +back to the contract. We recommend using JSON encoding there with some documented format the contracts can parse out easily. ## [v0.27.0](https://github.com/CosmWasm/wasmd/tree/v0.27.0) (2022-05-19) diff --git a/x/wasm/keeper/msg_dispatcher_test.go b/x/wasm/keeper/msg_dispatcher_test.go index 529a208ff0..e514ae4119 100644 --- a/x/wasm/keeper/msg_dispatcher_test.go +++ b/x/wasm/keeper/msg_dispatcher_test.go @@ -296,8 +296,9 @@ func TestDispatchSubmessages(t *testing.T) { expCommits: []bool{true}, expEvents: []sdk.Event{sdk.NewEvent("execute", sdk.NewAttribute("foo", "bar"))}, }, - "reply gets proper events": { - msgs: []wasmvmtypes.SubMsg{{ID: 1, ReplyOn: wasmvmtypes.ReplyAlways}}, + "wasm reply gets proper events": { + // put fake wasmmsg in here to show where it comes from + msgs: []wasmvmtypes.SubMsg{{ID: 1, ReplyOn: wasmvmtypes.ReplyAlways, Msg: wasmvmtypes.CosmosMsg{Wasm: &wasmvmtypes.WasmMsg{}}}}, replyer: &mockReplyer{ replyFn: func(ctx sdk.Context, contractAddress sdk.AccAddress, reply wasmvmtypes.Reply) ([]byte, error) { if reply.Result.Err != "" { @@ -343,6 +344,48 @@ func TestDispatchSubmessages(t *testing.T) { sdk.NewEvent("wasm-reply"), }, }, + "non-wasm reply events get filtered": { + // show events from a stargate message gets filtered out + msgs: []wasmvmtypes.SubMsg{{ID: 1, ReplyOn: wasmvmtypes.ReplyAlways, Msg: wasmvmtypes.CosmosMsg{Stargate: &wasmvmtypes.StargateMsg{}}}}, + replyer: &mockReplyer{ + replyFn: func(ctx sdk.Context, contractAddress sdk.AccAddress, reply wasmvmtypes.Reply) ([]byte, error) { + if reply.Result.Err != "" { + return nil, errors.New(reply.Result.Err) + } + res := reply.Result.Ok + + // ensure the input events are what we expect + // I didn't use require.Equal() to act more like a contract... but maybe that would be better + if len(res.Events) != 0 { + return nil, errors.New("events not filtered out") + } + + // let's add a custom event here and see if it makes it out + ctx.EventManager().EmitEvent(sdk.NewEvent("stargate-reply")) + + // update data from what we got in + return res.Data, nil + }, + }, + msgHandler: &wasmtesting.MockMessageHandler{ + DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { + events = []sdk.Event{ + // this is filtered out + sdk.NewEvent("message", sdk.NewAttribute("stargate", "something-something")), + // we still emit this to the client, but not the contract + sdk.NewEvent("non-determinstic"), + } + return events, [][]byte{[]byte("subData")}, nil + }, + }, + expData: []byte("subData"), + expCommits: []bool{true}, + expEvents: []sdk.Event{ + sdk.NewEvent("non-determinstic"), + // the event from reply is also exposed + sdk.NewEvent("stargate-reply"), + }, + }, } for name, spec := range specs { t.Run(name, func(t *testing.T) { diff --git a/x/wasm/keeper/submsg_test.go b/x/wasm/keeper/submsg_test.go index 7d83c8ffcd..4d7075761f 100644 --- a/x/wasm/keeper/submsg_test.go +++ b/x/wasm/keeper/submsg_test.go @@ -96,15 +96,8 @@ func TestDispatchSubMsgSuccessCase(t *testing.T) { require.NotNil(t, res.Result.Ok) sub := res.Result.Ok assert.Empty(t, sub.Data) - require.Len(t, sub.Events, 3) - assert.Equal(t, "coin_spent", sub.Events[0].Type) - assert.Equal(t, "coin_received", sub.Events[1].Type) - transfer := sub.Events[2] - assert.Equal(t, "transfer", transfer.Type) - assert.Equal(t, wasmvmtypes.EventAttribute{ - Key: "recipient", - Value: fred.String(), - }, transfer.Attributes[0]) + // as of v0.28.0 we strip out all events that don't come from wasm contracts. can't trust the sdk. + require.Len(t, sub.Events, 0) } func TestDispatchSubMsgErrorHandling(t *testing.T) { @@ -247,7 +240,7 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { "send tokens": { submsgID: 5, msg: validBankSend, - resultAssertions: []assertion{assertReturnedEvents(3), assertGasUsed(112000, 112900)}, + resultAssertions: []assertion{assertReturnedEvents(0), assertGasUsed(95000, 96000)}, }, "not enough tokens": { submsgID: 6, @@ -267,7 +260,7 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { msg: validBankSend, gasLimit: &subGasLimit, // uses same gas as call without limit (note we do not charge the 40k on reply) - resultAssertions: []assertion{assertReturnedEvents(3), assertGasUsed(112000, 113000)}, + resultAssertions: []assertion{assertReturnedEvents(0), assertGasUsed(95000, 96000)}, }, "not enough tokens with limit": { submsgID: 16, From e08c8a37c8a2d3fc0d9a99db9fca1e19bf3f1c43 Mon Sep 17 00:00:00 2001 From: Alex Lynham Date: Thu, 28 Jul 2022 11:04:24 +0100 Subject: [PATCH 013/120] Add sorting fix from terra devs --- x/wasm/keeper/keeper.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index 3fdcbec483..29b8b2f3eb 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -500,6 +500,16 @@ func (k Keeper) reply(ctx sdk.Context, contractAddress sdk.AccAddress, reply was // prepare querier querier := k.newQueryHandler(ctx, contractAddress) gas := k.runtimeGasForContract(ctx) + if reply.Result.Ok != nil { + events := reply.Result.Ok.Events + for _, e := range events { + attributes := e.Attributes + sort.SliceStable(attributes, func(i, j int) bool { + return bytes.Compare([]byte(attributes[i].Key), []byte(attributes[j].Key)) == -1 + }) + } + } + res, gasUsed, execErr := k.wasmVM.Reply(codeInfo.CodeHash, env, reply, prefixStore, cosmwasmAPI, querier, k.gasMeter(ctx), gas, costJSONDeserialization) k.consumeRuntimeGas(ctx, gasUsed) if execErr != nil { From 393f49e5cbfe836876db9aa7e59e64372cd63c88 Mon Sep 17 00:00:00 2001 From: Alex Lynham Date: Thu, 28 Jul 2022 11:18:46 +0100 Subject: [PATCH 014/120] Fix imports --- x/wasm/keeper/keeper.go | 1 + 1 file changed, 1 insertion(+) diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index 29b8b2f3eb..6dd3ad8581 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -7,6 +7,7 @@ import ( "fmt" "math" "path/filepath" + "sort" "strconv" "strings" "time" From a697c70650ba48a0d1ccc992cc64307e27bd3f24 Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Fri, 29 Jul 2022 08:34:23 +0200 Subject: [PATCH 015/120] Code cleanup suggested by @peterbourgon --- x/wasm/keeper/keeper.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index 6dd3ad8581..3f4f883bd1 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -506,7 +506,7 @@ func (k Keeper) reply(ctx sdk.Context, contractAddress sdk.AccAddress, reply was for _, e := range events { attributes := e.Attributes sort.SliceStable(attributes, func(i, j int) bool { - return bytes.Compare([]byte(attributes[i].Key), []byte(attributes[j].Key)) == -1 + return attributes[i].Key < attributes[j].Key }) } } From c25550d775aaaea61d3b6e58cfa829a3c316f91a Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Fri, 29 Jul 2022 08:42:47 +0200 Subject: [PATCH 016/120] put sorting fix next to event filtering --- x/wasm/keeper/keeper.go | 10 ---------- x/wasm/keeper/msg_dispatcher.go | 9 +++++++++ 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index 3f4f883bd1..986a185e0a 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -7,7 +7,6 @@ import ( "fmt" "math" "path/filepath" - "sort" "strconv" "strings" "time" @@ -501,15 +500,6 @@ func (k Keeper) reply(ctx sdk.Context, contractAddress sdk.AccAddress, reply was // prepare querier querier := k.newQueryHandler(ctx, contractAddress) gas := k.runtimeGasForContract(ctx) - if reply.Result.Ok != nil { - events := reply.Result.Ok.Events - for _, e := range events { - attributes := e.Attributes - sort.SliceStable(attributes, func(i, j int) bool { - return attributes[i].Key < attributes[j].Key - }) - } - } res, gasUsed, execErr := k.wasmVM.Reply(codeInfo.CodeHash, env, reply, prefixStore, cosmwasmAPI, querier, k.gasMeter(ctx), gas, costJSONDeserialization) k.consumeRuntimeGas(ctx, gasUsed) diff --git a/x/wasm/keeper/msg_dispatcher.go b/x/wasm/keeper/msg_dispatcher.go index 51650d85ef..59a836fa5f 100644 --- a/x/wasm/keeper/msg_dispatcher.go +++ b/x/wasm/keeper/msg_dispatcher.go @@ -1,7 +1,9 @@ package keeper import ( + "bytes" "fmt" + "sort" wasmvmtypes "github.com/CosmWasm/wasmvm/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -109,6 +111,13 @@ func (d MessageDispatcher) DispatchSubmessages(ctx sdk.Context, contractAddr sdk ctx.EventManager().EmitEvents(filteredEvents) if msg.Msg.Wasm == nil { filteredEvents = []sdk.Event{} + } else { + for _, e := range filteredEvents { + attributes := e.Attributes + sort.SliceStable(attributes, func(i, j int) bool { + return bytes.Compare(attributes[i].Key, attributes[j].Key) < 0 + }) + } } } // on failure, revert state from sandbox, and ignore events (just skip doing the above) From 90a3781351c8838c5819096940d73744823a82d2 Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Fri, 29 Jul 2022 08:45:15 +0200 Subject: [PATCH 017/120] Add changelog entry --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fedf6aafec..a3f7e06fa4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ [Full Changelog](https://github.com/CosmWasm/wasmd/compare/v0.28.0...HEAD) -## [v0.27.0](https://github.com/CosmWasm/wasmd/tree/v0.28.0) (2022-07-29) +## [v0.28.0](https://github.com/CosmWasm/wasmd/tree/v0.28.0) (2022-07-29) [Full Changelog](https://github.com/CosmWasm/wasmd/compare/v0.27.0...v0.28.0) @@ -22,6 +22,7 @@ Migration notes: The main issue here is likely "Custom" queries from a blockchain, which want to send info (eg. how many tokens were swapped). Since those custom bindings are maintained by the chain, they can use the data field to pass any deterministic information back to the contract. We recommend using JSON encoding there with some documented format the contracts can parse out easily. +* For possible non-determinism issues, we also sort all attributes in events. Better safe than sorry. ## [v0.27.0](https://github.com/CosmWasm/wasmd/tree/v0.27.0) (2022-05-19) From a0648ee91b6331bf9dbe27586b5f48023984711b Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Wed, 10 Aug 2022 10:36:06 +0700 Subject: [PATCH 018/120] 457 --- app/test_helpers.go | 6 +- benchmarks/app_test.go | 8 +- go.mod | 51 ++-- go.sum | 501 ++++++++++++++++++++++++++++++--- x/wasm/simulation/sim_utils.go | 1 + 5 files changed, 505 insertions(+), 62 deletions(-) diff --git a/app/test_helpers.go b/app/test_helpers.go index 11e72135b3..786aabc011 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -5,6 +5,7 @@ import ( "encoding/hex" "encoding/json" "fmt" + "math/rand" "path/filepath" "strconv" "testing" @@ -294,10 +295,11 @@ func SignCheckDeliver( chainID string, accNums, accSeqs []uint64, expSimPass, expPass bool, priv ...cryptotypes.PrivKey, ) (sdk.GasInfo, *sdk.Result, error) { tx, err := helpers.GenTx( + rand.New(rand.NewSource(time.Now().UnixNano())), txCfg, msgs, sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 0)}, - 2*DefaultGas, + helpers.DefaultGenTxGas, chainID, accNums, accSeqs, @@ -343,6 +345,7 @@ func SignAndDeliver( chainID string, accNums, accSeqs []uint64, expSimPass, expPass bool, priv ...cryptotypes.PrivKey, ) (sdk.GasInfo, *sdk.Result, error) { tx, err := helpers.GenTx( + rand.New(rand.NewSource(time.Now().UnixNano())), txCfg, msgs, sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 0)}, @@ -380,6 +383,7 @@ func GenSequenceOfTxs(txGen client.TxConfig, msgs []sdk.Msg, accNums []uint64, i var err error for i := 0; i < numToGenerate; i++ { txs[i], err = helpers.GenTx( + rand.New(rand.NewSource(time.Now().UnixNano())), txGen, msgs, sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 0)}, diff --git a/benchmarks/app_test.go b/benchmarks/app_test.go index 1fbfb48663..5ff130650c 100644 --- a/benchmarks/app_test.go +++ b/benchmarks/app_test.go @@ -3,6 +3,7 @@ package benchmarks import ( "encoding/json" "io/ioutil" + "math/rand" "testing" "time" @@ -125,7 +126,8 @@ func InitializeWasmApp(b testing.TB, db dbm.DB, numAccounts int) AppInfo { Sender: addr.String(), WASMByteCode: cw20Code, } - storeTx, err := helpers.GenTx(txGen, []sdk.Msg{&storeMsg}, nil, 55123123, "", []uint64{0}, []uint64{0}, minter) + storeTx, err := helpers.GenTx(rand.New(rand.NewSource(time.Now().UnixNano())), + txGen, []sdk.Msg{&storeMsg}, nil, 55123123, "", []uint64{0}, []uint64{0}, minter) require.NoError(b, err) _, res, err := wasmApp.Deliver(txGen.TxEncoder(), storeTx) require.NoError(b, err) @@ -159,7 +161,8 @@ func InitializeWasmApp(b testing.TB, db dbm.DB, numAccounts int) AppInfo { Msg: initBz, } gasWanted := 500000 + 10000*uint64(numAccounts) - initTx, err := helpers.GenTx(txGen, []sdk.Msg{&initMsg}, nil, gasWanted, "", []uint64{0}, []uint64{1}, minter) + initTx, err := helpers.GenTx(rand.New(rand.NewSource(time.Now().UnixNano())), + txGen, []sdk.Msg{&initMsg}, nil, gasWanted, "", []uint64{0}, []uint64{1}, minter) require.NoError(b, err) _, res, err = wasmApp.Deliver(txGen.TxEncoder(), initTx) require.NoError(b, err) @@ -192,6 +195,7 @@ func GenSequenceOfTxs(b testing.TB, info *AppInfo, msgGen func(*AppInfo) ([]sdk. msgs, err := msgGen(info) require.NoError(b, err) txs[i], err = helpers.GenTx( + rand.New(rand.NewSource(time.Now().UnixNano())), info.TxConfig, msgs, fees, diff --git a/go.mod b/go.mod index 9d00684e0d..8d08f9830f 100644 --- a/go.mod +++ b/go.mod @@ -4,9 +4,9 @@ go 1.17 require ( github.com/CosmWasm/wasmvm v1.0.0 - github.com/cosmos/cosmos-sdk v0.45.5 - github.com/cosmos/iavl v0.17.3 - github.com/cosmos/ibc-go/v3 v3.0.0 + github.com/cosmos/cosmos-sdk v0.45.7 + github.com/cosmos/iavl v0.19.1 + github.com/cosmos/ibc-go/v3 v3.1.1 github.com/cosmos/interchain-accounts v0.1.0 github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b github.com/gogo/protobuf v1.3.3 @@ -20,15 +20,15 @@ require ( github.com/regen-network/cosmos-proto v0.3.1 github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa github.com/spf13/cast v1.5.0 - github.com/spf13/cobra v1.4.0 + github.com/spf13/cobra v1.5.0 github.com/spf13/pflag v1.0.5 - github.com/spf13/viper v1.11.0 + github.com/spf13/viper v1.12.0 github.com/stretchr/testify v1.8.0 github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca - github.com/tendermint/tendermint v0.34.19 + github.com/tendermint/tendermint v0.34.20 github.com/tendermint/tm-db v0.6.7 - google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac - google.golang.org/grpc v1.45.0 + google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd + google.golang.org/grpc v1.48.0 gopkg.in/yaml.v2 v2.4.0 ) @@ -41,7 +41,7 @@ require ( github.com/armon/go-metrics v0.3.10 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/speakeasy v0.1.0 // indirect - github.com/btcsuite/btcd v0.22.0-beta // indirect + github.com/btcsuite/btcd v0.22.1 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/coinbase/rosetta-sdk-go v0.7.0 // indirect @@ -59,9 +59,9 @@ require ( github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/dustin/go-humanize v1.0.0 // indirect github.com/felixge/httpsnoop v1.0.1 // indirect - github.com/fsnotify/fsnotify v1.5.1 // indirect + github.com/fsnotify/fsnotify v1.5.4 // indirect github.com/go-kit/kit v0.12.0 // indirect - github.com/go-kit/log v0.2.0 // indirect + github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/gateway v1.1.0 // indirect @@ -82,42 +82,43 @@ require ( github.com/inconshreveable/mousetrap v1.0.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d // indirect - github.com/klauspost/compress v1.13.6 // indirect - github.com/lib/pq v1.10.4 // indirect - github.com/libp2p/go-buffer-pool v0.0.2 // indirect + github.com/klauspost/compress v1.15.1 // indirect + github.com/lib/pq v1.10.6 // indirect + github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/magiconair/properties v1.8.6 // indirect + github.com/mattn/go-colorable v0.1.12 // indirect github.com/mattn/go-isatty v0.0.14 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/mitchellh/mapstructure v1.4.3 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect - github.com/pelletier/go-toml v1.9.4 // indirect - github.com/pelletier/go-toml/v2 v2.0.0-beta.8 // indirect + github.com/pelletier/go-toml v1.9.5 // indirect + github.com/pelletier/go-toml/v2 v2.0.2 // indirect github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.2.0 // indirect - github.com/prometheus/common v0.32.1 // indirect + github.com/prometheus/common v0.34.0 // indirect github.com/prometheus/procfs v0.7.3 // indirect github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 // indirect github.com/rs/cors v1.8.2 // indirect - github.com/rs/zerolog v1.26.0 // indirect + github.com/rs/zerolog v1.27.0 // indirect github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa // indirect github.com/spf13/afero v1.8.2 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect - github.com/subosito/gotenv v1.2.0 // indirect + github.com/subosito/gotenv v1.4.0 // indirect github.com/tendermint/btcd v0.1.1 // indirect github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/zondax/hid v0.9.0 // indirect go.etcd.io/bbolt v1.3.6 // indirect - golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect - golang.org/x/net v0.0.0-20220412020605-290c469a71a5 // indirect - golang.org/x/sys v0.0.0-20220412211240-33da011f77ad // indirect - golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect + golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect + golang.org/x/net v0.0.0-20220617184016-355a448f1bc9 // indirect + golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c // indirect + golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 // indirect golang.org/x/text v0.3.7 // indirect google.golang.org/protobuf v1.28.0 // indirect - gopkg.in/ini.v1 v1.66.4 // indirect + gopkg.in/ini.v1 v1.66.6 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect nhooyr.io/websocket v1.8.6 // indirect ) diff --git a/go.sum b/go.sum index 1cf0811d1e..2faefe03f6 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ +4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= +bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= @@ -13,6 +15,7 @@ cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6 cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= @@ -40,6 +43,8 @@ cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM7 cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= @@ -48,15 +53,20 @@ cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2k cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w= +cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.0.0-beta.2 h1:/BZRNzm8N4K4eWfK28dL4yescorxtO7YG1yun8fy+pI= filippo.io/edwards25519 v1.0.0-beta.2/go.mod h1:X+pm78QAUPtFLi1z9PYIlS/bdDnvbCOGKtZ+ACWEf7o= +github.com/Antonboom/errname v0.1.6/go.mod h1:7lz79JAnuoMNDAWE9MeeIr1/c/VpSUWatBv2FH9NYpI= +github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw= @@ -77,6 +87,7 @@ github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= @@ -88,17 +99,26 @@ github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3 github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= +github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= +github.com/GaijinEntertainment/go-exhaustruct/v2 v2.1.0/go.mod h1:LGOGuvEgCfCQsy3JF2tRmpGDpzA53iZfyGEWSPwQ6/4= github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.5.1 h1:aPJp2QD7OOrhO5tQXqQoGSJc+DjDtWTGLOmNyAm6FgY= github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= +github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/OpenPeeDeeP/depguard v1.1.0/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= @@ -110,8 +130,9 @@ github.com/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSa github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1:eSYp2T6f0apnuW8TzhV3f6Aff2SE8Dwio++U4ha4yEM= github.com/adlio/schema v1.1.13/go.mod h1:L5Z7tw+7lRK1Fnpi/LT/ooCP1elkXn0krMWBQHUhEDE= -github.com/adlio/schema v1.3.0 h1:eSVYLxYWbm/6ReZBCkLw4Fz7uqC+ZNoPvA39bOwi52A= github.com/adlio/schema v1.3.0/go.mod h1:51QzxkpeFs6lRY11kPye26IaFPOV+HqEj01t5aXXKfs= +github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= +github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= @@ -120,8 +141,13 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= +github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= +github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= @@ -134,15 +160,21 @@ github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= +github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -152,13 +184,21 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= +github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= +github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= +github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= +github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= -github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo= github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA= +github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= +github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= @@ -173,11 +213,14 @@ github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/bufbuild/buf v1.4.0/go.mod h1:mwHG7klTHnX+rM/ym8LXGl7vYpVmnwT96xWoRB4H5QI= +github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= @@ -186,11 +229,15 @@ github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghf github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= +github.com/chavacava/garif v0.0.0-20220316182200-5cad0b5181d4/go.mod h1:W8EnPSQ8Nv4fUjc/v1/8tHFqhuOJXnRub0dTfuAQktU= github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= +github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= +github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= 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/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= @@ -209,10 +256,12 @@ github.com/confio/ics23/go v0.6.6/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4ur github.com/confio/ics23/go v0.7.0 h1:00d2kukk7sPoHWL4zZBZwzxnpA2pec1NPdwbSokJ5w8= github.com/confio/ics23/go v0.7.0/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= +github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= github.com/containerd/continuity v0.0.0-20190827140505-75bee3e2ccb6/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= -github.com/containerd/continuity v0.2.1 h1:/EeEo2EtN3umhbbgCveyjifoMYg0pS+nMMEemaYw634= github.com/containerd/continuity v0.2.1/go.mod h1:wCYX+dRqZdImhGucXOqTQn05AhX6EUDaGEMUzTFFpLg= +github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -221,23 +270,29 @@ github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190620071333-e64a0ec8b42a/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/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/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.4 h1:n7C2ngKXo7UC9gNyMNLbzqz7Asuf+7Qv4gnX/rOdQ44= github.com/cosmos/btcutil v1.0.4/go.mod h1:Ffqc8Hn6TJUdDgHBwIZLtrLQC1KdJ9jGJl/TvgUaxbU= github.com/cosmos/cosmos-sdk v0.45.1/go.mod h1:XXS/asyCqWNWkx2rW6pSuen+EVcpAFxq6khrhnZgHaQ= -github.com/cosmos/cosmos-sdk v0.45.5 h1:GVrZM+lss6y626Pq6loxh/3KLRgK/J6/alTkcKkYmGU= github.com/cosmos/cosmos-sdk v0.45.5/go.mod h1:WOqtDxN3eCCmnYLVla10xG7lEXkFjpTaqm2a2WasgCc= +github.com/cosmos/cosmos-sdk v0.45.7 h1:5H9Ov04WIGoQAMJDdcSD4Vp5Lz6I17voHySH+vjJFCc= +github.com/cosmos/cosmos-sdk v0.45.7/go.mod h1:l8DURPoMMkIEe/Gw59g9KIMDjlYyTsKOWdc3iSSBXvw= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= -github.com/cosmos/iavl v0.17.3 h1:s2N819a2olOmiauVa0WAhoIJq9EhSXE9HDBAoR9k+8Y= github.com/cosmos/iavl v0.17.3/go.mod h1:prJoErZFABYZGDHka1R6Oay4z9PrNeFFiMKHDAMOi4w= -github.com/cosmos/ibc-go/v3 v3.0.0 h1:XUNplHVS51Q2gMnTFsFsH9QJ7flsovMamnltKbEgPQ4= +github.com/cosmos/iavl v0.19.0/go.mod h1:l5h9pAB3m5fihB3pXVgwYqdY8aBsMagqz7T0MUjxZeA= +github.com/cosmos/iavl v0.19.1 h1:3gaq9b6SjiB0KBTygRnAvEGml2pQlu1TH8uma5g63Ys= +github.com/cosmos/iavl v0.19.1/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= github.com/cosmos/ibc-go/v3 v3.0.0/go.mod h1:Mb+1NXiPOLd+CPFlOC6BKeAUaxXlhuWenMmRiUiSmwY= +github.com/cosmos/ibc-go/v3 v3.1.1 h1:Yodps4ezxbKS8u0TNJkdYsf+MCb0XzUuIuxIkSUMwbA= +github.com/cosmos/ibc-go/v3 v3.1.1/go.mod h1:IR1bpjywC1i0YcElPa4d2IevNUBZehKoD5bscQlbDyM= github.com/cosmos/interchain-accounts v0.1.0 h1:QmuwNsf1Hxl3P5GSGt7Z+JeuHPiZw4Z34R/038P5T6s= github.com/cosmos/interchain-accounts v0.1.0/go.mod h1:Fv6LXDs+0ng4mIDVWwEJMXbAIMxY4kiq+A7Bw1Fb9AY= github.com/cosmos/keyring v1.1.7-0.20210622111912-ef00f8ac3d76 h1:DdzS1m6o/pCqeZ8VOAit/gyATedRgjvkVI+UCrLpyuU= @@ -250,17 +305,23 @@ github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwc github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= +github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/daixiang0/gci v0.3.3/go.mod h1:1Xr2bxnQbDxCqqulUOv8qpGqkgRw9RSCGGjEC2LjF8o= github.com/danieljoos/wincred v1.0.2 h1:zf4bhty2iLuwgjgpraD2E9UbvO+fe54XXGJbOwe23fU= github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= +github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= +github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= github.com/denisenkom/go-mssqldb v0.12.0/go.mod h1:iiK0YP1ZeepvmBQk/QpLEhhTNJgfzrpArPY/aFvc9yU= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= @@ -276,7 +337,11 @@ github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUn github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= +github.com/docker/cli v20.10.14+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.17+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= @@ -295,9 +360,12 @@ github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= +github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= +github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= github.com/ethereum/go-ethereum v1.9.25/go.mod h1:vMkFiYLHI4tgPw4k2j4MHKoovchFE8plZ0M9VMk4/oM= +github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= @@ -312,8 +380,10 @@ github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/firefart/nonamedreturns v1.0.1/go.mod h1:D3dpIBojGGNh5UfElmwPu73SwDCm+VKhHYqwlNOk2uQ= github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= @@ -322,18 +392,23 @@ github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVB github.com/franela/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= +github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= +github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= +github.com/fzipp/gocyclo v0.5.1/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/ghodss/yaml v1.0.0/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.7.0 h1:jGB9xAJQ12AIGNB4HguylppmDK1Am9ppF7XnGXXJuoU= github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= +github.com/go-critic/go-critic v0.6.3/go.mod h1:c6b3ZP1MQ7o6lPR7Rv3lEf7pYQUmAcx8ABHgdZCQt/k= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -343,14 +418,16 @@ github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgO 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 h1:7i2K3eKTos3Vc0enKCfnVcgHh2olr/MyfboYq7cAcFw= 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-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= @@ -358,12 +435,25 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87 github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= +github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= +github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.1/go.mod h1:4oGA3EZXTVItV/ipGiOx7NWkY5veFfcsOJVS2YxltLw= +github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= +github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= +github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5/go.mod h1:3NAwwmD4uY/yggRxoEjk/S00MIV3A+H7rrE3i87eYxM= +github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= @@ -373,6 +463,9 @@ github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/E github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= @@ -395,6 +488,7 @@ github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71 github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -419,9 +513,21 @@ github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= +github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= +github.com/golangci/golangci-lint v1.46.2/go.mod h1:3DkdHnxn9eoTTrpT2gB0TEv8KSziuoqe9FitgQLHvAY= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= +github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -434,8 +540,9 @@ 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 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -453,28 +560,38 @@ github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= +github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw= +github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= +github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= +github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= @@ -489,8 +606,21 @@ github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= +github.com/gostaticanalysis/analysisutil v0.4.1/go.mod h1:18U/DLpRgIUd459wGxVHE0fRgmo1UgHDcbw7F5idXu0= +github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= +github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= +github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= +github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= +github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= +github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= +github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= +github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= +github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= @@ -500,6 +630,7 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= @@ -531,6 +662,7 @@ github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjh github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= @@ -540,6 +672,8 @@ github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.4.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -560,8 +694,11 @@ github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpT github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87 h1:uUjLpLt6bVvZ72SQc/B4dXcPBw4Vgd7soowdRl52qEM= github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87/go.mod h1:XGsKKeXxeRr95aEOgipvluMPlgjr7dGlk9ZTWOjcUcg= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= +github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= @@ -569,6 +706,10 @@ github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3 github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/improbable-eng/grpc-web v0.14.1 h1:NrN4PY71A6tAz2sKDvC5JCauENWp0ykG8Oq1H3cpFvw= github.com/improbable-eng/grpc-web v0.14.1/go.mod h1:zEjGHa8DAlkoOXmswrNvhUGEYQA9UI7DhrGeHR1DMGU= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= @@ -577,17 +718,31 @@ github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZ github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jhump/protoreflect v1.9.0 h1:npqHz788dryJiR/l6K/RUQAyh2SwV91+d1dnh4RjO9w= +github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= +github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= +github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= +github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= +github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f/go.mod h1:qr2b5kx4HbFS7/g4uYO5qv9ei8303JMsC7ESbYiqr2Q= +github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= github.com/jhump/protoreflect v1.9.0/go.mod h1:7GcYQDdMU/O/BBrl/cX6PNHpXh6cenjd8pneu5yW7Tg= +github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= +github.com/jhump/protoreflect v1.12.1-0.20220417024638-438db461d753 h1:uFlcJKZPLQd7rmOY/RrvBuUaYmAFnlFHKLivhO6cOy8= +github.com/jhump/protoreflect v1.12.1-0.20220417024638-438db461d753/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= +github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= +github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= +github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= +github.com/josharian/txtarfs v0.0.0-20210218200122-0702f000015a/go.mod h1:izVPOvVRsHiKkeGCT6tYBNWyDVuzj9wAaBb5R9qamfw= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -601,22 +756,30 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d h1:Z+RDyXzjKE0i2sTjZ/b1uxiGtPhFy34Ou/Tk0qwN0kM= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/errcheck v1.6.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= +github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.1 h1:y9FcTHGyrebwfP0ZZqFiaxTaiDnUrGkJkI+f583BL1A= +github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -629,30 +792,49 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kulti/thelper v0.6.2/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= +github.com/kunwardeep/paralleltest v1.0.3/go.mod h1:vLydzomDFpk7yu5UX02RmP0H8QfRPOV/oFhWN85Mjb4= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= +github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= +github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= +github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= +github.com/lib/pq v0.0.0-20180327071824-d34b9ff171c2/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk= github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= +github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs= +github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= +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/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= +github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= +github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= +github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= @@ -668,13 +850,22 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= +github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= +github.com/mgechev/revive v1.2.1/go.mod h1:+Ro3wqY4vakcYNtkBWdZC7dBg1xSB6sp054wWwmeFm0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= +github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 h1:hLDRPB66XQT/8+wG9WsDpiCvZf1yKO7sz7scAjSlBa0= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= @@ -682,8 +873,10 @@ github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= @@ -692,9 +885,15 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs= github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= +github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= +github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= +github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -703,13 +902,20 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= +github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= +github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= +github.com/mwitkow/go-proto-validators v0.2.0/go.mod h1:ZfA1hW+UH/2ZHOWvQ3HnQaU0DtnpXu850MZiy+YUgcc= github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= +github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= @@ -725,32 +931,44 @@ github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxzi github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= github.com/neilotoole/errgroup v0.1.5/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nishanths/exhaustive v0.7.11/go.mod h1:gX+MP7DWMKJmNa1HfMozK+u04hQd3na9i0hyqf3/dOI= +github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= github.com/nishanths/predeclared v0.0.0-20200524104333-86fad755b4d3/go.mod h1:nt3d53pc1VYcphSCIaYAJtnPYnr3Zyn8fMq2wvPGPso= +github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/oklog/ulid/v2 v2.0.2/go.mod h1:mtBL0Qe/0HAx6/a4Z30qxVIAL1eQDweXq5lxOEiwQ68= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak= github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= +github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= @@ -760,10 +978,13 @@ github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrB github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= -github.com/opencontainers/runc v1.0.3 h1:1hbqejyQWCJBvtKAfdO0b1FmaEf2z/bxnjqbARass5k= github.com/opencontainers/runc v1.0.3/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= +github.com/opencontainers/runc v1.1.2/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= +github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= +github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= +github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -776,44 +997,60 @@ github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnh github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= +github.com/ory/dockertest/v3 v3.9.1/go.mod h1:42Ir9hmvaAPm0Mgibk6mBPi7SFvTXxEcnztDYOJ//uM= +github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= github.com/otiai10/copy v1.6.0 h1:IinKAryFFuPONZ7cm6T6E2QX/vcJwSnlaA5lfoaXIiQ= github.com/otiai10/copy v1.6.0/go.mod h1:XWfuS3CrI0R6IE0FbgHsEazaXO8G0LpMp9o8tos0x4E= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= +github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/otiai10/mint v1.3.2/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.0-beta.8 h1:dy81yyLYJDwMTifq24Oi/IslOslRrDSb3jwDggjz3Z0= +github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= +github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml/v2 v2.0.0-beta.8/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pelletier/go-toml/v2 v2.0.0/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pelletier/go-toml/v2 v2.0.2 h1:+jQXlF3scKIcSEKkdHzXhCTDLPFi5r1wnK6yPS+49Gw= +github.com/pelletier/go-toml/v2 v2.0.2/go.mod h1:MovirKjgVRESsAvNZlAjtFwV867yGuwRkXbG66OzopI= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= +github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/polyfloyd/go-errorlint v1.0.0/go.mod h1:KZy4xxPJyy88/gldCe5OdW6OQRtNO3EZE7hXzmnebgA= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= @@ -823,6 +1060,7 @@ github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3O github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.8.0/go.mod h1:O9VU6huf47PktckDQfMTX0Y8tY0/7TSWwj+ITvv0TnM= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34= github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= @@ -845,8 +1083,9 @@ github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16 github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.34.0 h1:RBmGO9d/FVjqHT0yUGQwBJhkwKV+wPCn7KGpvfab0uE= +github.com/prometheus/common v0.34.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= @@ -860,6 +1099,18 @@ github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0 github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= +github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= +github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= +github.com/quasilyte/go-ruleguard v0.3.16-0.20220213074421-6aa060fab41a/go.mod h1:VMX+OnnSw4LicdiEGtRSD/1X8kW7GuEscjYNr4cOIT4= +github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.16/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.19/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= +github.com/quasilyte/gogrep v0.0.0-20220120141003-628d8b3623b5/go.mod h1:wSEyW6O61xRV6zb6My3HxrQ5/8ke7NE2OayqCHa3xRM= +github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= +github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -869,12 +1120,16 @@ github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzy github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= +github.com/remyoudompheng/go-dbus v0.0.0-20121104212943-b7232d34b1d5/go.mod h1:+u151txRmLpwxBmpYn9z3d1sdJdjRPQpsXuYeY9jNls= +github.com/remyoudompheng/go-liblzma v0.0.0-20190506200333-81bf2d431b96/go.mod h1:90HvCY7+oHHUKkbeMCiHt1WuFR2/hPJ9QrljDG+v6ls= +github.com/remyoudompheng/go-misc v0.0.0-20190427085024-2d6ac652a50e/go.mod h1:80FQABjoFzZ2M5uEa6FUaJYEmqU2UOKojlFVak1UAwI= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= @@ -883,22 +1138,34 @@ github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubr github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.23.0/go.mod h1:6c7hFfxPOy7TacJc4Fcdi24/J0NKYGzjG8FWRI916Qo= -github.com/rs/zerolog v1.26.0 h1:ORM4ibhEZeTeQlCojCK2kPz1ogAY4bGs4tD+SaAdGaE= -github.com/rs/zerolog v1.26.0/go.mod h1:yBiM87lvSqX8h0Ww4sdzNSkVYZ8dL2xjZJG1lAuGZEo= +github.com/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs= +github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryancurrah/gomodguard v1.2.3/go.mod h1:rYbA/4Tg5c54mV1sv4sQTP5WOPBcoLtnBZ7/TEhXAbg= +github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= github.com/sagikazarmark/crypt v0.4.0/go.mod h1:ALv2SRj7GxYV4HO9elxH9nS6M9gW+xDNxqmyJ6RfDFM= github.com/sagikazarmark/crypt v0.5.0/go.mod h1:l+nzl7KWh51rpzp2h7t4MZWyiEWdhNpOAnclKvg+mdA= +github.com/sagikazarmark/crypt v0.6.0/go.mod h1:U8+INwJo3nBv1m6A/8OBXAq7Jnpspk5AxSgDyEQcea8= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa h1:0U2s5loxrTy6/VgfVoLuVLFJcURKLH49ie0zSch7gh4= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= +github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= +github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= +github.com/securego/gosec/v2 v2.11.0/go.mod h1:SX8bptShuG8reGC0XS09+a4H2BoWSJi+fscA+Pulbpo= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil/v3 v3.22.4/go.mod h1:D01hZJ4pVHPpCTZ3m3T2+wDF2YAGfd+H4ifUguaQzHM= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= @@ -907,12 +1174,16 @@ github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrf github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= +github.com/sivchari/tenv v1.5.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa h1:YJfZp12Z3AFhSBeXOlv4BO55RMwPn2NoQeDsrdWnBtY= github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -932,8 +1203,9 @@ github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHN github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= -github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q= github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= +github.com/spf13/cobra v1.5.0 h1:X+jTBEBqF0bHN+9cSMgmfuvv2VHJ9ezmFNf9Y/XstYU= +github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= @@ -948,9 +1220,12 @@ github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5q github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= github.com/spf13/viper v1.10.1/go.mod h1:IGlFPqhNAPKRxohIzWpI5QEy4kuI7tcl5WvR+8qy1rU= -github.com/spf13/viper v1.11.0 h1:7OX/1FS6n7jHD1zGrZTM7WtY13ZELRyosK4k93oPr44= github.com/spf13/viper v1.11.0/go.mod h1:djo0X/bA5+tYVoCn+C7cAYJGcVn/qYLFTG8gdUsX7Zk= +github.com/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ= +github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= +github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= +github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= @@ -963,6 +1238,8 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -970,13 +1247,18 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= +github.com/subosito/gotenv v1.4.0 h1:yAzM1+SmVcz5R4tXGsNMu1jUl2aOJXoiWUCEwwnGrvs= +github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo= +github.com/sylvia7788/contextcheck v1.0.4/go.mod h1:vuPKJMQ7MQ91ZTqfdyreNKwZjyUg6KO+IebVyQDedZQ= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca h1:Ld/zXl5t4+D69SiV4JoN7kkfvJdOWlPpfxrzxpLMoUk= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= +github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s= github.com/tendermint/btcd v0.1.1/go.mod h1:DC6/m53jtQzr/NFmMNEu0rxf18/ktVoVtMrnDD5pN+U= @@ -985,19 +1267,30 @@ github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= github.com/tendermint/tendermint v0.34.14/go.mod h1:FrwVm3TvsVicI9Z7FlucHV6Znfd5KBc/Lpp69cCwtk0= -github.com/tendermint/tendermint v0.34.19 h1:y0P1qI5wSa9IRuhKnTDA6IUcOrLi1hXJuALR+R7HFEk= github.com/tendermint/tendermint v0.34.19/go.mod h1:R5+wgIwSxMdKQcmOaeudL0Cjkr3HDkhpcdum6VeU3R4= +github.com/tendermint/tendermint v0.34.20 h1:/pmvJhO3IqOxhbi8iRXudTjA2YKpaMqrLwFNkyxDSzw= +github.com/tendermint/tendermint v0.34.20/go.mod h1:KtOwCLYJcsS1ymtAfnjjAtXfXClbqcqjdqzFt2Em1Ac= github.com/tendermint/tm-db v0.6.4/go.mod h1:dptYhIpJ2M5kUuenLr+Yyf3zQOv1SgBZcl8/BmWlMBw= github.com/tendermint/tm-db v0.6.6/go.mod h1:wP8d49A85B7/erz/r4YbKssKw6ylsO/hKtFk7E1aWZI= github.com/tendermint/tm-db v0.6.7 h1:fE00Cbl0jayAoqlExN6oyQJ7fR/ZtoVOmvPJ//+shu8= github.com/tendermint/tm-db v0.6.7/go.mod h1:byQDzFkZV1syXr/ReXS808NxA2xvyuuVgXOJ/088L6I= +github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= +github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= +github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= github.com/tidwall/gjson v1.6.7/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI= github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/sjson v1.1.4/go.mod h1:wXpKXu8CtDjKAZ+3DrKY5ROCorDFahq8l0tey/Lx1fg= +github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= +github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= +github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tomarrell/wrapcheck/v2 v2.6.1/go.mod h1:Eo+Opt6pyMW1b6cNllOcDSSoHO0aTJ+iF6BfCUbHltA= +github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= +github.com/tommy-muehle/go-mnd/v2 v2.5.0/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= @@ -1009,40 +1302,69 @@ github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVM github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/uudashr/gocognit v1.0.5/go.mod h1:wgYz0mitoKOTysqxTDMOUXg+Jb5SvtihkfmugIZYpEA= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus= +github.com/valyala/quicktemplate v1.7.0/go.mod h1:sqKJnoaOF88V07vkO+9FL8fb9uZg/VPSJnLYn+LmLk8= +github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +github.com/vektra/mockery/v2 v2.14.0/go.mod h1:bnD1T8tExSgPD1ripLkDbr60JA9VtQeu12P3wgLZd7M= +github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/vmihailenco/msgpack/v5 v5.1.4/go.mod h1:C5gboKD0TJPqWDTVTtrQNfRbiBwHZGo8UTqP/9/XvLI= github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE= +github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= +github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= +github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= +github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/zondax/hid v0.9.0 h1:eiT3P6vNxAEVxXMw66eZUAAnU2zD33JBkfG/EnfAKl8= github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +gitlab.com/bosi/decorder v0.2.1/go.mod h1:6C/nhLSbF6qZbYD8bRmISBwc6vcWdNsiIBkRvjJFrH0= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/api/v3 v3.5.2/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= +go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/pkg/v3 v3.5.2/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= go.etcd.io/etcd/client/v2 v2.305.2/go.mod h1:2D7ZejHVMIfog1221iLSYlQRzrtECw3kz4I4VAQm3qI= +go.etcd.io/etcd/client/v2 v2.305.4/go.mod h1:Ud+VUwIi9/uQHOMA+4ekToJ12lTxlv0zB/+DHwTGEbU= go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= +go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= +go.mozilla.org/mozlog v0.0.0-20170222151521-4bb13139d403/go.mod h1:jHoPAGnDrCy6kaI2tAze5Prf0Nr0w/oNkROt2lw3n3o= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -1059,16 +1381,21 @@ go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1090,14 +1417,19 @@ golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA= +golang.org/x/crypto v0.0.0-20220313003712-b769efc7c000/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1113,6 +1445,7 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= +golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -1141,6 +1474,9 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1164,6 +1500,7 @@ golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1194,6 +1531,7 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -1201,13 +1539,17 @@ golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211208012354-db4efeb81f4b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220412020605-290c469a71a5 h1:bRb386wvrE+oBNdF1d/Xh9mQrfQ4ecYhW5qJ5GvTGT4= golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9 h1:Yqz/iviulwKwAREEeUd3nbBFn0XuyJqkoft2IlrvOhc= +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 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= @@ -1233,6 +1575,7 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1240,6 +1583,7 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1264,6 +1608,7 @@ golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1298,6 +1643,7 @@ golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1305,6 +1651,7 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1325,6 +1672,7 @@ golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1332,26 +1680,43 @@ golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211213223007-03aa0b5f6827/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad h1:ntjMns5wyP/fN65tdBD4g8J5w8n015+iIIs9rtjXkY0= +golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220405210540-1e041c57c461/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c h1:aFV+BgZ4svzjfabn8ERpuB4JI4N6/rdy1iusx77G3oU= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220411215600-e5f449aeb171/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 h1:CBpWXWQpIRjzmkkA+M7q9Fqnwd2mZr3AFqexg8YTfoM= +golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1372,33 +1737,45 @@ golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190228203856-589c23e65e65/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1408,39 +1785,67 @@ golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200522201501-cb1345f3a375/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= +golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= +golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.9-0.20211228192929-ee1ca4ffc4da/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= +golang.org/x/tools v0.1.11-0.20220316014157-77aa08bb151a/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= +golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= 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 h1:GGU+dLjvlC3qDwqYgL6UgRmHXhOOgns0bZu2Ty5mm6U= golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= @@ -1450,6 +1855,7 @@ google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEt google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -1484,15 +1890,21 @@ google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQ google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.81.0/go.mod h1:FA6Mb/bZxj706H2j+j2d6mHEEaHBmbbWnkfvmorOCko= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181107211654-5fc9ac540362/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1501,6 +1913,7 @@ google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dT google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= @@ -1522,6 +1935,8 @@ google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1572,8 +1987,14 @@ google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2 google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac h1:qSNTkEN+L2mvWcLgJOR+8bdHX9rN/IdU3A1Ghpfb1Rg= google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd h1:e0TwkXOdbnH/1x5rc5MZ/VYyiZ4v+RdVfrGMqEwT68I= +google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= @@ -1590,6 +2011,7 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.25.1-0.20200805231151-a709e31e5d12/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= @@ -1601,14 +2023,16 @@ gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4= gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI= +gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= @@ -1622,15 +2046,19 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.6/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= +gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1638,6 +2066,11 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.3.1/go.mod h1:vlRD9XErLMGT+mDuofSr0mMMquscM/1nQqtRSsh6m70= +mvdan.cc/gofumpt v0.3.1/go.mod h1:w3ymliuxvzVx8DAutBnVyDqYb1Niy/yCJt/lk821YCE= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20211214103731-d0ef000c54e5/go.mod h1:b8RRCBm0eeiWR8cfN88xeq2G5SG3VKGO+5UPWi5FSOY= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/x/wasm/simulation/sim_utils.go b/x/wasm/simulation/sim_utils.go index 4f9a00b0bf..b29c18cf28 100644 --- a/x/wasm/simulation/sim_utils.go +++ b/x/wasm/simulation/sim_utils.go @@ -31,6 +31,7 @@ func GenAndDeliverTxWithRandFees(txCtx simulation.OperationInput, gas uint64) (s func GenAndDeliverTx(txCtx simulation.OperationInput, fees sdk.Coins, gas uint64) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { account := txCtx.AccountKeeper.GetAccount(txCtx.Context, txCtx.SimAccount.Address) tx, err := helpers.GenTx( + txCtx.R, txCtx.TxGen, []sdk.Msg{txCtx.Msg}, fees, From 1eea90f91adf66570ebc7795cb31e4a8ef68ada3 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Wed, 10 Aug 2022 10:39:03 +0700 Subject: [PATCH 019/120] upgrade ci --- .circleci/config.yml | 3 +-- go.mod | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index b658e762e0..dfd118d667 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,8 +3,7 @@ version: 2.1 executors: golang: docker: - - image: circleci/golang:1.17 - working_directory: /go/src/github.com/cosmwasm/wasmd + - image: cimg/go:1.19 commands: make: diff --git a/go.mod b/go.mod index 8d08f9830f..d08b67a291 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/CosmWasm/wasmd -go 1.17 +go 1.18 require ( github.com/CosmWasm/wasmvm v1.0.0 From 8fa0d2adb345290da3769c7dc99bdfaaf249181d Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Wed, 10 Aug 2022 10:42:40 +0700 Subject: [PATCH 020/120] go get -> go install --- Makefile | 2 +- contrib/devtools/Makefile | 6 +-- go.sum | 102 -------------------------------------- 3 files changed, 4 insertions(+), 106 deletions(-) diff --git a/Makefile b/Makefile index 4a007fd788..766412efd7 100644 --- a/Makefile +++ b/Makefile @@ -108,7 +108,7 @@ go.sum: go.mod draw-deps: @# requires brew install graphviz or apt-get install graphviz - go get github.com/RobotsAndPencils/goviz + go install github.com/RobotsAndPencils/goviz@latest @goviz -i ./cmd/wasmd -d 2 | dot -Tpng -o dependency-graph.png clean: diff --git a/contrib/devtools/Makefile b/contrib/devtools/Makefile index ac05cc6779..e20fbbacd8 100644 --- a/contrib/devtools/Makefile +++ b/contrib/devtools/Makefile @@ -61,7 +61,7 @@ tools-stamp: statik runsim golangci-lint statik: $(STATIK) $(STATIK): @echo "Installing statik..." - @(cd /tmp && go get github.com/rakyll/statik@v0.1.6) + @(cd /tmp && go install github.com/rakyll/statik@v0.1.6) # Install the runsim binary with a temporary workaround of entering an outside # directory as the "go get" command ignores the -mod option and will polute the @@ -71,12 +71,12 @@ $(STATIK): runsim: $(RUNSIM) $(RUNSIM): @echo "Installing runsim..." - @(cd /tmp && go get github.com/cosmos/tools/cmd/runsim@v1.0.0) + @(cd /tmp && go install github.com/cosmos/tools/cmd/runsim@v1.0.0) golangci-lint: $(GOLANGCI_LINT) $(GOLANGCI_LINT): @echo "Installing golangci-lint..." - @(cd /tmp && go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.28.0) + @(cd /tmp && go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.48.0) tools-clean: rm -f $(STATIK) $(GOLANGCI_LINT) $(RUNSIM) diff --git a/go.sum b/go.sum index 2faefe03f6..2ad95a7d5c 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,4 @@ 4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= -bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= -bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -47,7 +45,6 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= @@ -109,9 +106,6 @@ github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF0 github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= 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/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= @@ -125,12 +119,9 @@ github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrU github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/Workiva/go-datastructures v1.0.52/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA= github.com/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1:eSYp2T6f0apnuW8TzhV3f6Aff2SE8Dwio++U4ha4yEM= -github.com/adlio/schema v1.1.13/go.mod h1:L5Z7tw+7lRK1Fnpi/LT/ooCP1elkXn0krMWBQHUhEDE= -github.com/adlio/schema v1.3.0/go.mod h1:51QzxkpeFs6lRY11kPye26IaFPOV+HqEj01t5aXXKfs= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= @@ -181,9 +172,6 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= @@ -194,7 +182,6 @@ github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BR github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= -github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA= github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= @@ -231,12 +218,10 @@ github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cb github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= github.com/chavacava/garif v0.0.0-20220316182200-5cad0b5181d4/go.mod h1:W8EnPSQ8Nv4fUjc/v1/8tHFqhuOJXnRub0dTfuAQktU= -github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= 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= @@ -252,24 +237,16 @@ github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:z github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go v0.7.0 h1:lmTO/JEpCvZgpbkOITL95rA80CPKb5CtMzLaqF2mCNg= github.com/coinbase/rosetta-sdk-go v0.7.0/go.mod h1:7nD3oBPIiHqhRprqvMgPoGxe/nyq3yftRmpsy29coWE= -github.com/confio/ics23/go v0.6.6/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= github.com/confio/ics23/go v0.7.0 h1:00d2kukk7sPoHWL4zZBZwzxnpA2pec1NPdwbSokJ5w8= github.com/confio/ics23/go v0.7.0/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= -github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= -github.com/containerd/continuity v0.0.0-20190827140505-75bee3e2ccb6/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= -github.com/containerd/continuity v0.2.1/go.mod h1:wCYX+dRqZdImhGucXOqTQn05AhX6EUDaGEMUzTFFpLg= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190620071333-e64a0ec8b42a/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -277,8 +254,6 @@ github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfc github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.4 h1:n7C2ngKXo7UC9gNyMNLbzqz7Asuf+7Qv4gnX/rOdQ44= github.com/cosmos/btcutil v1.0.4/go.mod h1:Ffqc8Hn6TJUdDgHBwIZLtrLQC1KdJ9jGJl/TvgUaxbU= -github.com/cosmos/cosmos-sdk v0.45.1/go.mod h1:XXS/asyCqWNWkx2rW6pSuen+EVcpAFxq6khrhnZgHaQ= -github.com/cosmos/cosmos-sdk v0.45.5/go.mod h1:WOqtDxN3eCCmnYLVla10xG7lEXkFjpTaqm2a2WasgCc= github.com/cosmos/cosmos-sdk v0.45.7 h1:5H9Ov04WIGoQAMJDdcSD4Vp5Lz6I17voHySH+vjJFCc= github.com/cosmos/cosmos-sdk v0.45.7/go.mod h1:l8DURPoMMkIEe/Gw59g9KIMDjlYyTsKOWdc3iSSBXvw= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= @@ -286,11 +261,8 @@ github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= -github.com/cosmos/iavl v0.17.3/go.mod h1:prJoErZFABYZGDHka1R6Oay4z9PrNeFFiMKHDAMOi4w= -github.com/cosmos/iavl v0.19.0/go.mod h1:l5h9pAB3m5fihB3pXVgwYqdY8aBsMagqz7T0MUjxZeA= github.com/cosmos/iavl v0.19.1 h1:3gaq9b6SjiB0KBTygRnAvEGml2pQlu1TH8uma5g63Ys= github.com/cosmos/iavl v0.19.1/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= -github.com/cosmos/ibc-go/v3 v3.0.0/go.mod h1:Mb+1NXiPOLd+CPFlOC6BKeAUaxXlhuWenMmRiUiSmwY= github.com/cosmos/ibc-go/v3 v3.1.1 h1:Yodps4ezxbKS8u0TNJkdYsf+MCb0XzUuIuxIkSUMwbA= github.com/cosmos/ibc-go/v3 v3.1.1/go.mod h1:IR1bpjywC1i0YcElPa4d2IevNUBZehKoD5bscQlbDyM= github.com/cosmos/interchain-accounts v0.1.0 h1:QmuwNsf1Hxl3P5GSGt7Z+JeuHPiZw4Z34R/038P5T6s= @@ -309,7 +281,6 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/daixiang0/gci v0.3.3/go.mod h1:1Xr2bxnQbDxCqqulUOv8qpGqkgRw9RSCGGjEC2LjF8o= github.com/danieljoos/wincred v1.0.2 h1:zf4bhty2iLuwgjgpraD2E9UbvO+fe54XXGJbOwe23fU= @@ -368,12 +339,10 @@ github.com/ethereum/go-ethereum v1.9.25/go.mod h1:vMkFiYLHI4tgPw4k2j4MHKoovchFE8 github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= @@ -474,7 +443,6 @@ github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188/go.mod h1:vXjM/+ github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/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= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -600,10 +568,8 @@ github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= @@ -621,14 +587,12 @@ github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Rep github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= @@ -640,12 +604,10 @@ github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -728,7 +690,6 @@ github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+ github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f/go.mod h1:qr2b5kx4HbFS7/g4uYO5qv9ei8303JMsC7ESbYiqr2Q= github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= -github.com/jhump/protoreflect v1.9.0/go.mod h1:7GcYQDdMU/O/BBrl/cX6PNHpXh6cenjd8pneu5yW7Tg= github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= github.com/jhump/protoreflect v1.12.1-0.20220417024638-438db461d753 h1:uFlcJKZPLQd7rmOY/RrvBuUaYmAFnlFHKLivhO6cOy8= github.com/jhump/protoreflect v1.12.1-0.20220417024638-438db461d753/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= @@ -804,14 +765,11 @@ github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7s github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= github.com/lib/pq v0.0.0-20180327071824-d34b9ff171c2/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs= github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= 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/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= @@ -821,7 +779,6 @@ github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xq github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= @@ -890,7 +847,6 @@ github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyua github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= @@ -937,7 +893,6 @@ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWb github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nishanths/exhaustive v0.7.11/go.mod h1:gX+MP7DWMKJmNa1HfMozK+u04hQd3na9i0hyqf3/dOI= github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= -github.com/nishanths/predeclared v0.0.0-20200524104333-86fad755b4d3/go.mod h1:nt3d53pc1VYcphSCIaYAJtnPYnr3Zyn8fMq2wvPGPso= github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= @@ -970,20 +925,14 @@ github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAl github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= -github.com/opencontainers/runc v1.0.3/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= github.com/opencontainers/runc v1.1.2/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= 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= @@ -1000,12 +949,10 @@ github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnh github.com/ory/dockertest/v3 v3.9.1/go.mod h1:42Ir9hmvaAPm0Mgibk6mBPi7SFvTXxEcnztDYOJ//uM= github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= github.com/otiai10/copy v1.6.0 h1:IinKAryFFuPONZ7cm6T6E2QX/vcJwSnlaA5lfoaXIiQ= -github.com/otiai10/copy v1.6.0/go.mod h1:XWfuS3CrI0R6IE0FbgHsEazaXO8G0LpMp9o8tos0x4E= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= -github.com/otiai10/mint v1.3.2/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -1014,7 +961,6 @@ github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwp github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= 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= @@ -1053,12 +999,10 @@ github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSg github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.8.0/go.mod h1:O9VU6huf47PktckDQfMTX0Y8tY0/7TSWwj+ITvv0TnM= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= @@ -1073,32 +1017,26 @@ github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2 github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.34.0 h1:RBmGO9d/FVjqHT0yUGQwBJhkwKV+wPCn7KGpvfab0uE= github.com/prometheus/common v0.34.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= @@ -1135,9 +1073,7 @@ github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= -github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.23.0/go.mod h1:6c7hFfxPOy7TacJc4Fcdi24/J0NKYGzjG8FWRI916Qo= github.com/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs= github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= @@ -1147,7 +1083,6 @@ github.com/ryancurrah/gomodguard v1.2.3/go.mod h1:rYbA/4Tg5c54mV1sv4sQTP5WOPBcoL github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= -github.com/sagikazarmark/crypt v0.4.0/go.mod h1:ALv2SRj7GxYV4HO9elxH9nS6M9gW+xDNxqmyJ6RfDFM= github.com/sagikazarmark/crypt v0.5.0/go.mod h1:l+nzl7KWh51rpzp2h7t4MZWyiEWdhNpOAnclKvg+mdA= github.com/sagikazarmark/crypt v0.6.0/go.mod h1:U8+INwJo3nBv1m6A/8OBXAq7Jnpspk5AxSgDyEQcea8= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= @@ -1155,7 +1090,6 @@ github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dms github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa h1:0U2s5loxrTy6/VgfVoLuVLFJcURKLH49ie0zSch7gh4= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= github.com/securego/gosec/v2 v2.11.0/go.mod h1:SX8bptShuG8reGC0XS09+a4H2BoWSJi+fscA+Pulbpo= @@ -1168,7 +1102,6 @@ github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxr github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= @@ -1193,15 +1126,11 @@ github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo= github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= -github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= -github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= github.com/spf13/cobra v1.5.0 h1:X+jTBEBqF0bHN+9cSMgmfuvv2VHJ9ezmFNf9Y/XstYU= @@ -1214,12 +1143,7 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= -github.com/spf13/viper v1.10.1/go.mod h1:IGlFPqhNAPKRxohIzWpI5QEy4kuI7tcl5WvR+8qy1rU= github.com/spf13/viper v1.11.0/go.mod h1:djo0X/bA5+tYVoCn+C7cAYJGcVn/qYLFTG8gdUsX7Zk= github.com/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ= github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= @@ -1266,11 +1190,8 @@ github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RM github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/tendermint/tendermint v0.34.14/go.mod h1:FrwVm3TvsVicI9Z7FlucHV6Znfd5KBc/Lpp69cCwtk0= -github.com/tendermint/tendermint v0.34.19/go.mod h1:R5+wgIwSxMdKQcmOaeudL0Cjkr3HDkhpcdum6VeU3R4= github.com/tendermint/tendermint v0.34.20 h1:/pmvJhO3IqOxhbi8iRXudTjA2YKpaMqrLwFNkyxDSzw= github.com/tendermint/tendermint v0.34.20/go.mod h1:KtOwCLYJcsS1ymtAfnjjAtXfXClbqcqjdqzFt2Em1Ac= -github.com/tendermint/tm-db v0.6.4/go.mod h1:dptYhIpJ2M5kUuenLr+Yyf3zQOv1SgBZcl8/BmWlMBw= github.com/tendermint/tm-db v0.6.6/go.mod h1:wP8d49A85B7/erz/r4YbKssKw6ylsO/hKtFk7E1aWZI= github.com/tendermint/tm-db v0.6.7 h1:fE00Cbl0jayAoqlExN6oyQJ7fR/ZtoVOmvPJ//+shu8= github.com/tendermint/tm-db v0.6.7/go.mod h1:byQDzFkZV1syXr/ReXS808NxA2xvyuuVgXOJ/088L6I= @@ -1293,10 +1214,8 @@ github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoi github.com/tommy-muehle/go-mnd/v2 v2.5.0/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/tyler-smith/go-bip39 v1.0.2/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= @@ -1342,10 +1261,8 @@ github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQ github.com/zondax/hid v0.9.0 h1:eiT3P6vNxAEVxXMw66eZUAAnU2zD33JBkfG/EnfAKl8= github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= gitlab.com/bosi/decorder v0.2.1/go.mod h1:6C/nhLSbF6qZbYD8bRmISBwc6vcWdNsiIBkRvjJFrH0= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= -go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= @@ -1416,7 +1333,6 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= @@ -1492,7 +1408,6 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1537,11 +1452,9 @@ golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211208012354-db4efeb81f4b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1561,7 +1474,6 @@ golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ 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-20210402161424-2e8d93401602/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= @@ -1618,7 +1530,6 @@ golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1648,7 +1559,6 @@ golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1666,7 +1576,6 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/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-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1679,7 +1588,6 @@ golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1712,7 +1620,6 @@ golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c h1:aFV+BgZ4svzjfabn8ERpuB4JI golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220411215600-e5f449aeb171/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 h1:CBpWXWQpIRjzmkkA+M7q9Fqnwd2mZr3AFqexg8YTfoM= @@ -1763,7 +1670,6 @@ golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1794,7 +1700,6 @@ golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200522201501-cb1345f3a375/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -1803,7 +1708,6 @@ golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= @@ -1873,7 +1777,6 @@ google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34q google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= 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.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= 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= @@ -1942,7 +1845,6 @@ google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201119123407-9b1e624d6bc4/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1979,7 +1881,6 @@ google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ6 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-20211223182754-3ac035c7e7cb/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= @@ -2008,7 +1909,6 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.25.1-0.20200805231151-a709e31e5d12/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= @@ -2027,8 +1927,6 @@ gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qS gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI= From e637cf5aa417f5df9b91c196d97de85dcb70db01 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Wed, 10 Aug 2022 10:58:49 +0700 Subject: [PATCH 021/120] change denom to new format --- contrib/prototools-docker/Dockerfile | 19 +++++++++---------- scripts/protocgen.sh | 2 +- x/wasm/types/test_fixtures.go | 2 +- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/contrib/prototools-docker/Dockerfile b/contrib/prototools-docker/Dockerfile index 7d5af0d1fb..7197093793 100644 --- a/contrib/prototools-docker/Dockerfile +++ b/contrib/prototools-docker/Dockerfile @@ -15,25 +15,24 @@ RUN go get -d \ mv /go/src/github.com/gogo/protobuf/protobuf/google/protobuf/empty.proto /usr/include/google/protobuf/ && \ mv /go/src/github.com/gogo/protobuf/protobuf/google/protobuf/descriptor.proto /usr/include/google/protobuf/ -RUN GO111MODULE=on go get \ - github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway@v${GRPC_GATEWAY_VERSION} \ - github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger@v${GRPC_GATEWAY_VERSION} && \ - mv /go/bin/protoc-gen-grpc-gateway /usr/local/bin/ && \ - mv /go/bin/protoc-gen-swagger /usr/local/bin/ +RUN go install github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway@v${GRPC_GATEWAY_VERSION} \ + go install github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger@v${GRPC_GATEWAY_VERSION} && \ + mv /go/bin/protoc-gen-grpc-gateway /usr/local/bin/ && \ + mv /go/bin/protoc-gen-swagger /usr/local/bin/ # Install regen fork of gogo proto # To install a fix version this can only be done via this go.mod workaround WORKDIR /work RUN GO111MODULE=on go mod init foobar && \ - go mod edit -replace github.com/gogo/protobuf=github.com/regen-network/protobuf@v${REGEN_PROTOBUF_VERSION} && \ - go get github.com/regen-network/cosmos-proto/protoc-gen-gocosmos@v${REGEN_GOGOPROTO_VERSION} && \ - mv /go/bin/protoc-gen-gocosmos* /usr/local/bin/ + go mod edit -replace github.com/gogo/protobuf=github.com/regen-network/protobuf@v${REGEN_PROTOBUF_VERSION} && \ + go get github.com/regen-network/cosmos-proto/protoc-gen-gocosmos@v${REGEN_GOGOPROTO_VERSION} && \ + mv /go/bin/protoc-gen-gocosmos* /usr/local/bin/ -RUN GO111MODULE=on go get \ +RUN go install \ github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc@v${PROTODOC_VERSION} && \ mv /go/bin/protoc-gen-doc /usr/local/bin/ -RUN GO111MODULE=on go get \ +RUN go install \ github.com/bufbuild/buf/cmd/buf@v${BUF_VERSION} && \ mv /go/bin/buf /usr/local/bin/ diff --git a/scripts/protocgen.sh b/scripts/protocgen.sh index f9d5572f1e..b1e876716c 100755 --- a/scripts/protocgen.sh +++ b/scripts/protocgen.sh @@ -8,7 +8,7 @@ protoc_gen_gocosmos() { return 1 fi - go get github.com/regen-network/cosmos-proto/protoc-gen-gocosmos@latest 2>/dev/null + go install github.com/regen-network/cosmos-proto/protoc-gen-gocosmos@latest 2>/dev/null } protoc_gen_gocosmos diff --git a/x/wasm/types/test_fixtures.go b/x/wasm/types/test_fixtures.go index de07f175de..e173761cae 100644 --- a/x/wasm/types/test_fixtures.go +++ b/x/wasm/types/test_fixtures.go @@ -288,7 +288,7 @@ func ExecuteContractProposalFixture(mutators ...func(p *ExecuteContractProposal) RunAs: anyAddress, Msg: []byte(`{"do":"something"}`), Funds: sdk.Coins{{ - Denom: "stake", + Denom: "wasm.cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr/channel-0/stake", Amount: sdk.NewInt(1), }}, } From ac326d6a4a1e27bb3736f5e57c3070bc31801f23 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Wed, 10 Aug 2022 15:27:21 +0700 Subject: [PATCH 022/120] Update config.yml --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index dfd118d667..f0767528e5 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ version: 2.1 executors: golang: docker: - - image: cimg/go:1.19 + - image: cimg/go:1.18 commands: make: From 2ef630d9e748de6c0ab2dce26c6ad27de8ca2cf3 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Wed, 10 Aug 2022 15:28:37 +0700 Subject: [PATCH 023/120] Revert "change denom to new format" This reverts commit e637cf5aa417f5df9b91c196d97de85dcb70db01. --- contrib/prototools-docker/Dockerfile | 19 ++++++++++--------- scripts/protocgen.sh | 2 +- x/wasm/types/test_fixtures.go | 2 +- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/contrib/prototools-docker/Dockerfile b/contrib/prototools-docker/Dockerfile index 7197093793..7d5af0d1fb 100644 --- a/contrib/prototools-docker/Dockerfile +++ b/contrib/prototools-docker/Dockerfile @@ -15,24 +15,25 @@ RUN go get -d \ mv /go/src/github.com/gogo/protobuf/protobuf/google/protobuf/empty.proto /usr/include/google/protobuf/ && \ mv /go/src/github.com/gogo/protobuf/protobuf/google/protobuf/descriptor.proto /usr/include/google/protobuf/ -RUN go install github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway@v${GRPC_GATEWAY_VERSION} \ - go install github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger@v${GRPC_GATEWAY_VERSION} && \ - mv /go/bin/protoc-gen-grpc-gateway /usr/local/bin/ && \ - mv /go/bin/protoc-gen-swagger /usr/local/bin/ +RUN GO111MODULE=on go get \ + github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway@v${GRPC_GATEWAY_VERSION} \ + github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger@v${GRPC_GATEWAY_VERSION} && \ + mv /go/bin/protoc-gen-grpc-gateway /usr/local/bin/ && \ + mv /go/bin/protoc-gen-swagger /usr/local/bin/ # Install regen fork of gogo proto # To install a fix version this can only be done via this go.mod workaround WORKDIR /work RUN GO111MODULE=on go mod init foobar && \ - go mod edit -replace github.com/gogo/protobuf=github.com/regen-network/protobuf@v${REGEN_PROTOBUF_VERSION} && \ - go get github.com/regen-network/cosmos-proto/protoc-gen-gocosmos@v${REGEN_GOGOPROTO_VERSION} && \ - mv /go/bin/protoc-gen-gocosmos* /usr/local/bin/ + go mod edit -replace github.com/gogo/protobuf=github.com/regen-network/protobuf@v${REGEN_PROTOBUF_VERSION} && \ + go get github.com/regen-network/cosmos-proto/protoc-gen-gocosmos@v${REGEN_GOGOPROTO_VERSION} && \ + mv /go/bin/protoc-gen-gocosmos* /usr/local/bin/ -RUN go install \ +RUN GO111MODULE=on go get \ github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc@v${PROTODOC_VERSION} && \ mv /go/bin/protoc-gen-doc /usr/local/bin/ -RUN go install \ +RUN GO111MODULE=on go get \ github.com/bufbuild/buf/cmd/buf@v${BUF_VERSION} && \ mv /go/bin/buf /usr/local/bin/ diff --git a/scripts/protocgen.sh b/scripts/protocgen.sh index b1e876716c..f9d5572f1e 100755 --- a/scripts/protocgen.sh +++ b/scripts/protocgen.sh @@ -8,7 +8,7 @@ protoc_gen_gocosmos() { return 1 fi - go install github.com/regen-network/cosmos-proto/protoc-gen-gocosmos@latest 2>/dev/null + go get github.com/regen-network/cosmos-proto/protoc-gen-gocosmos@latest 2>/dev/null } protoc_gen_gocosmos diff --git a/x/wasm/types/test_fixtures.go b/x/wasm/types/test_fixtures.go index e173761cae..de07f175de 100644 --- a/x/wasm/types/test_fixtures.go +++ b/x/wasm/types/test_fixtures.go @@ -288,7 +288,7 @@ func ExecuteContractProposalFixture(mutators ...func(p *ExecuteContractProposal) RunAs: anyAddress, Msg: []byte(`{"do":"something"}`), Funds: sdk.Coins{{ - Denom: "wasm.cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr/channel-0/stake", + Denom: "stake", Amount: sdk.NewInt(1), }}, } From 3a778d024674d3ddfe7373e764ba21c0cff67cd5 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Thu, 11 Aug 2022 02:04:58 +0700 Subject: [PATCH 024/120] bump ibc-go to v3.2.x --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index d08b67a291..4c1d916076 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/CosmWasm/wasmvm v1.0.0 github.com/cosmos/cosmos-sdk v0.45.7 github.com/cosmos/iavl v0.19.1 - github.com/cosmos/ibc-go/v3 v3.1.1 + github.com/cosmos/ibc-go/v3 v3.1.1-0.20220810102546-33bb3fe41704 github.com/cosmos/interchain-accounts v0.1.0 github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b github.com/gogo/protobuf v1.3.3 diff --git a/go.sum b/go.sum index 2ad95a7d5c..3d9acd88a6 100644 --- a/go.sum +++ b/go.sum @@ -263,6 +263,8 @@ github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4 github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= github.com/cosmos/iavl v0.19.1 h1:3gaq9b6SjiB0KBTygRnAvEGml2pQlu1TH8uma5g63Ys= github.com/cosmos/iavl v0.19.1/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= +github.com/cosmos/ibc-go/v3 v3.1.1-0.20220810102546-33bb3fe41704 h1:aW44sH31ywX7Brq2mEDi3oTfpZ5GTPPjyQHvzxupntA= +github.com/cosmos/ibc-go/v3 v3.1.1-0.20220810102546-33bb3fe41704/go.mod h1:p+EN8SdPbOBidmX0Q08visElGMdon8hPhvlk0vaxF6Q= github.com/cosmos/ibc-go/v3 v3.1.1 h1:Yodps4ezxbKS8u0TNJkdYsf+MCb0XzUuIuxIkSUMwbA= github.com/cosmos/ibc-go/v3 v3.1.1/go.mod h1:IR1bpjywC1i0YcElPa4d2IevNUBZehKoD5bscQlbDyM= github.com/cosmos/interchain-accounts v0.1.0 h1:QmuwNsf1Hxl3P5GSGt7Z+JeuHPiZw4Z34R/038P5T6s= From 7d345103e5f61164bd47eaeeb883cc6df69d9d91 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Thu, 11 Aug 2022 02:11:08 +0700 Subject: [PATCH 025/120] Update config.yml --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f0767528e5..dfd118d667 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ version: 2.1 executors: golang: docker: - - image: cimg/go:1.18 + - image: cimg/go:1.19 commands: make: From 6478e53589e5842ac84c22159308073e78c231e0 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 13 Aug 2022 22:12:22 +0700 Subject: [PATCH 026/120] but not done --- app/ante.go | 14 +- app/app.go | 135 ++--- app/sim_test.go | 9 +- app/test_access.go | 4 +- app/test_helpers.go | 19 +- benchmarks/app_test.go | 10 +- benchmarks/bench_test.go | 4 +- cmd/wasmd/genaccounts.go | 7 +- cmd/wasmd/main.go | 2 +- cmd/wasmd/root.go | 13 +- go.mod | 72 ++- go.sum | 418 ++++++++++---- x/wasm/client/cli/genesis_msg.go | 11 +- x/wasm/client/cli/genesis_msg_test.go | 2 +- x/wasm/client/cli/gov_tx.go | 2 +- x/wasm/client/proposal_handler.go | 21 +- x/wasm/client/proposal_handler_test.go | 298 ---------- x/wasm/client/rest/gov.go | 523 ------------------ x/wasm/client/rest/new_tx.go | 86 --- x/wasm/client/rest/query.go | 270 --------- x/wasm/client/rest/rest.go | 13 - x/wasm/client/rest/tx.go | 149 ----- x/wasm/ibc.go | 26 +- x/wasm/ibc_reflect_test.go | 4 +- x/wasm/ibc_test.go | 4 +- x/wasm/ibctesting/chain.go | 66 ++- x/wasm/ibctesting/coordinator.go | 6 +- x/wasm/ibctesting/endpoint.go | 23 +- x/wasm/ibctesting/event_utils.go | 4 +- x/wasm/ibctesting/path.go | 2 +- x/wasm/ibctesting/wasm.go | 2 +- x/wasm/ioutils/ioutil.go | 3 +- x/wasm/keeper/ante.go | 5 +- x/wasm/keeper/ante_test.go | 3 +- x/wasm/keeper/genesis_test.go | 4 +- x/wasm/keeper/handler_plugin.go | 4 +- x/wasm/keeper/handler_plugin_encoders.go | 20 +- x/wasm/keeper/handler_plugin_encoders_test.go | 8 +- x/wasm/keeper/handler_plugin_test.go | 8 +- x/wasm/keeper/ibc.go | 2 +- x/wasm/keeper/keeper.go | 5 +- x/wasm/keeper/proposal_handler.go | 2 +- x/wasm/keeper/proposal_integration_test.go | 271 +++------ x/wasm/keeper/querier.go | 5 +- x/wasm/keeper/querier_test.go | 5 +- x/wasm/keeper/query_plugins.go | 2 +- x/wasm/keeper/query_plugins_test.go | 2 +- x/wasm/keeper/reflect_test.go | 2 +- x/wasm/keeper/snapshotter.go | 8 + x/wasm/keeper/staking_test.go | 4 +- x/wasm/keeper/submsg_test.go | 2 +- x/wasm/keeper/test_common.go | 68 ++- x/wasm/keeper/wasmtesting/mock_keepers.go | 4 +- x/wasm/module.go | 7 - x/wasm/relay_pingpong_test.go | 8 +- x/wasm/relay_test.go | 10 +- x/wasm/simulation/sim_utils.go | 6 +- x/wasm/types/codec.go | 4 +- x/wasm/types/expected_keepers.go | 6 +- x/wasm/types/genesis_test.go | 2 +- x/wasm/types/proposal.go | 49 +- x/wasm/types/proposal_test.go | 18 +- x/wasm/types/tx_test.go | 14 +- x/wasm/types/types_test.go | 2 +- 64 files changed, 809 insertions(+), 1973 deletions(-) delete mode 100644 x/wasm/client/proposal_handler_test.go delete mode 100644 x/wasm/client/rest/gov.go delete mode 100644 x/wasm/client/rest/new_tx.go delete mode 100644 x/wasm/client/rest/query.go delete mode 100644 x/wasm/client/rest/rest.go delete mode 100644 x/wasm/client/rest/tx.go diff --git a/app/ante.go b/app/ante.go index 937f87fb9a..8e2052cc5a 100644 --- a/app/ante.go +++ b/app/ante.go @@ -1,11 +1,12 @@ package app import ( + storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/ante" - ibcante "github.com/cosmos/ibc-go/v3/modules/core/ante" - "github.com/cosmos/ibc-go/v3/modules/core/keeper" + ibcante "github.com/cosmos/ibc-go/v5/modules/core/ante" + "github.com/cosmos/ibc-go/v5/modules/core/keeper" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" wasmTypes "github.com/CosmWasm/wasmd/x/wasm/types" @@ -18,7 +19,7 @@ type HandlerOptions struct { IBCKeeper *keeper.Keeper WasmConfig *wasmTypes.WasmConfig - TXCounterStoreKey sdk.StoreKey + TXCounterStoreKey storetypes.StoreKey } func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { @@ -47,20 +48,19 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { ante.NewSetUpContextDecorator(), // outermost AnteDecorator. SetUpContext must be called first wasmkeeper.NewLimitSimulationGasDecorator(options.WasmConfig.SimulationGasLimit), // after setup context to enforce limits early wasmkeeper.NewCountTXDecorator(options.TXCounterStoreKey), - ante.NewRejectExtensionOptionsDecorator(), - ante.NewMempoolFeeDecorator(), + ante.NewExtensionOptionsDecorator(options.ExtensionOptionChecker), ante.NewValidateBasicDecorator(), ante.NewTxTimeoutHeightDecorator(), ante.NewValidateMemoDecorator(options.AccountKeeper), ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper), - ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper), + ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker), // SetPubKeyDecorator must be called before all signature verification decorators ante.NewSetPubKeyDecorator(options.AccountKeeper), ante.NewValidateSigCountDecorator(options.AccountKeeper), ante.NewSigGasConsumeDecorator(options.AccountKeeper, sigGasConsumer), ante.NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler), ante.NewIncrementSequenceDecorator(options.AccountKeeper), - ibcante.NewAnteDecorator(options.IBCKeeper), + ibcante.NewRedundantRelayDecorator(options.IBCKeeper), } return sdk.ChainAnteDecorators(anteDecorators...), nil diff --git a/app/app.go b/app/app.go index 300ef7b150..96af061145 100644 --- a/app/app.go +++ b/app/app.go @@ -11,7 +11,6 @@ import ( "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/grpc/tmservice" - "github.com/cosmos/cosmos-sdk/client/rpc" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/server/api" @@ -22,7 +21,6 @@ import ( "github.com/cosmos/cosmos-sdk/types/module" "github.com/cosmos/cosmos-sdk/x/auth" "github.com/cosmos/cosmos-sdk/x/auth/ante" - authrest "github.com/cosmos/cosmos-sdk/x/auth/client/rest" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" authsims "github.com/cosmos/cosmos-sdk/x/auth/simulation" authtx "github.com/cosmos/cosmos-sdk/x/auth/tx" @@ -56,6 +54,8 @@ import ( "github.com/cosmos/cosmos-sdk/x/gov" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/cosmos/cosmos-sdk/x/mint" mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" @@ -74,27 +74,28 @@ import ( upgradeclient "github.com/cosmos/cosmos-sdk/x/upgrade/client" upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - ica "github.com/cosmos/ibc-go/v3/modules/apps/27-interchain-accounts" - icacontroller "github.com/cosmos/ibc-go/v3/modules/apps/27-interchain-accounts/controller" - icacontrollerkeeper "github.com/cosmos/ibc-go/v3/modules/apps/27-interchain-accounts/controller/keeper" - icacontrollertypes "github.com/cosmos/ibc-go/v3/modules/apps/27-interchain-accounts/controller/types" - icahost "github.com/cosmos/ibc-go/v3/modules/apps/27-interchain-accounts/host" - icahostkeeper "github.com/cosmos/ibc-go/v3/modules/apps/27-interchain-accounts/host/keeper" - icahosttypes "github.com/cosmos/ibc-go/v3/modules/apps/27-interchain-accounts/host/types" - icatypes "github.com/cosmos/ibc-go/v3/modules/apps/27-interchain-accounts/types" - transfer "github.com/cosmos/ibc-go/v3/modules/apps/transfer" - ibctransferkeeper "github.com/cosmos/ibc-go/v3/modules/apps/transfer/keeper" - ibctransfertypes "github.com/cosmos/ibc-go/v3/modules/apps/transfer/types" - ibc "github.com/cosmos/ibc-go/v3/modules/core" - ibcclient "github.com/cosmos/ibc-go/v3/modules/core/02-client" - ibcclientclient "github.com/cosmos/ibc-go/v3/modules/core/02-client/client" - ibcclienttypes "github.com/cosmos/ibc-go/v3/modules/core/02-client/types" - porttypes "github.com/cosmos/ibc-go/v3/modules/core/05-port/types" - ibchost "github.com/cosmos/ibc-go/v3/modules/core/24-host" - ibckeeper "github.com/cosmos/ibc-go/v3/modules/core/keeper" + ica "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts" + icacontroller "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/controller" + icacontrollerkeeper "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/controller/keeper" + icacontrollertypes "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/controller/types" + icahost "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/host" + icahostkeeper "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/host/keeper" + icahosttypes "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/host/types" + icatypes "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/types" + transfer "github.com/cosmos/ibc-go/v5/modules/apps/transfer" + ibctransferkeeper "github.com/cosmos/ibc-go/v5/modules/apps/transfer/keeper" + ibctransfertypes "github.com/cosmos/ibc-go/v5/modules/apps/transfer/types" + ibc "github.com/cosmos/ibc-go/v5/modules/core" + ibcclient "github.com/cosmos/ibc-go/v5/modules/core/02-client" + ibcclientclient "github.com/cosmos/ibc-go/v5/modules/core/02-client/client" + ibcclienttypes "github.com/cosmos/ibc-go/v5/modules/core/02-client/types" + porttypes "github.com/cosmos/ibc-go/v5/modules/core/05-port/types" + ibchost "github.com/cosmos/ibc-go/v5/modules/core/24-host" + ibckeeper "github.com/cosmos/ibc-go/v5/modules/core/keeper" // Note: please do your research before using this in production app, this is a demo and not an officially // supported IBC team implementation. It has no known issues, but do your own research before using it. + storetypes "github.com/cosmos/cosmos-sdk/store/types" intertx "github.com/cosmos/interchain-accounts/x/inter-tx" intertxkeeper "github.com/cosmos/interchain-accounts/x/inter-tx/keeper" intertxtypes "github.com/cosmos/interchain-accounts/x/inter-tx/types" @@ -183,17 +184,15 @@ var ( staking.AppModuleBasic{}, mint.AppModuleBasic{}, distr.AppModuleBasic{}, - gov.NewAppModuleBasic( - append( - wasmclient.ProposalHandlers, - paramsclient.ProposalHandler, - distrclient.ProposalHandler, - upgradeclient.ProposalHandler, - upgradeclient.CancelProposalHandler, - ibcclientclient.UpdateClientProposalHandler, - ibcclientclient.UpgradeProposalHandler, - )..., - ), + gov.NewAppModuleBasic(append( + wasmclient.ProposalHandlers, + paramsclient.ProposalHandler, + distrclient.ProposalHandler, + upgradeclient.LegacyProposalHandler, + upgradeclient.LegacyCancelProposalHandler, + ibcclientclient.UpdateClientProposalHandler, + ibcclientclient.UpgradeProposalHandler, + )), params.AppModuleBasic{}, crisis.AppModuleBasic{}, slashing.AppModuleBasic{}, @@ -238,9 +237,9 @@ type WasmApp struct { invCheckPeriod uint // keys to access the substores - keys map[string]*sdk.KVStoreKey - tkeys map[string]*sdk.TransientStoreKey - memKeys map[string]*sdk.MemoryStoreKey + keys map[string]*storetypes.KVStoreKey + tkeys map[string]*storetypes.TransientStoreKey + memKeys map[string]*storetypes.MemoryStoreKey // keepers accountKeeper authkeeper.AccountKeeper @@ -332,7 +331,7 @@ func NewWasmApp( ) // set the BaseApp's parameter store - bApp.SetParamStore(app.paramsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramskeeper.ConsensusParamsKeyTable())) + bApp.SetParamStore(app.paramsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramstypes.ConsensusParamsKeyTable())) // add capability keeper and ScopeToModule for ibc module app.capabilityKeeper = capabilitykeeper.NewKeeper( @@ -355,6 +354,7 @@ func NewWasmApp( app.getSubspace(authtypes.ModuleName), authtypes.ProtoBaseAccount, maccPerms, + sdk.GetConfig().GetBech32AccountAddrPrefix(), ) app.bankKeeper = bankkeeper.NewBaseKeeper( appCodec, @@ -367,6 +367,7 @@ func NewWasmApp( keys[authzkeeper.StoreKey], appCodec, app.BaseApp.MsgServiceRouter(), + app.accountKeeper, ) app.feeGrantKeeper = feegrantkeeper.NewKeeper( appCodec, @@ -395,9 +396,7 @@ func NewWasmApp( app.getSubspace(distrtypes.ModuleName), app.accountKeeper, app.bankKeeper, - &stakingKeeper, - authtypes.FeeCollectorName, - app.ModuleAccountAddrs(), + &stakingKeeper, authtypes.FeeCollectorName, ) app.slashingKeeper = slashingkeeper.NewKeeper( appCodec, @@ -417,6 +416,7 @@ func NewWasmApp( appCodec, homePath, app.BaseApp, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) // register the staking hooks @@ -434,10 +434,13 @@ func NewWasmApp( scopedIBCKeeper, ) - // register the proposal types - govRouter := govtypes.NewRouter() - govRouter. - AddRoute(govtypes.RouterKey, govtypes.ProposalHandler). + // Register the proposal types + // Deprecated: Avoid adding new handlers, instead use the new proposal flow + // by granting the governance module the right to execute the message. + // See: https://github.com/cosmos/cosmos-sdk/blob/release/v0.46.x/x/gov/spec/01_concepts.md#proposal-messages + govRouter := govv1beta1.NewRouter() + govRouter.AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler). + AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler). AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.paramsKeeper)). AddRoute(distrtypes.RouterKey, distr.NewCommunityPoolSpendProposalHandler(app.distrKeeper)). AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(app.upgradeKeeper)). @@ -487,9 +490,8 @@ func NewWasmApp( // supported IBC team implementation. Do your own research before using it. interTxModule := intertx.NewAppModule(appCodec, app.interTxKeeper) interTxIBCModule := intertx.NewIBCModule(app.interTxKeeper) - // You will likely want to swap out the second argument with your own reviewed and maintained ica auth module - icaControllerIBCModule := icacontroller.NewIBCModule(app.icaControllerKeeper, interTxIBCModule) - + // You will likely want to swap out the interTxIBCModule with your own reviewed and maintained ica auth module + icaControllerIBCModule := icacontroller.NewIBCMiddleware(interTxIBCModule, app.icaControllerKeeper) // create evidence keeper with router evidenceKeeper := evidencekeeper.NewKeeper( appCodec, @@ -543,14 +545,20 @@ func NewWasmApp( AddRoute(intertxtypes.ModuleName, icaControllerIBCModule) app.ibcKeeper.SetRouter(ibcRouter) - app.govKeeper = govkeeper.NewKeeper( - appCodec, - keys[govtypes.StoreKey], - app.getSubspace(govtypes.ModuleName), - app.accountKeeper, - app.bankKeeper, - &stakingKeeper, - govRouter, + govConfig := govtypes.DefaultConfig() + /* + Example of setting gov params: + govConfig.MaxMetadataLen = 10000 + */ + govKeeper := govkeeper.NewKeeper( + appCodec, keys[govtypes.StoreKey], app.getSubspace(govtypes.ModuleName), app.accountKeeper, app.bankKeeper, + &stakingKeeper, govRouter, app.MsgServiceRouter(), govConfig, + ) + + app.govKeeper = *govKeeper.SetHooks( + govtypes.NewMultiGovHooks( + // register the governance hooks + ), ) /**** Module Options ****/ @@ -572,7 +580,7 @@ func NewWasmApp( bank.NewAppModule(appCodec, app.bankKeeper, app.accountKeeper), capability.NewAppModule(appCodec, *app.capabilityKeeper), gov.NewAppModule(appCodec, app.govKeeper, app.accountKeeper, app.bankKeeper), - mint.NewAppModule(appCodec, app.mintKeeper, app.accountKeeper), + mint.NewAppModule(appCodec, app.mintKeeper, app.accountKeeper, nil), slashing.NewAppModule(appCodec, app.slashingKeeper, app.accountKeeper, app.bankKeeper, app.stakingKeeper), distr.NewAppModule(appCodec, app.distrKeeper, app.accountKeeper, app.bankKeeper, app.stakingKeeper), staking.NewAppModule(appCodec, app.stakingKeeper, app.accountKeeper, app.bankKeeper), @@ -696,7 +704,7 @@ func NewWasmApp( feegrantmodule.NewAppModule(appCodec, app.accountKeeper, app.bankKeeper, app.feeGrantKeeper, app.interfaceRegistry), authzmodule.NewAppModule(appCodec, app.authzKeeper, app.accountKeeper, app.bankKeeper, app.interfaceRegistry), gov.NewAppModule(appCodec, app.govKeeper, app.accountKeeper, app.bankKeeper), - mint.NewAppModule(appCodec, app.mintKeeper, app.accountKeeper), + mint.NewAppModule(appCodec, app.mintKeeper, app.accountKeeper, nil), staking.NewAppModule(appCodec, app.stakingKeeper, app.accountKeeper, app.bankKeeper), distr.NewAppModule(appCodec, app.distrKeeper, app.accountKeeper, app.bankKeeper, app.stakingKeeper), slashing.NewAppModule(appCodec, app.slashingKeeper, app.accountKeeper, app.bankKeeper, app.stakingKeeper), @@ -739,6 +747,7 @@ func NewWasmApp( // must be before Loading version // requires the snapshot store to be created and registered as a BaseAppOption // see cmd/wasmd/root.go: 206 - 214 approx + if manager := app.SnapshotManager(); manager != nil { err := manager.RegisterExtensions( wasmkeeper.NewWasmSnapshotter(app.CommitMultiStore(), &app.wasmKeeper), @@ -835,16 +844,11 @@ func (app *WasmApp) SimulationManager() *module.SimulationManager { // API server. func (app *WasmApp) RegisterAPIRoutes(apiSvr *api.Server, apiConfig config.APIConfig) { clientCtx := apiSvr.ClientCtx - rpc.RegisterRoutes(clientCtx, apiSvr.Router) - // Register legacy tx routes. - authrest.RegisterTxRoutes(clientCtx, apiSvr.Router) // Register new tx routes from grpc-gateway. authtx.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) // Register new tendermint queries routes from grpc-gateway. tmservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) - // Register legacy and grpc-gateway routes for all modules. - ModuleBasics.RegisterRESTRoutes(clientCtx, apiSvr.Router) ModuleBasics.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) // register swagger API from root so that other applications can override easily @@ -860,7 +864,12 @@ func (app *WasmApp) RegisterTxService(clientCtx client.Context) { // RegisterTendermintService implements the Application.RegisterTendermintService method. func (app *WasmApp) RegisterTendermintService(clientCtx client.Context) { - tmservice.RegisterTendermintService(app.BaseApp.GRPCQueryRouter(), clientCtx, app.interfaceRegistry) + tmservice.RegisterTendermintService( + clientCtx, + app.BaseApp.GRPCQueryRouter(), + app.interfaceRegistry, + app.Query, + ) } func (app *WasmApp) AppCodec() codec.Codec { @@ -888,7 +897,7 @@ func GetMaccPerms() map[string][]string { } // initParamsKeeper init params keeper and its subspaces -func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey sdk.StoreKey) paramskeeper.Keeper { +func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey storetypes.StoreKey) paramskeeper.Keeper { paramsKeeper := paramskeeper.NewKeeper(appCodec, legacyAmino, key, tkey) paramsKeeper.Subspace(authtypes.ModuleName) @@ -897,7 +906,7 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(minttypes.ModuleName) paramsKeeper.Subspace(distrtypes.ModuleName) paramsKeeper.Subspace(slashingtypes.ModuleName) - paramsKeeper.Subspace(govtypes.ModuleName).WithKeyTable(govtypes.ParamKeyTable()) + paramsKeeper.Subspace(govtypes.ModuleName).WithKeyTable(govv1.ParamKeyTable()) paramsKeeper.Subspace(crisistypes.ModuleName) paramsKeeper.Subspace(ibctransfertypes.ModuleName) paramsKeeper.Subspace(ibchost.ModuleName) diff --git a/app/sim_test.go b/app/sim_test.go index d64488de40..88df4744bf 100644 --- a/app/sim_test.go +++ b/app/sim_test.go @@ -14,6 +14,7 @@ import ( "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" + storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/kv" "github.com/cosmos/cosmos-sdk/types/module" @@ -31,8 +32,8 @@ import ( "github.com/cosmos/cosmos-sdk/x/simulation" slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - ibctransfertypes "github.com/cosmos/ibc-go/v3/modules/apps/transfer/types" - ibchost "github.com/cosmos/ibc-go/v3/modules/core/24-host" + ibctransfertypes "github.com/cosmos/ibc-go/v5/modules/apps/transfer/types" + ibchost "github.com/cosmos/ibc-go/v5/modules/core/24-host" "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/libs/log" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" @@ -48,8 +49,8 @@ func init() { } type StoreKeysPrefixes struct { - A sdk.StoreKey - B sdk.StoreKey + A storetypes.StoreKey + B storetypes.StoreKey Prefixes [][]byte } diff --git a/app/test_access.go b/app/test_access.go index 6dadec1e0c..64f98ef0ec 100644 --- a/app/test_access.go +++ b/app/test_access.go @@ -12,8 +12,8 @@ import ( bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" - ibctransferkeeper "github.com/cosmos/ibc-go/v3/modules/apps/transfer/keeper" - ibckeeper "github.com/cosmos/ibc-go/v3/modules/core/keeper" + ibctransferkeeper "github.com/cosmos/ibc-go/v5/modules/apps/transfer/keeper" + ibckeeper "github.com/cosmos/ibc-go/v5/modules/core/keeper" "github.com/CosmWasm/wasmd/x/wasm" ) diff --git a/app/test_helpers.go b/app/test_helpers.go index 786aabc011..678f5e469a 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -19,6 +19,7 @@ import ( cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/simapp/helpers" "github.com/cosmos/cosmos-sdk/snapshots" + snapshottypes "github.com/cosmos/cosmos-sdk/snapshots/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/errors" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -62,7 +63,9 @@ func setup(t testing.TB, withGenesis bool, invCheckPeriod uint, opts ...wasm.Opt require.NoError(t, err) snapshotStore, err := snapshots.NewStore(snapshotDB, snapshotDir) require.NoError(t, err) - baseAppOpts := []func(*bam.BaseApp){bam.SetSnapshotStore(snapshotStore), bam.SetSnapshotKeepRecent(2)} + baseAppOpts := []func(*bam.BaseApp){ + bam.SetSnapshot(snapshotStore, snapshottypes.NewSnapshotOptions(0, 2)), + } db := dbm.NewMemDB() app := NewWasmApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, nodeHome, invCheckPeriod, MakeEncodingConfig(), wasm.EnableAllProposals, EmptyBaseAppOptions{}, opts, baseAppOpts...) if withGenesis { @@ -183,7 +186,7 @@ func createIncrementalAccounts(accNum int) []sdk.AccAddress { buffer.WriteString("A58856F0FD53BF058B4909A21AEC019107BA6") // base address string buffer.WriteString(numString) // adding on final two digits to make addresses unique - res, err := sdk.AccAddressFromHex(buffer.String()) + res, err := sdk.AccAddressFromHexUnsafe(buffer.String()) if err != nil { panic(err) } @@ -258,7 +261,7 @@ func ConvertAddrsToValAddrs(addrs []sdk.AccAddress) []sdk.ValAddress { } func TestAddr(addr string, bech string) (sdk.AccAddress, error) { - res, err := sdk.AccAddressFromHex(addr) + res, err := sdk.AccAddressFromHexUnsafe(addr) if err != nil { return nil, err } @@ -294,7 +297,7 @@ func SignCheckDeliver( t *testing.T, txCfg client.TxConfig, app *bam.BaseApp, header tmproto.Header, msgs []sdk.Msg, chainID string, accNums, accSeqs []uint64, expSimPass, expPass bool, priv ...cryptotypes.PrivKey, ) (sdk.GasInfo, *sdk.Result, error) { - tx, err := helpers.GenTx( + tx, err := helpers.GenSignedMockTx( rand.New(rand.NewSource(time.Now().UnixNano())), txCfg, msgs, @@ -322,7 +325,7 @@ func SignCheckDeliver( // Simulate a sending a transaction and committing a block app.BeginBlock(abci.RequestBeginBlock{Header: header}) - gInfo, res, err := app.Deliver(txCfg.TxEncoder(), tx) + gInfo, res, err := app.SimDeliver(txCfg.TxEncoder(), tx) if expPass { require.NoError(t, err) @@ -344,7 +347,7 @@ func SignAndDeliver( t *testing.T, txCfg client.TxConfig, app *bam.BaseApp, header tmproto.Header, msgs []sdk.Msg, chainID string, accNums, accSeqs []uint64, expSimPass, expPass bool, priv ...cryptotypes.PrivKey, ) (sdk.GasInfo, *sdk.Result, error) { - tx, err := helpers.GenTx( + tx, err := helpers.GenSignedMockTx( rand.New(rand.NewSource(time.Now().UnixNano())), txCfg, msgs, @@ -359,7 +362,7 @@ func SignAndDeliver( // Simulate a sending a transaction and committing a block app.BeginBlock(abci.RequestBeginBlock{Header: header}) - gInfo, res, err := app.Deliver(txCfg.TxEncoder(), tx) + gInfo, res, err := app.SimDeliver(txCfg.TxEncoder(), tx) if expPass { require.NoError(t, err) @@ -382,7 +385,7 @@ func GenSequenceOfTxs(txGen client.TxConfig, msgs []sdk.Msg, accNums []uint64, i txs := make([]sdk.Tx, numToGenerate) var err error for i := 0; i < numToGenerate; i++ { - txs[i], err = helpers.GenTx( + txs[i], err = helpers.GenSignedMockTx( rand.New(rand.NewSource(time.Now().UnixNano())), txGen, msgs, diff --git a/benchmarks/app_test.go b/benchmarks/app_test.go index 5ff130650c..73383c666c 100644 --- a/benchmarks/app_test.go +++ b/benchmarks/app_test.go @@ -126,10 +126,10 @@ func InitializeWasmApp(b testing.TB, db dbm.DB, numAccounts int) AppInfo { Sender: addr.String(), WASMByteCode: cw20Code, } - storeTx, err := helpers.GenTx(rand.New(rand.NewSource(time.Now().UnixNano())), + storeTx, err := helpers.GenSignedMockTx(rand.New(rand.NewSource(time.Now().UnixNano())), txGen, []sdk.Msg{&storeMsg}, nil, 55123123, "", []uint64{0}, []uint64{0}, minter) require.NoError(b, err) - _, res, err := wasmApp.Deliver(txGen.TxEncoder(), storeTx) + _, res, err := wasmApp.SimDeliver(txGen.TxEncoder(), storeTx) require.NoError(b, err) codeID := uint64(1) @@ -161,10 +161,10 @@ func InitializeWasmApp(b testing.TB, db dbm.DB, numAccounts int) AppInfo { Msg: initBz, } gasWanted := 500000 + 10000*uint64(numAccounts) - initTx, err := helpers.GenTx(rand.New(rand.NewSource(time.Now().UnixNano())), + initTx, err := helpers.GenSignedMockTx(rand.New(rand.NewSource(time.Now().UnixNano())), txGen, []sdk.Msg{&initMsg}, nil, gasWanted, "", []uint64{0}, []uint64{1}, minter) require.NoError(b, err) - _, res, err = wasmApp.Deliver(txGen.TxEncoder(), initTx) + _, res, err = wasmApp.SimDeliver(txGen.TxEncoder(), initTx) require.NoError(b, err) // TODO: parse contract address better @@ -194,7 +194,7 @@ func GenSequenceOfTxs(b testing.TB, info *AppInfo, msgGen func(*AppInfo) ([]sdk. for i := 0; i < numToGenerate; i++ { msgs, err := msgGen(info) require.NoError(b, err) - txs[i], err = helpers.GenTx( + txs[i], err = helpers.GenSignedMockTx( rand.New(rand.NewSource(time.Now().UnixNano())), info.TxConfig, msgs, diff --git a/benchmarks/bench_test.go b/benchmarks/bench_test.go index 9001f1abf4..0cd181f5d1 100644 --- a/benchmarks/bench_test.go +++ b/benchmarks/bench_test.go @@ -108,11 +108,11 @@ func BenchmarkTxSending(b *testing.B) { for j := 0; j < blockSize; j++ { idx := i*blockSize + j - _, _, err := appInfo.App.Check(txEncoder, txs[idx]) + _, _, err := appInfo.App.SimCheck(txEncoder, txs[idx]) if err != nil { panic("something is broken in checking transaction") } - _, _, err = appInfo.App.Deliver(txEncoder, txs[idx]) + _, _, err = appInfo.App.SimDeliver(txEncoder, txs[idx]) require.NoError(b, err) } diff --git a/cmd/wasmd/genaccounts.go b/cmd/wasmd/genaccounts.go index 9acf2cea70..448e5fdbb3 100644 --- a/cmd/wasmd/genaccounts.go +++ b/cmd/wasmd/genaccounts.go @@ -54,7 +54,7 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa } if keyringBackend != "" && clientCtx.Keyring == nil { var err error - kr, err = keyring.New(sdk.KeyringServiceName(), keyringBackend, clientCtx.HomeDir, inBuf) + kr, err = keyring.New(sdk.KeyringServiceName(), keyringBackend, clientCtx.HomeDir, inBuf, clientCtx.Codec) if err != nil { return err } @@ -66,7 +66,10 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa if err != nil { return fmt.Errorf("failed to get address from Keyring: %w", err) } - addr = info.GetAddress() + addr, err = info.GetAddress() + if err != nil { + return fmt.Errorf("failed to get address from Keyring: %w", err) + } } coins, err := sdk.ParseCoinsNormalized(args[1]) diff --git a/cmd/wasmd/main.go b/cmd/wasmd/main.go index 7bd3d01220..3a7719e6cf 100644 --- a/cmd/wasmd/main.go +++ b/cmd/wasmd/main.go @@ -12,7 +12,7 @@ import ( func main() { rootCmd, _ := NewRootCmd() - if err := svrcmd.Execute(rootCmd, app.DefaultNodeHome); err != nil { + if err := svrcmd.Execute(rootCmd, "", app.DefaultNodeHome); err != nil { switch e := err.(type) { case server.ErrorCode: os.Exit(e.Code) diff --git a/cmd/wasmd/root.go b/cmd/wasmd/root.go index 99889afb45..9451fd3c78 100644 --- a/cmd/wasmd/root.go +++ b/cmd/wasmd/root.go @@ -16,6 +16,7 @@ import ( "github.com/cosmos/cosmos-sdk/server" servertypes "github.com/cosmos/cosmos-sdk/server/types" "github.com/cosmos/cosmos-sdk/snapshots" + snapshottypes "github.com/cosmos/cosmos-sdk/snapshots/types" "github.com/cosmos/cosmos-sdk/store" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/version" @@ -27,6 +28,7 @@ import ( "github.com/prometheus/client_golang/prometheus" "github.com/spf13/cast" "github.com/spf13/cobra" + tmcfg "github.com/tendermint/tendermint/config" tmcli "github.com/tendermint/tendermint/libs/cli" "github.com/tendermint/tendermint/libs/log" dbm "github.com/tendermint/tm-db" @@ -83,7 +85,7 @@ func NewRootCmd() (*cobra.Command, params.EncodingConfig) { return err } - return server.InterceptConfigsPreRunHandler(cmd, "", nil) + return server.InterceptConfigsPreRunHandler(cmd, "", nil, tmcfg.DefaultConfig()) }, } @@ -216,6 +218,11 @@ func (ac appCreator) newApp( wasmOpts = append(wasmOpts, wasmkeeper.WithVMCacheMetrics(prometheus.DefaultRegisterer)) } + snapshotOptions := snapshottypes.NewSnapshotOptions( + cast.ToUint64(appOpts.Get(server.FlagStateSyncSnapshotInterval)), + cast.ToUint32(appOpts.Get(server.FlagStateSyncSnapshotKeepRecent)), + ) + return app.NewWasmApp(logger, db, traceStore, true, skipUpgradeHeights, cast.ToString(appOpts.Get(flags.FlagHome)), cast.ToUint(appOpts.Get(server.FlagInvCheckPeriod)), @@ -231,9 +238,7 @@ func (ac appCreator) newApp( baseapp.SetInterBlockCache(cache), baseapp.SetTrace(cast.ToBool(appOpts.Get(server.FlagTrace))), baseapp.SetIndexEvents(cast.ToStringSlice(appOpts.Get(server.FlagIndexEvents))), - baseapp.SetSnapshotStore(snapshotStore), - baseapp.SetSnapshotInterval(cast.ToUint64(appOpts.Get(server.FlagStateSyncSnapshotInterval))), - baseapp.SetSnapshotKeepRecent(cast.ToUint32(appOpts.Get(server.FlagStateSyncSnapshotKeepRecent))), + baseapp.SetSnapshot(snapshotStore, snapshotOptions), ) } diff --git a/go.mod b/go.mod index 4c1d916076..d990996c5d 100644 --- a/go.mod +++ b/go.mod @@ -3,12 +3,13 @@ module github.com/CosmWasm/wasmd go 1.18 require ( + cosmossdk.io/errors v1.0.0-beta.7 github.com/CosmWasm/wasmvm v1.0.0 - github.com/cosmos/cosmos-sdk v0.45.7 + github.com/cosmos/cosmos-sdk v0.46.1-0.20220811143248-629b3b9df8de github.com/cosmos/iavl v0.19.1 - github.com/cosmos/ibc-go/v3 v3.1.1-0.20220810102546-33bb3fe41704 - github.com/cosmos/interchain-accounts v0.1.0 - github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b + github.com/cosmos/ibc-go/v5 v5.0.0-beta1.0.20220812090728-e1f7e89dc1e2 + github.com/cosmos/interchain-accounts v0.3.1-0.20220812171121-8d8742554e53 + github.com/dvsekhvalnov/jose2go v1.5.0 github.com/gogo/protobuf v1.3.3 github.com/golang/protobuf v1.5.2 github.com/google/gofuzz v1.2.0 @@ -24,7 +25,7 @@ require ( github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.12.0 github.com/stretchr/testify v1.8.0 - github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca + github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 github.com/tendermint/tendermint v0.34.20 github.com/tendermint/tm-db v0.6.7 google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd @@ -33,29 +34,38 @@ require ( ) require ( - filippo.io/edwards25519 v1.0.0-beta.2 // indirect - github.com/99designs/keyring v1.1.6 // indirect + cloud.google.com/go v0.100.2 // indirect + cloud.google.com/go/compute v1.6.1 // indirect + cloud.google.com/go/iam v0.3.0 // indirect + cloud.google.com/go/storage v1.14.0 // indirect + cosmossdk.io/math v1.0.0-beta.3 // indirect + filippo.io/edwards25519 v1.0.0-rc.1 // indirect + github.com/99designs/keyring v1.2.1 // indirect github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect - github.com/DataDog/zstd v1.4.5 // indirect github.com/Workiva/go-datastructures v1.0.53 // indirect - github.com/armon/go-metrics v0.3.10 // indirect + github.com/armon/go-metrics v0.4.0 // indirect + github.com/aws/aws-sdk-go v1.40.45 // 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.0 // indirect github.com/btcsuite/btcd v0.22.1 // 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/coinbase/rosetta-sdk-go v0.7.0 // indirect + github.com/cockroachdb/apd/v2 v2.0.2 // indirect + github.com/coinbase/rosetta-sdk-go v0.7.9 // indirect github.com/confio/ics23/go v0.7.0 // indirect github.com/cosmos/btcutil v1.0.4 // indirect + github.com/cosmos/cosmos-proto v1.0.0-alpha7 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gorocksdb v1.2.0 // indirect github.com/cosmos/ledger-cosmos-go v0.11.1 // indirect github.com/cosmos/ledger-go v0.9.2 // indirect - github.com/danieljoos/wincred v1.0.2 // indirect + github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect - github.com/dgraph-io/badger/v2 v2.2007.2 // indirect - github.com/dgraph-io/ristretto v0.0.3 // indirect + github.com/dgraph-io/badger/v2 v2.2007.4 // indirect + github.com/dgraph-io/ristretto v0.1.0 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/dustin/go-humanize v1.0.0 // indirect github.com/felixge/httpsnoop v1.0.1 // indirect @@ -65,21 +75,29 @@ require ( github.com/go-logfmt/logfmt v0.5.1 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/gateway v1.1.0 // indirect - github.com/golang/snappy v0.0.3 // indirect - github.com/google/btree v1.0.0 // indirect + github.com/golang/glog v1.0.0 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/google/btree v1.0.1 // indirect github.com/google/orderedcode v0.0.1 // indirect + github.com/googleapis/gax-go/v2 v2.4.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect github.com/gtank/merlin v0.1.1 // indirect github.com/gtank/ristretto255 v0.1.2 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-getter v1.6.1 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect - github.com/hashicorp/golang-lru v0.5.4 // indirect + github.com/hashicorp/go-safetemp v1.0.0 // indirect + github.com/hashicorp/go-version v1.4.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-20210204194344-59a8610d2b87 // indirect - github.com/improbable-eng/grpc-web v0.14.1 // indirect + github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 // indirect + github.com/improbable-eng/grpc-web v0.15.0 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d // indirect github.com/klauspost/compress v1.15.1 // indirect @@ -88,9 +106,11 @@ require ( github.com/magiconair/properties v1.8.6 // indirect github.com/mattn/go-colorable v0.1.12 // indirect github.com/mattn/go-isatty v0.0.14 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 // indirect github.com/minio/highwayhash v1.0.2 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-testing-interface v1.0.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect github.com/pelletier/go-toml v1.9.5 // indirect @@ -110,17 +130,24 @@ require ( github.com/tendermint/btcd v0.1.1 // indirect github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 // indirect github.com/tendermint/go-amino v0.16.0 // indirect - github.com/zondax/hid v0.9.0 // indirect + github.com/ulikunitz/xz v0.5.8 // indirect + github.com/zondax/hid v0.9.1-0.20220302062450-5552068d2266 // indirect go.etcd.io/bbolt v1.3.6 // indirect + go.opencensus.io v0.23.0 // indirect golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect golang.org/x/net v0.0.0-20220617184016-355a448f1bc9 // indirect - golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c // indirect + golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 // indirect + golang.org/x/sys v0.0.0-20220702020025-31831981b65f // indirect golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 // indirect golang.org/x/text v0.3.7 // indirect - google.golang.org/protobuf v1.28.0 // indirect + golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df // indirect + google.golang.org/api v0.81.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/protobuf v1.28.1 // indirect gopkg.in/ini.v1 v1.66.6 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect nhooyr.io/websocket v1.8.6 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect ) replace ( @@ -132,6 +159,5 @@ replace ( // latest grpc doesn't work with with our modified proto compiler, so we need to enforce // the following version across all dependencies. github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 - google.golang.org/grpc => google.golang.org/grpc v1.33.2 ) diff --git a/go.sum b/go.sum index 3d9acd88a6..7d07a6ac54 100644 --- a/go.sum +++ b/go.sum @@ -1,13 +1,16 @@ 4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= @@ -31,6 +34,7 @@ cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.2 h1:t9Iw5QH5v4XtlEQaCtUY7x6sCABps8sW0acw7e2WQ6Y= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= @@ -38,14 +42,18 @@ cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvf 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/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= 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 h1:2sMmt8prCn7DPaG4Pmh0N3Inmc8cT8ae5k1M6VJ9Wqc= cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= +cloud.google.com/go/iam v0.3.0 h1:exkAomrVUuzx9kWFI1wm3KI0uoDeUFPB4kKGzx6x+Gc= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= 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= @@ -57,32 +65,30 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.14.0 h1:6RRlFMv1omScs6iq2hfE3IvgE+l6RfJPampq8UZc5TU= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= +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.3 h1:TbZxSopz2LqjJ7aXYfn7nJSb8vNaBklW6BLpcei1qwM= +cosmossdk.io/math v1.0.0-beta.3/go.mod h1:3LYasri3Zna4XpbrTNdKsWmD5fHHkaNAod/mNT9XdE4= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/edwards25519 v1.0.0-beta.2 h1:/BZRNzm8N4K4eWfK28dL4yescorxtO7YG1yun8fy+pI= -filippo.io/edwards25519 v1.0.0-beta.2/go.mod h1:X+pm78QAUPtFLi1z9PYIlS/bdDnvbCOGKtZ+ACWEf7o= +filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= +filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +git.sr.ht/~sircmpwn/getopt v0.0.0-20191230200459-23622cc906b3/go.mod h1:wMEGFFFNuPos7vHmWXfszqImLppbc0wEhh6JBfJIUgw= +git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9/go.mod h1:BVJwbDfVjCjoFiKrhkei6NdGcZYpkDkdyCdg1ukytRA= github.com/Antonboom/errname v0.1.6/go.mod h1:7lz79JAnuoMNDAWE9MeeIr1/c/VpSUWatBv2FH9NYpI= github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= -github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= -github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw= +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0= github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8= -github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= -github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= -github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= -github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= -github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= -github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= -github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= -github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= @@ -91,11 +97,11 @@ github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQ github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= github.com/CosmWasm/wasmvm v1.0.0 h1:NRmnHe3xXsKn2uEcB1F5Ha323JVAhON+BI6L177dlKc= github.com/CosmWasm/wasmvm v1.0.0/go.mod h1:ei0xpvomwSdONsxDuONzV7bL1jSET1M8brEx0FCXc+A= +github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= -github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= -github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= +github.com/DataDog/zstd v1.5.0/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= github.com/GaijinEntertainment/go-exhaustruct/v2 v2.1.0/go.mod h1:LGOGuvEgCfCQsy3JF2tRmpGDpzA53iZfyGEWSPwQ6/4= github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= @@ -116,7 +122,7 @@ github.com/OpenPeeDeeP/depguard v1.1.0/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8= +github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= @@ -134,35 +140,47 @@ github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRF github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= +github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= -github.com/armon/go-metrics v0.3.10 h1:FR+drcQStOe+32sYyJYyZ7FIdgoGGBnwLl+flodp8Uo= github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= +github.com/armon/go-metrics v0.4.0 h1:yCQqn7dwca4ITXb+CbubHmedzaQYHhNhrEXLYUeEe8Q= +github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= +github.com/aws/aws-sdk-go v1.40.45 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-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= +github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= +github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= +github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= +github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= +github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= +github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -170,20 +188,25 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= +github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= -github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= +github.com/btcsuite/btcd v0.21.0-beta.0.20201114000516-e9c7a5ac6401/go.mod h1:Sv4JPQ3/M+teHz9Bo5jBpkNcP0x6r7rdihlNL/7tTAs= github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= +github.com/btcsuite/btcd/btcec/v2 v2.1.2/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= @@ -202,11 +225,14 @@ github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtE github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/bufbuild/buf v1.4.0/go.mod h1:mwHG7klTHnX+rM/ym8LXGl7vYpVmnwT96xWoRB4H5QI= github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= +github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -219,6 +245,7 @@ github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= github.com/chavacava/garif v0.0.0-20220316182200-5cad0b5181d4/go.mod h1:W8EnPSQ8Nv4fUjc/v1/8tHFqhuOJXnRub0dTfuAQktU= github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= +github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= @@ -227,18 +254,31 @@ github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6D github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= -github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +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= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= +github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/coinbase/rosetta-sdk-go v0.7.0 h1:lmTO/JEpCvZgpbkOITL95rA80CPKb5CtMzLaqF2mCNg= -github.com/coinbase/rosetta-sdk-go v0.7.0/go.mod h1:7nD3oBPIiHqhRprqvMgPoGxe/nyq3yftRmpsy29coWE= +github.com/coinbase/kryptology v1.8.0/go.mod h1:RYXOAPdzOGUe3qlSFkMGn58i3xUA8hmxYHksuq+8ciI= +github.com/coinbase/rosetta-sdk-go v0.7.9 h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZr9ZvoCcA= +github.com/coinbase/rosetta-sdk-go v0.7.9/go.mod h1:0/knutI7XGVqXmmH4OQD8OckFrbQ8yMsUZTG7FXCR2M= github.com/confio/ics23/go v0.7.0 h1:00d2kukk7sPoHWL4zZBZwzxnpA2pec1NPdwbSokJ5w8= github.com/confio/ics23/go v0.7.0/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= +github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= +github.com/consensys/bavard v0.1.8-0.20210915155054-088da2f7f54a/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= +github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= +github.com/consensys/gnark-crypto v0.5.3/go.mod h1:hOdPlWQV1gDLp7faZVeg8Y0iEPFaOUnCc4XeCCk96p0= github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= @@ -254,8 +294,10 @@ github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfc github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.4 h1:n7C2ngKXo7UC9gNyMNLbzqz7Asuf+7Qv4gnX/rOdQ44= github.com/cosmos/btcutil v1.0.4/go.mod h1:Ffqc8Hn6TJUdDgHBwIZLtrLQC1KdJ9jGJl/TvgUaxbU= -github.com/cosmos/cosmos-sdk v0.45.7 h1:5H9Ov04WIGoQAMJDdcSD4Vp5Lz6I17voHySH+vjJFCc= -github.com/cosmos/cosmos-sdk v0.45.7/go.mod h1:l8DURPoMMkIEe/Gw59g9KIMDjlYyTsKOWdc3iSSBXvw= +github.com/cosmos/cosmos-proto v1.0.0-alpha7 h1:yqYUOHF2jopwZh4dVQp3xgqwftE5/2hkrwIV6vkUbO0= +github.com/cosmos/cosmos-proto v1.0.0-alpha7/go.mod h1:dosO4pSAbJF8zWCzCoTWP7nNsjcvSUBQmniFxDg5daw= +github.com/cosmos/cosmos-sdk v0.46.1-0.20220811143248-629b3b9df8de h1:UQRRKRi4tcjNAeGspjOkMoNrv4WVfbfD+27gAYVVzAM= +github.com/cosmos/cosmos-sdk v0.46.1-0.20220811143248-629b3b9df8de/go.mod h1:RUBAvwuY1wWQNMiNK3n1xA/xKw6JNfw5AVsKfU3lS3o= 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= @@ -263,12 +305,10 @@ github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4 github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= github.com/cosmos/iavl v0.19.1 h1:3gaq9b6SjiB0KBTygRnAvEGml2pQlu1TH8uma5g63Ys= github.com/cosmos/iavl v0.19.1/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= -github.com/cosmos/ibc-go/v3 v3.1.1-0.20220810102546-33bb3fe41704 h1:aW44sH31ywX7Brq2mEDi3oTfpZ5GTPPjyQHvzxupntA= -github.com/cosmos/ibc-go/v3 v3.1.1-0.20220810102546-33bb3fe41704/go.mod h1:p+EN8SdPbOBidmX0Q08visElGMdon8hPhvlk0vaxF6Q= -github.com/cosmos/ibc-go/v3 v3.1.1 h1:Yodps4ezxbKS8u0TNJkdYsf+MCb0XzUuIuxIkSUMwbA= -github.com/cosmos/ibc-go/v3 v3.1.1/go.mod h1:IR1bpjywC1i0YcElPa4d2IevNUBZehKoD5bscQlbDyM= -github.com/cosmos/interchain-accounts v0.1.0 h1:QmuwNsf1Hxl3P5GSGt7Z+JeuHPiZw4Z34R/038P5T6s= -github.com/cosmos/interchain-accounts v0.1.0/go.mod h1:Fv6LXDs+0ng4mIDVWwEJMXbAIMxY4kiq+A7Bw1Fb9AY= +github.com/cosmos/ibc-go/v5 v5.0.0-beta1.0.20220812090728-e1f7e89dc1e2 h1:M4YCxRSZf9O8ukpfqUsMmymYEXRe4S1LoW//DLQV2f8= +github.com/cosmos/ibc-go/v5 v5.0.0-beta1.0.20220812090728-e1f7e89dc1e2/go.mod h1:gSeljfcWlUKjKhTptUpqz83zYpGE+/Q+HJwmDPq5pJs= +github.com/cosmos/interchain-accounts v0.3.1-0.20220812171121-8d8742554e53 h1:MyHNf7gUIcjHEEela8dZF+AVOKF628SDrdlzgrC0c0k= +github.com/cosmos/interchain-accounts v0.3.1-0.20220812171121-8d8742554e53/go.mod h1:vNWr9YxBrI5c74jBwk9ooiUCIDvdOJeF8MQEA/z0IEk= github.com/cosmos/keyring v1.1.7-0.20210622111912-ef00f8ac3d76 h1:DdzS1m6o/pCqeZ8VOAit/gyATedRgjvkVI+UCrLpyuU= github.com/cosmos/keyring v1.1.7-0.20210622111912-ef00f8ac3d76/go.mod h1:0mkLWIoZuQ7uBoospo5Q9zIpqq6rYCPJDSUdeCJvPM8= github.com/cosmos/ledger-cosmos-go v0.11.1 h1:9JIYsGnXP613pb2vPjFeMMjBI5lEDsEaF6oYorTy6J4= @@ -283,32 +323,43 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/daixiang0/gci v0.3.3/go.mod h1:1Xr2bxnQbDxCqqulUOv8qpGqkgRw9RSCGGjEC2LjF8o= -github.com/danieljoos/wincred v1.0.2 h1:zf4bhty2iLuwgjgpraD2E9UbvO+fe54XXGJbOwe23fU= github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= +github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= +github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= +github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= +github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= +github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= +github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= github.com/denisenkom/go-mssqldb v0.12.0/go.mod h1:iiK0YP1ZeepvmBQk/QpLEhhTNJgfzrpArPY/aFvc9yU= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= -github.com/dgraph-io/badger/v2 v2.2007.2 h1:EjjK0KqwaFMlPin1ajhP943VPENHJdEz1KLIegjaI3k= github.com/dgraph-io/badger/v2 v2.2007.2/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= +github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= +github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.0.3 h1:jh22xisGBjrEVnRZ1DVTpBVQm0Xndu8sMl0CWDzSIBI= github.com/dgraph-io/ristretto v0.0.3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= +github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/docker/cli v20.10.14+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= @@ -319,25 +370,35 @@ github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKoh 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/dop251/goja v0.0.0-20200721192441-a695b0cdd498/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= +github.com/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= +github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= 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/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b h1:HBah4D48ypg3J7Np4N+HY/ZR76fx3HEUGxDU6Uk39oQ= github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b/go.mod h1:7BvyPhdbLxMXIYTFPLsyJRFMsKmOZnQmzh6Gb+uquuM= -github.com/dvyukov/go-fuzz v0.0.0-20200318091601-be3528f3a813/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw= +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= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= 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.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= -github.com/ethereum/go-ethereum v1.9.25/go.mod h1:vMkFiYLHI4tgPw4k2j4MHKoovchFE8plZ0M9VMk4/oM= +github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= @@ -345,7 +406,6 @@ github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojt github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= -github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= @@ -355,7 +415,7 @@ github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4 github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/firefart/nonamedreturns v1.0.1/go.mod h1:D3dpIBojGGNh5UfElmwPu73SwDCm+VKhHYqwlNOk2uQ= -github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= +github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= @@ -374,11 +434,16 @@ github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmV github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= github.com/fzipp/gocyclo v0.5.1/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= +github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= +github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= 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.7.0 h1:jGB9xAJQ12AIGNB4HguylppmDK1Am9ppF7XnGXXJuoU= github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= +github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= +github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= +github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= github.com/go-critic/go-critic v0.6.3/go.mod h1:c6b3ZP1MQ7o6lPR7Rv3lEf7pYQUmAcx8ABHgdZCQt/k= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -399,6 +464,8 @@ github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNV github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= 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= @@ -407,8 +474,9 @@ github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+ github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= -github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= +github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -436,19 +504,27 @@ github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188/go.mod h1:vXjM/+wXQnTPR4KqTKDgJukSZ6amVRtWMPEjE6sQoK8= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= 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/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= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= @@ -480,24 +556,27 @@ github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw github.com/golang/protobuf v1.5.2/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.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= github.com/golangci/golangci-lint v1.46.2/go.mod h1:3DkdHnxn9eoTTrpT2gB0TEv8KSziuoqe9FitgQLHvAY= +github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= +github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= +github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -518,9 +597,11 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1 h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1VLQ= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= @@ -548,6 +629,7 @@ github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4Mgqvf github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= @@ -555,6 +637,7 @@ github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pf 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 h1:dS9eYAjhrE2RjmzYw2XAPvcXfmcQLtFEQWn0CR82awk= github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo= @@ -570,8 +653,8 @@ github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= @@ -587,7 +670,7 @@ github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= -github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= +github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= @@ -613,9 +696,13 @@ github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUo github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-getter v1.6.1 h1:NASsgP4q6tL94WH6nJxKWj8As2H/2kop/bB1d8JMyRY= +github.com/hashicorp/go-getter v1.6.1/go.mod h1:IZCrswsZPeWv9IkVnLElzRU/gz/QPi6pZHn4tv6vbwA= github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= @@ -630,19 +717,24 @@ github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9 github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= +github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= 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.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.4.0 h1:aAQzgqIrRKRa7w75CKpbBxYsmUoPjzVm1W59ca1L0J4= github.com/hashicorp/go-version v1.4.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= +github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= @@ -656,16 +748,17 @@ github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/J github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= -github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87 h1:uUjLpLt6bVvZ72SQc/B4dXcPBw4Vgd7soowdRl52qEM= -github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87/go.mod h1:XGsKKeXxeRr95aEOgipvluMPlgjr7dGlk9ZTWOjcUcg= +github.com/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/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= -github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= +github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= +github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= -github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= +github.com/huin/goupnp v1.0.3-0.20220313090229-ca81a64b4204/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -674,14 +767,24 @@ github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJ github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= -github.com/improbable-eng/grpc-web v0.14.1 h1:NrN4PY71A6tAz2sKDvC5JCauENWp0ykG8Oq1H3cpFvw= -github.com/improbable-eng/grpc-web v0.14.1/go.mod h1:zEjGHa8DAlkoOXmswrNvhUGEYQA9UI7DhrGeHR1DMGU= +github.com/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 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= +github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= +github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= +github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= +github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= +github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= +github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= +github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= +github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= +github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= @@ -697,8 +800,11 @@ github.com/jhump/protoreflect v1.12.1-0.20220417024638-438db461d753 h1:uFlcJKZPL github.com/jhump/protoreflect v1.12.1-0.20220417024638-438db461d753/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= +github.com/jmespath/go-jmespath v0.0.0-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= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= @@ -718,28 +824,35 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= -github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= -github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= +github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d h1:Z+RDyXzjKE0i2sTjZ/b1uxiGtPhFy34Ou/Tk0qwN0kM= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/errcheck v1.6.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= +github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= 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.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.15.1 h1:y9FcTHGyrebwfP0ZZqFiaxTaiDnUrGkJkI+f583BL1A= github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= +github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -759,8 +872,11 @@ github.com/kulti/thelper v0.6.2/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dq github.com/kunwardeep/paralleltest v1.0.3/go.mod h1:vLydzomDFpk7yu5UX02RmP0H8QfRPOV/oFhWN85Mjb4= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= +github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= +github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= +github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= @@ -780,27 +896,30 @@ github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= +github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= -github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= 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.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= @@ -812,9 +931,12 @@ github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= +github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= github.com/mgechev/revive v1.2.1/go.mod h1:+Ro3wqY4vakcYNtkBWdZC7dBg1xSB6sp054wWwmeFm0= @@ -834,19 +956,21 @@ github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceT github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= +github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= 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.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= @@ -865,6 +989,7 @@ github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8q github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= +github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -890,8 +1015,7 @@ github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1t github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= -github.com/neilotoole/errgroup v0.1.5/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/neilotoole/errgroup v0.1.6/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nishanths/exhaustive v0.7.11/go.mod h1:gX+MP7DWMKJmNa1HfMozK+u04hQd3na9i0hyqf3/dOI= github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= @@ -905,7 +1029,6 @@ github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn github.com/oklog/ulid/v2 v2.0.2/go.mod h1:mtBL0Qe/0HAx6/a4Z30qxVIAL1eQDweXq5lxOEiwQ68= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -939,6 +1062,7 @@ github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuh github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= @@ -950,7 +1074,6 @@ github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4 github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/ory/dockertest/v3 v3.9.1/go.mod h1:42Ir9hmvaAPm0Mgibk6mBPi7SFvTXxEcnztDYOJ//uM= github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= -github.com/otiai10/copy v1.6.0 h1:IinKAryFFuPONZ7cm6T6E2QX/vcJwSnlaA5lfoaXIiQ= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= @@ -959,8 +1082,8 @@ github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIw github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= -github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= @@ -974,10 +1097,12 @@ github.com/pelletier/go-toml/v2 v2.0.2/go.mod h1:MovirKjgVRESsAvNZlAjtFwV867yGuw github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= +github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= 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= @@ -992,6 +1117,7 @@ github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6J github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -1020,6 +1146,7 @@ github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= @@ -1038,7 +1165,7 @@ github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= @@ -1063,6 +1190,7 @@ github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC github.com/remyoudompheng/go-dbus v0.0.0-20121104212943-b7232d34b1d5/go.mod h1:+u151txRmLpwxBmpYn9z3d1sdJdjRPQpsXuYeY9jNls= github.com/remyoudompheng/go-liblzma v0.0.0-20190506200333-81bf2d431b96/go.mod h1:90HvCY7+oHHUKkbeMCiHt1WuFR2/hPJ9QrljDG+v6ls= github.com/remyoudompheng/go-misc v0.0.0-20190427085024-2d6ac652a50e/go.mod h1:80FQABjoFzZ2M5uEa6FUaJYEmqU2UOKojlFVak1UAwI= +github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= @@ -1070,11 +1198,9 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= -github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs= github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= @@ -1096,9 +1222,12 @@ github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= github.com/securego/gosec/v2 v2.11.0/go.mod h1:SX8bptShuG8reGC0XS09+a4H2BoWSJi+fscA+Pulbpo= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= +github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= +github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= -github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil/v3 v3.22.4/go.mod h1:D01hZJ4pVHPpCTZ3m3T2+wDF2YAGfd+H4ifUguaQzHM= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= @@ -1152,8 +1281,6 @@ github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiu github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= -github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= -github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= @@ -1166,6 +1293,7 @@ github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -1182,8 +1310,9 @@ github.com/subosito/gotenv v1.4.0 h1:yAzM1+SmVcz5R4tXGsNMu1jUl2aOJXoiWUCEwwnGrvs github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo= github.com/sylvia7788/contextcheck v1.0.4/go.mod h1:vuPKJMQ7MQ91ZTqfdyreNKwZjyUg6KO+IebVyQDedZQ= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca h1:Ld/zXl5t4+D69SiV4JoN7kkfvJdOWlPpfxrzxpLMoUk= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s= @@ -1200,13 +1329,17 @@ github.com/tendermint/tm-db v0.6.7/go.mod h1:byQDzFkZV1syXr/ReXS808NxA2xvyuuVgXO github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= -github.com/tidwall/gjson v1.6.7/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI= -github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tidwall/sjson v1.1.4/go.mod h1:wXpKXu8CtDjKAZ+3DrKY5ROCorDFahq8l0tey/Lx1fg= +github.com/tidwall/gjson v1.12.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.14.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/sjson v1.2.4/go.mod h1:098SZ494YoMWPmMO6ct4dcFnqxwj9r/gF0Etp19pSNM= github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= +github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= +github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= @@ -1223,27 +1356,33 @@ 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/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/uudashr/gocognit v1.0.5/go.mod h1:wgYz0mitoKOTysqxTDMOUXg+Jb5SvtihkfmugIZYpEA= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus= +github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/valyala/quicktemplate v1.7.0/go.mod h1:sqKJnoaOF88V07vkO+9FL8fb9uZg/VPSJnLYn+LmLk8= github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= github.com/vektra/mockery/v2 v2.14.0/go.mod h1:bnD1T8tExSgPD1ripLkDbr60JA9VtQeu12P3wgLZd7M= github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= -github.com/vmihailenco/msgpack/v5 v5.1.4/go.mod h1:C5gboKD0TJPqWDTVTtrQNfRbiBwHZGo8UTqP/9/XvLI= -github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= -github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= +github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= +github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= +github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= @@ -1260,8 +1399,9 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -github.com/zondax/hid v0.9.0 h1:eiT3P6vNxAEVxXMw66eZUAAnU2zD33JBkfG/EnfAKl8= github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +github.com/zondax/hid v0.9.1-0.20220302062450-5552068d2266 h1:O9XLFXGkVswDFmH9LaYpqu+r/AAFWqr0DL6V00KEVFg= +github.com/zondax/hid v0.9.1-0.20220302062450-5552068d2266/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= gitlab.com/bosi/decorder v0.2.1/go.mod h1:6C/nhLSbF6qZbYD8bRmISBwc6vcWdNsiIBkRvjJFrH0= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= @@ -1292,6 +1432,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 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= @@ -1308,6 +1449,7 @@ go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9i go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= @@ -1337,9 +1479,11 @@ golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= @@ -1354,7 +1498,6 @@ golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/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= -golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= @@ -1367,6 +1510,7 @@ golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e/go.mod h1:AbB0pIl golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -1380,12 +1524,10 @@ golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPI 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/mobile v0.0.0-20200801112145-973feb4309de/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -1397,8 +1539,8 @@ golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1435,13 +1577,14 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/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= @@ -1484,6 +1627,7 @@ golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 h1:OSnWWcOd/CtWQC2cYSBgbTSJv3ciqd8r54ySIW2y3RE= golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1499,6 +1643,7 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1520,6 +1665,7 @@ golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1535,6 +1681,7 @@ golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1555,10 +1702,9 @@ 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-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1573,9 +1719,12 @@ golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/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= @@ -1589,6 +1738,7 @@ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/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-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1616,10 +1766,12 @@ golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220517195934-5e4e11fc645e/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 h1:aFV+BgZ4svzjfabn8ERpuB4JI4N6/rdy1iusx77G3oU= golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220702020025-31831981b65f h1:xdsejrW/0Wf2diT5CPp3XmKUNbr7Xvw8kYilQ+6qjRY= +golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1641,9 +1793,13 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190228203856-589c23e65e65/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -1681,7 +1837,7 @@ golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1751,9 +1907,13 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df h1:5Pf6pFKu98ODmgnpvkJ3kFUOQGGLIzLIkbzUHp47618= golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= @@ -1797,7 +1957,9 @@ google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.81.0 h1:o8WF5AvfidafWbFjsRyupxyEQJNUWxLZJCK5NXrxZZ8= google.golang.org/api v0.81.0/go.mod h1:FA6Mb/bZxj706H2j+j2d6mHEEaHBmbbWnkfvmorOCko= +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= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1805,6 +1967,7 @@ google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -1815,6 +1978,7 @@ google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= @@ -1823,6 +1987,7 @@ google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvx google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= @@ -1898,8 +2063,49 @@ google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd h1:e0TwkXOdbnH/1x5rc5MZ/VYyiZ4v+RdVfrGMqEwT68I= google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= +google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +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.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +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.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +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.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w= +google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= 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= @@ -1915,16 +2121,19 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= @@ -1959,6 +2168,7 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1966,6 +2176,7 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= honnef.co/go/tools v0.3.1/go.mod h1:vlRD9XErLMGT+mDuofSr0mMMquscM/1nQqtRSsh6m70= mvdan.cc/gofumpt v0.3.1/go.mod h1:w3ymliuxvzVx8DAutBnVyDqYb1Niy/yCJt/lk821YCE= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= @@ -1973,10 +2184,15 @@ mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jC mvdan.cc/unparam v0.0.0-20211214103731-d0ef000c54e5/go.mod h1:b8RRCBm0eeiWR8cfN88xeq2G5SG3VKGO+5UPWi5FSOY= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +pgregory.net/rapid v0.4.7 h1:MTNRktPuv5FNqOO151TM9mDTa+XHcX6ypYeISDVD14g= +pgregory.net/rapid v0.4.7/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/x/wasm/client/cli/genesis_msg.go b/x/wasm/client/cli/genesis_msg.go index f4ba94fbd2..d2a0d639e6 100644 --- a/x/wasm/client/cli/genesis_msg.go +++ b/x/wasm/client/cli/genesis_msg.go @@ -500,16 +500,15 @@ func getActorAddress(cmd *cobra.Command) (sdk.AccAddress, error) { return nil, err } - homeDir := client.GetClientContextFromCmd(cmd).HomeDir + clientCtx := client.GetClientContextFromCmd(cmd) + homeDir := clientCtx.HomeDir // attempt to lookup address from Keybase if no address was provided - kb, err := keyring.New(sdk.KeyringServiceName(), keyringBackend, homeDir, inBuf) - if err != nil { - return nil, err - } + kb, err := keyring.New(sdk.KeyringServiceName(), keyringBackend, homeDir, inBuf, clientCtx.Codec) info, err := kb.Key(actorArg) if err != nil { return nil, fmt.Errorf("failed to get address from Keybase: %w", err) } - return info.GetAddress(), nil + + return info.GetAddress() } diff --git a/x/wasm/client/cli/genesis_msg_test.go b/x/wasm/client/cli/genesis_msg_test.go index 4de9e7e3d5..a446c72556 100644 --- a/x/wasm/client/cli/genesis_msg_test.go +++ b/x/wasm/client/cli/genesis_msg_test.go @@ -709,7 +709,7 @@ func executeCmdWithContext(t *testing.T, homeDir string, cmd *cobra.Command) err flagSet.Set(flags.FlagKeyringBackend, keyring.BackendTest) mockIn := testutil.ApplyMockIODiscardOutErr(cmd) - kb, err := keyring.New(sdk.KeyringServiceName(), keyring.BackendTest, homeDir, mockIn) + kb, err := keyring.New(sdk.KeyringServiceName(), keyring.BackendTest, homeDir, mockIn, clientCtx.Codec) require.NoError(t, err) _, err = kb.NewAccount(defaultTestKeyName, testdata.TestMnemonic, "", sdk.FullFundraiserPath, hd.Secp256k1) require.NoError(t, err) diff --git a/x/wasm/client/cli/gov_tx.go b/x/wasm/client/cli/gov_tx.go index 15a3ae6f25..b226089e0d 100644 --- a/x/wasm/client/cli/gov_tx.go +++ b/x/wasm/client/cli/gov_tx.go @@ -10,7 +10,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/version" "github.com/cosmos/cosmos-sdk/x/gov/client/cli" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/pkg/errors" "github.com/spf13/cobra" diff --git a/x/wasm/client/proposal_handler.go b/x/wasm/client/proposal_handler.go index 6d4735180e..fc1c45ef8b 100644 --- a/x/wasm/client/proposal_handler.go +++ b/x/wasm/client/proposal_handler.go @@ -4,19 +4,18 @@ import ( govclient "github.com/cosmos/cosmos-sdk/x/gov/client" "github.com/CosmWasm/wasmd/x/wasm/client/cli" - "github.com/CosmWasm/wasmd/x/wasm/client/rest" ) // ProposalHandlers define the wasm cli proposal types and rest handler. var ProposalHandlers = []govclient.ProposalHandler{ - govclient.NewProposalHandler(cli.ProposalStoreCodeCmd, rest.StoreCodeProposalHandler), - govclient.NewProposalHandler(cli.ProposalInstantiateContractCmd, rest.InstantiateProposalHandler), - govclient.NewProposalHandler(cli.ProposalMigrateContractCmd, rest.MigrateProposalHandler), - govclient.NewProposalHandler(cli.ProposalExecuteContractCmd, rest.ExecuteProposalHandler), - govclient.NewProposalHandler(cli.ProposalSudoContractCmd, rest.SudoProposalHandler), - govclient.NewProposalHandler(cli.ProposalUpdateContractAdminCmd, rest.UpdateContractAdminProposalHandler), - govclient.NewProposalHandler(cli.ProposalClearContractAdminCmd, rest.ClearContractAdminProposalHandler), - govclient.NewProposalHandler(cli.ProposalPinCodesCmd, rest.PinCodeProposalHandler), - govclient.NewProposalHandler(cli.ProposalUnpinCodesCmd, rest.UnpinCodeProposalHandler), - govclient.NewProposalHandler(cli.ProposalUpdateInstantiateConfigCmd, rest.UpdateInstantiateConfigProposalHandler), + govclient.NewProposalHandler(cli.ProposalStoreCodeCmd), + govclient.NewProposalHandler(cli.ProposalInstantiateContractCmd), + govclient.NewProposalHandler(cli.ProposalMigrateContractCmd), + govclient.NewProposalHandler(cli.ProposalExecuteContractCmd), + govclient.NewProposalHandler(cli.ProposalSudoContractCmd), + govclient.NewProposalHandler(cli.ProposalUpdateContractAdminCmd), + govclient.NewProposalHandler(cli.ProposalClearContractAdminCmd), + govclient.NewProposalHandler(cli.ProposalPinCodesCmd), + govclient.NewProposalHandler(cli.ProposalUnpinCodesCmd), + govclient.NewProposalHandler(cli.ProposalUpdateInstantiateConfigCmd), } diff --git a/x/wasm/client/proposal_handler_test.go b/x/wasm/client/proposal_handler_test.go deleted file mode 100644 index 3e82c62e07..0000000000 --- a/x/wasm/client/proposal_handler_test.go +++ /dev/null @@ -1,298 +0,0 @@ -package client - -import ( - "bytes" - "encoding/json" - "fmt" - "net/http" - "net/http/httptest" - "os" - "testing" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - "github.com/gorilla/mux" - "github.com/stretchr/testify/require" - - "github.com/CosmWasm/wasmd/x/wasm/keeper" -) - -func TestGovRestHandlers(t *testing.T) { - type dict map[string]interface{} - var ( - anyAddress = "cosmos100dejzacpanrldpjjwksjm62shqhyss44jf5xz" - aBaseReq = dict{ - "from": anyAddress, - "memo": "rest test", - "chain_id": "testing", - "account_number": "1", - "sequence": "1", - "fees": []dict{{"denom": "ustake", "amount": "1000000"}}, - } - ) - encodingConfig := keeper.MakeEncodingConfig(t) - clientCtx := client.Context{}. - WithCodec(encodingConfig.Marshaler). - WithTxConfig(encodingConfig.TxConfig). - WithLegacyAmino(encodingConfig.Amino). - WithInput(os.Stdin). - WithAccountRetriever(authtypes.AccountRetriever{}). - WithBroadcastMode(flags.BroadcastBlock). - WithChainID("testing") - - // router setup as in gov/client/rest/tx.go - propSubRtr := mux.NewRouter().PathPrefix("/gov/proposals").Subrouter() - for _, ph := range ProposalHandlers { - r := ph.RESTHandler(clientCtx) - propSubRtr.HandleFunc(fmt.Sprintf("/%s", r.SubRoute), r.Handler).Methods("POST") - } - - specs := map[string]struct { - srcBody dict - srcPath string - expCode int - }{ - "store-code": { - srcPath: "/gov/proposals/wasm_store_code", - srcBody: dict{ - "title": "Test Proposal", - "description": "My proposal", - "type": "store-code", - "run_as": "cosmos100dejzacpanrldpjjwksjm62shqhyss44jf5xz", - "wasm_byte_code": []byte("valid wasm byte code"), - "source": "https://example.com/", - "builder": "my/builder:tag", - "instantiate_permission": dict{ - "permission": "OnlyAddress", - "address": "cosmos1ve557a5g9yw2g2z57js3pdmcvd5my6g8ze20np", - }, - "deposit": []dict{{"denom": "ustake", "amount": "10"}}, - "proposer": "cosmos1ve557a5g9yw2g2z57js3pdmcvd5my6g8ze20np", - "base_req": aBaseReq, - }, - expCode: http.StatusOK, - }, - "store-code without permission": { - srcPath: "/gov/proposals/wasm_store_code", - srcBody: dict{ - "title": "Test Proposal", - "description": "My proposal", - "type": "store-code", - "run_as": "cosmos100dejzacpanrldpjjwksjm62shqhyss44jf5xz", - "wasm_byte_code": []byte("valid wasm byte code"), - "source": "https://example.com/", - "builder": "my/builder:tag", - "deposit": []dict{{"denom": "ustake", "amount": "10"}}, - "proposer": "cosmos1ve557a5g9yw2g2z57js3pdmcvd5my6g8ze20np", - "base_req": aBaseReq, - }, - expCode: http.StatusOK, - }, - "store-code invalid permission": { - srcPath: "/gov/proposals/wasm_store_code", - srcBody: dict{ - "title": "Test Proposal", - "description": "My proposal", - "type": "store-code", - "run_as": "cosmos100dejzacpanrldpjjwksjm62shqhyss44jf5xz", - "wasm_byte_code": []byte("valid wasm byte code"), - "source": "https://example.com/", - "builder": "my/builder:tag", - "instantiate_permission": dict{ - "permission": "Nobody", - "address": "cosmos1ve557a5g9yw2g2z57js3pdmcvd5my6g8ze20np", - }, - "deposit": []dict{{"denom": "ustake", "amount": "10"}}, - "proposer": "cosmos1ve557a5g9yw2g2z57js3pdmcvd5my6g8ze20np", - "base_req": aBaseReq, - }, - expCode: http.StatusBadRequest, - }, - "store-code with incomplete proposal data: blank title": { - srcPath: "/gov/proposals/wasm_store_code", - srcBody: dict{ - "title": "", - "description": "My proposal", - "type": "store-code", - "run_as": "cosmos100dejzacpanrldpjjwksjm62shqhyss44jf5xz", - "wasm_byte_code": []byte("valid wasm byte code"), - "source": "https://example.com/", - "builder": "my/builder:tag", - "instantiate_permission": dict{ - "permission": "OnlyAddress", - "address": "cosmos1ve557a5g9yw2g2z57js3pdmcvd5my6g8ze20np", - }, - "deposit": []dict{{"denom": "ustake", "amount": "10"}}, - "proposer": "cosmos1ve557a5g9yw2g2z57js3pdmcvd5my6g8ze20np", - "base_req": aBaseReq, - }, - expCode: http.StatusBadRequest, - }, - "store-code with incomplete content data: no wasm_byte_code": { - srcPath: "/gov/proposals/wasm_store_code", - srcBody: dict{ - "title": "Test Proposal", - "description": "My proposal", - "type": "store-code", - "run_as": "cosmos100dejzacpanrldpjjwksjm62shqhyss44jf5xz", - "wasm_byte_code": "", - "source": "https://example.com/", - "builder": "my/builder:tag", - "instantiate_permission": dict{ - "permission": "OnlyAddress", - "address": "cosmos1ve557a5g9yw2g2z57js3pdmcvd5my6g8ze20np", - }, - "deposit": []dict{{"denom": "ustake", "amount": "10"}}, - "proposer": "cosmos1ve557a5g9yw2g2z57js3pdmcvd5my6g8ze20np", - "base_req": aBaseReq, - }, - expCode: http.StatusBadRequest, - }, - "instantiate contract": { - srcPath: "/gov/proposals/wasm_instantiate", - srcBody: dict{ - "title": "Test Proposal", - "description": "My proposal", - "type": "instantiate", - "run_as": "cosmos100dejzacpanrldpjjwksjm62shqhyss44jf5xz", - "admin": "cosmos100dejzacpanrldpjjwksjm62shqhyss44jf5xz", - "code_id": "1", - "label": "https://example.com/", - "msg": dict{"recipient": "cosmos100dejzacpanrldpjjwksjm62shqhyss44jf5xz"}, - "funds": []dict{{"denom": "ustake", "amount": "100"}}, - "deposit": []dict{{"denom": "ustake", "amount": "10"}}, - "proposer": "cosmos1ve557a5g9yw2g2z57js3pdmcvd5my6g8ze20np", - "base_req": aBaseReq, - }, - expCode: http.StatusOK, - }, - "migrate contract": { - srcPath: "/gov/proposals/wasm_migrate", - srcBody: dict{ - "title": "Test Proposal", - "description": "My proposal", - "type": "migrate", - "contract": "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr", - "code_id": "1", - "msg": dict{"foo": "bar"}, - "run_as": "cosmos100dejzacpanrldpjjwksjm62shqhyss44jf5xz", - "deposit": []dict{{"denom": "ustake", "amount": "10"}}, - "proposer": "cosmos1ve557a5g9yw2g2z57js3pdmcvd5my6g8ze20np", - "base_req": aBaseReq, - }, - expCode: http.StatusOK, - }, - "execute contract": { - srcPath: "/gov/proposals/wasm_execute", - srcBody: dict{ - "title": "Test Proposal", - "description": "My proposal", - "type": "migrate", - "contract": "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr", - "msg": dict{"foo": "bar"}, - "run_as": "cosmos100dejzacpanrldpjjwksjm62shqhyss44jf5xz", - "deposit": []dict{{"denom": "ustake", "amount": "10"}}, - "proposer": "cosmos1ve557a5g9yw2g2z57js3pdmcvd5my6g8ze20np", - "base_req": aBaseReq, - }, - expCode: http.StatusOK, - }, - "execute contract fails with no run_as": { - srcPath: "/gov/proposals/wasm_execute", - srcBody: dict{ - "title": "Test Proposal", - "description": "My proposal", - "type": "migrate", - "contract": "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr", - "msg": dict{"foo": "bar"}, - "deposit": []dict{{"denom": "ustake", "amount": "10"}}, - "proposer": "cosmos1ve557a5g9yw2g2z57js3pdmcvd5my6g8ze20np", - "base_req": aBaseReq, - }, - expCode: http.StatusBadRequest, - }, - "execute contract fails with no message": { - srcPath: "/gov/proposals/wasm_execute", - srcBody: dict{ - "title": "Test Proposal", - "description": "My proposal", - "type": "migrate", - "contract": "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr", - "run_as": "cosmos100dejzacpanrldpjjwksjm62shqhyss44jf5xz", - "deposit": []dict{{"denom": "ustake", "amount": "10"}}, - "proposer": "cosmos1ve557a5g9yw2g2z57js3pdmcvd5my6g8ze20np", - "base_req": aBaseReq, - }, - expCode: http.StatusBadRequest, - }, - "sudo contract": { - srcPath: "/gov/proposals/wasm_sudo", - srcBody: dict{ - "title": "Test Proposal", - "description": "My proposal", - "type": "migrate", - "contract": "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr", - "msg": dict{"foo": "bar"}, - "deposit": []dict{{"denom": "ustake", "amount": "10"}}, - "proposer": "cosmos1ve557a5g9yw2g2z57js3pdmcvd5my6g8ze20np", - "base_req": aBaseReq, - }, - expCode: http.StatusOK, - }, - "sudo contract fails with no message": { - srcPath: "/gov/proposals/wasm_sudo", - srcBody: dict{ - "title": "Test Proposal", - "description": "My proposal", - "type": "migrate", - "contract": "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr", - "deposit": []dict{{"denom": "ustake", "amount": "10"}}, - "proposer": "cosmos1ve557a5g9yw2g2z57js3pdmcvd5my6g8ze20np", - "base_req": aBaseReq, - }, - expCode: http.StatusBadRequest, - }, - "update contract admin": { - srcPath: "/gov/proposals/wasm_update_admin", - srcBody: dict{ - "title": "Test Proposal", - "description": "My proposal", - "type": "migrate", - "contract": "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr", - "new_admin": "cosmos100dejzacpanrldpjjwksjm62shqhyss44jf5xz", - "deposit": []dict{{"denom": "ustake", "amount": "10"}}, - "proposer": "cosmos1ve557a5g9yw2g2z57js3pdmcvd5my6g8ze20np", - "base_req": aBaseReq, - }, - expCode: http.StatusOK, - }, - "clear contract admin": { - srcPath: "/gov/proposals/wasm_clear_admin", - srcBody: dict{ - "title": "Test Proposal", - "description": "My proposal", - "type": "migrate", - "contract": "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr", - "deposit": []dict{{"denom": "ustake", "amount": "10"}}, - "proposer": "cosmos1ve557a5g9yw2g2z57js3pdmcvd5my6g8ze20np", - "base_req": aBaseReq, - }, - expCode: http.StatusOK, - }, - } - for msg, spec := range specs { - t.Run(msg, func(t *testing.T) { - src, err := json.Marshal(spec.srcBody) - require.NoError(t, err) - - // when - r := httptest.NewRequest("POST", spec.srcPath, bytes.NewReader(src)) - w := httptest.NewRecorder() - propSubRtr.ServeHTTP(w, r) - - // then - require.Equal(t, spec.expCode, w.Code, w.Body.String()) - }) - } -} diff --git a/x/wasm/client/rest/gov.go b/x/wasm/client/rest/gov.go deleted file mode 100644 index 3ba2b8f088..0000000000 --- a/x/wasm/client/rest/gov.go +++ /dev/null @@ -1,523 +0,0 @@ -package rest - -import ( - "encoding/json" - "net/http" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/tx" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/rest" - govrest "github.com/cosmos/cosmos-sdk/x/gov/client/rest" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - - "github.com/CosmWasm/wasmd/x/wasm/types" -) - -type StoreCodeProposalJSONReq struct { - BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"` - - Title string `json:"title" yaml:"title"` - Description string `json:"description" yaml:"description"` - Proposer string `json:"proposer" yaml:"proposer"` - Deposit sdk.Coins `json:"deposit" yaml:"deposit"` - - RunAs string `json:"run_as" yaml:"run_as"` - // WASMByteCode can be raw or gzip compressed - WASMByteCode []byte `json:"wasm_byte_code" yaml:"wasm_byte_code"` - // InstantiatePermission to apply on contract creation, optional - InstantiatePermission *types.AccessConfig `json:"instantiate_permission" yaml:"instantiate_permission"` -} - -func (s StoreCodeProposalJSONReq) Content() govtypes.Content { - return &types.StoreCodeProposal{ - Title: s.Title, - Description: s.Description, - RunAs: s.RunAs, - WASMByteCode: s.WASMByteCode, - InstantiatePermission: s.InstantiatePermission, - } -} - -func (s StoreCodeProposalJSONReq) GetProposer() string { - return s.Proposer -} - -func (s StoreCodeProposalJSONReq) GetDeposit() sdk.Coins { - return s.Deposit -} - -func (s StoreCodeProposalJSONReq) GetBaseReq() rest.BaseReq { - return s.BaseReq -} - -func StoreCodeProposalHandler(cliCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "wasm_store_code", - Handler: func(w http.ResponseWriter, r *http.Request) { - var req StoreCodeProposalJSONReq - if !rest.ReadRESTReq(w, r, cliCtx.LegacyAmino, &req) { - return - } - toStdTxResponse(cliCtx, w, req) - }, - } -} - -type InstantiateProposalJSONReq struct { - BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"` - - Title string `json:"title" yaml:"title"` - Description string `json:"description" yaml:"description"` - - Proposer string `json:"proposer" yaml:"proposer"` - Deposit sdk.Coins `json:"deposit" yaml:"deposit"` - - RunAs string `json:"run_as" yaml:"run_as"` - // Admin is an optional address that can execute migrations - Admin string `json:"admin,omitempty" yaml:"admin"` - Code uint64 `json:"code_id" yaml:"code_id"` - Label string `json:"label" yaml:"label"` - Msg json.RawMessage `json:"msg" yaml:"msg"` - Funds sdk.Coins `json:"funds" yaml:"funds"` -} - -func (s InstantiateProposalJSONReq) Content() govtypes.Content { - return &types.InstantiateContractProposal{ - Title: s.Title, - Description: s.Description, - RunAs: s.RunAs, - Admin: s.Admin, - CodeID: s.Code, - Label: s.Label, - Msg: types.RawContractMessage(s.Msg), - Funds: s.Funds, - } -} - -func (s InstantiateProposalJSONReq) GetProposer() string { - return s.Proposer -} - -func (s InstantiateProposalJSONReq) GetDeposit() sdk.Coins { - return s.Deposit -} - -func (s InstantiateProposalJSONReq) GetBaseReq() rest.BaseReq { - return s.BaseReq -} - -func InstantiateProposalHandler(cliCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "wasm_instantiate", - Handler: func(w http.ResponseWriter, r *http.Request) { - var req InstantiateProposalJSONReq - if !rest.ReadRESTReq(w, r, cliCtx.LegacyAmino, &req) { - return - } - toStdTxResponse(cliCtx, w, req) - }, - } -} - -type MigrateProposalJSONReq struct { - BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"` - - Title string `json:"title" yaml:"title"` - Description string `json:"description" yaml:"description"` - - Proposer string `json:"proposer" yaml:"proposer"` - Deposit sdk.Coins `json:"deposit" yaml:"deposit"` - - Contract string `json:"contract" yaml:"contract"` - Code uint64 `json:"code_id" yaml:"code_id"` - Msg json.RawMessage `json:"msg" yaml:"msg"` -} - -func (s MigrateProposalJSONReq) Content() govtypes.Content { - return &types.MigrateContractProposal{ - Title: s.Title, - Description: s.Description, - Contract: s.Contract, - CodeID: s.Code, - Msg: types.RawContractMessage(s.Msg), - } -} - -func (s MigrateProposalJSONReq) GetProposer() string { - return s.Proposer -} - -func (s MigrateProposalJSONReq) GetDeposit() sdk.Coins { - return s.Deposit -} - -func (s MigrateProposalJSONReq) GetBaseReq() rest.BaseReq { - return s.BaseReq -} - -func MigrateProposalHandler(cliCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "wasm_migrate", - Handler: func(w http.ResponseWriter, r *http.Request) { - var req MigrateProposalJSONReq - if !rest.ReadRESTReq(w, r, cliCtx.LegacyAmino, &req) { - return - } - toStdTxResponse(cliCtx, w, req) - }, - } -} - -type ExecuteProposalJSONReq struct { - BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"` - - Title string `json:"title" yaml:"title"` - Description string `json:"description" yaml:"description"` - - Proposer string `json:"proposer" yaml:"proposer"` - Deposit sdk.Coins `json:"deposit" yaml:"deposit"` - - Contract string `json:"contract" yaml:"contract"` - Msg json.RawMessage `json:"msg" yaml:"msg"` - // RunAs is the role that is passed to the contract's environment - RunAs string `json:"run_as" yaml:"run_as"` - Funds sdk.Coins `json:"funds" yaml:"funds"` -} - -func (s ExecuteProposalJSONReq) Content() govtypes.Content { - return &types.ExecuteContractProposal{ - Title: s.Title, - Description: s.Description, - Contract: s.Contract, - Msg: types.RawContractMessage(s.Msg), - RunAs: s.RunAs, - Funds: s.Funds, - } -} - -func (s ExecuteProposalJSONReq) GetProposer() string { - return s.Proposer -} - -func (s ExecuteProposalJSONReq) GetDeposit() sdk.Coins { - return s.Deposit -} - -func (s ExecuteProposalJSONReq) GetBaseReq() rest.BaseReq { - return s.BaseReq -} - -func ExecuteProposalHandler(cliCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "wasm_execute", - Handler: func(w http.ResponseWriter, r *http.Request) { - var req ExecuteProposalJSONReq - if !rest.ReadRESTReq(w, r, cliCtx.LegacyAmino, &req) { - return - } - toStdTxResponse(cliCtx, w, req) - }, - } -} - -type SudoProposalJSONReq struct { - BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"` - - Title string `json:"title" yaml:"title"` - Description string `json:"description" yaml:"description"` - - Proposer string `json:"proposer" yaml:"proposer"` - Deposit sdk.Coins `json:"deposit" yaml:"deposit"` - - Contract string `json:"contract" yaml:"contract"` - Msg json.RawMessage `json:"msg" yaml:"msg"` -} - -func (s SudoProposalJSONReq) Content() govtypes.Content { - return &types.SudoContractProposal{ - Title: s.Title, - Description: s.Description, - Contract: s.Contract, - Msg: types.RawContractMessage(s.Msg), - } -} - -func (s SudoProposalJSONReq) GetProposer() string { - return s.Proposer -} - -func (s SudoProposalJSONReq) GetDeposit() sdk.Coins { - return s.Deposit -} - -func (s SudoProposalJSONReq) GetBaseReq() rest.BaseReq { - return s.BaseReq -} - -func SudoProposalHandler(cliCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "wasm_sudo", - Handler: func(w http.ResponseWriter, r *http.Request) { - var req SudoProposalJSONReq - if !rest.ReadRESTReq(w, r, cliCtx.LegacyAmino, &req) { - return - } - toStdTxResponse(cliCtx, w, req) - }, - } -} - -type UpdateAdminJSONReq struct { - BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"` - - Title string `json:"title" yaml:"title"` - Description string `json:"description" yaml:"description"` - - Proposer string `json:"proposer" yaml:"proposer"` - Deposit sdk.Coins `json:"deposit" yaml:"deposit"` - - NewAdmin string `json:"new_admin" yaml:"new_admin"` - Contract string `json:"contract" yaml:"contract"` -} - -func (s UpdateAdminJSONReq) Content() govtypes.Content { - return &types.UpdateAdminProposal{ - Title: s.Title, - Description: s.Description, - Contract: s.Contract, - NewAdmin: s.NewAdmin, - } -} - -func (s UpdateAdminJSONReq) GetProposer() string { - return s.Proposer -} - -func (s UpdateAdminJSONReq) GetDeposit() sdk.Coins { - return s.Deposit -} - -func (s UpdateAdminJSONReq) GetBaseReq() rest.BaseReq { - return s.BaseReq -} - -func UpdateContractAdminProposalHandler(cliCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "wasm_update_admin", - Handler: func(w http.ResponseWriter, r *http.Request) { - var req UpdateAdminJSONReq - if !rest.ReadRESTReq(w, r, cliCtx.LegacyAmino, &req) { - return - } - toStdTxResponse(cliCtx, w, req) - }, - } -} - -type ClearAdminJSONReq struct { - BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"` - - Title string `json:"title" yaml:"title"` - Description string `json:"description" yaml:"description"` - - Proposer string `json:"proposer" yaml:"proposer"` - Deposit sdk.Coins `json:"deposit" yaml:"deposit"` - - Contract string `json:"contract" yaml:"contract"` -} - -func (s ClearAdminJSONReq) Content() govtypes.Content { - return &types.ClearAdminProposal{ - Title: s.Title, - Description: s.Description, - Contract: s.Contract, - } -} - -func (s ClearAdminJSONReq) GetProposer() string { - return s.Proposer -} - -func (s ClearAdminJSONReq) GetDeposit() sdk.Coins { - return s.Deposit -} - -func (s ClearAdminJSONReq) GetBaseReq() rest.BaseReq { - return s.BaseReq -} - -func ClearContractAdminProposalHandler(cliCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "wasm_clear_admin", - Handler: func(w http.ResponseWriter, r *http.Request) { - var req ClearAdminJSONReq - if !rest.ReadRESTReq(w, r, cliCtx.LegacyAmino, &req) { - return - } - toStdTxResponse(cliCtx, w, req) - }, - } -} - -type PinCodeJSONReq struct { - BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"` - - Title string `json:"title" yaml:"title"` - Description string `json:"description" yaml:"description"` - - Proposer string `json:"proposer" yaml:"proposer"` - Deposit sdk.Coins `json:"deposit" yaml:"deposit"` - - CodeIDs []uint64 `json:"code_ids" yaml:"code_ids"` -} - -func (s PinCodeJSONReq) Content() govtypes.Content { - return &types.PinCodesProposal{ - Title: s.Title, - Description: s.Description, - CodeIDs: s.CodeIDs, - } -} - -func (s PinCodeJSONReq) GetProposer() string { - return s.Proposer -} - -func (s PinCodeJSONReq) GetDeposit() sdk.Coins { - return s.Deposit -} - -func (s PinCodeJSONReq) GetBaseReq() rest.BaseReq { - return s.BaseReq -} - -func PinCodeProposalHandler(cliCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "pin_code", - Handler: func(w http.ResponseWriter, r *http.Request) { - var req PinCodeJSONReq - if !rest.ReadRESTReq(w, r, cliCtx.LegacyAmino, &req) { - return - } - toStdTxResponse(cliCtx, w, req) - }, - } -} - -type UnpinCodeJSONReq struct { - BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"` - - Title string `json:"title" yaml:"title"` - Description string `json:"description" yaml:"description"` - - Proposer string `json:"proposer" yaml:"proposer"` - Deposit sdk.Coins `json:"deposit" yaml:"deposit"` - - CodeIDs []uint64 `json:"code_ids" yaml:"code_ids"` -} - -func (s UnpinCodeJSONReq) Content() govtypes.Content { - return &types.UnpinCodesProposal{ - Title: s.Title, - Description: s.Description, - CodeIDs: s.CodeIDs, - } -} - -func (s UnpinCodeJSONReq) GetProposer() string { - return s.Proposer -} - -func (s UnpinCodeJSONReq) GetDeposit() sdk.Coins { - return s.Deposit -} - -func (s UnpinCodeJSONReq) GetBaseReq() rest.BaseReq { - return s.BaseReq -} - -func UnpinCodeProposalHandler(cliCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "unpin_code", - Handler: func(w http.ResponseWriter, r *http.Request) { - var req UnpinCodeJSONReq - if !rest.ReadRESTReq(w, r, cliCtx.LegacyAmino, &req) { - return - } - toStdTxResponse(cliCtx, w, req) - }, - } -} - -type UpdateInstantiateConfigProposalJSONReq struct { - BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"` - - Title string `json:"title" yaml:"title"` - Description string `json:"description" yaml:"description"` - Proposer string `json:"proposer" yaml:"proposer"` - Deposit sdk.Coins `json:"deposit" yaml:"deposit"` - AccessConfigUpdates []types.AccessConfigUpdate `json:"access_config_updates" yaml:"access_config_updates"` -} - -func (s UpdateInstantiateConfigProposalJSONReq) Content() govtypes.Content { - return &types.UpdateInstantiateConfigProposal{ - Title: s.Title, - Description: s.Description, - AccessConfigUpdates: s.AccessConfigUpdates, - } -} - -func (s UpdateInstantiateConfigProposalJSONReq) GetProposer() string { - return s.Proposer -} - -func (s UpdateInstantiateConfigProposalJSONReq) GetDeposit() sdk.Coins { - return s.Deposit -} - -func (s UpdateInstantiateConfigProposalJSONReq) GetBaseReq() rest.BaseReq { - return s.BaseReq -} - -func UpdateInstantiateConfigProposalHandler(cliCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "update_instantiate_config", - Handler: func(w http.ResponseWriter, r *http.Request) { - var req UpdateInstantiateConfigProposalJSONReq - if !rest.ReadRESTReq(w, r, cliCtx.LegacyAmino, &req) { - return - } - toStdTxResponse(cliCtx, w, req) - }, - } -} - -type wasmProposalData interface { - Content() govtypes.Content - GetProposer() string - GetDeposit() sdk.Coins - GetBaseReq() rest.BaseReq -} - -func toStdTxResponse(cliCtx client.Context, w http.ResponseWriter, data wasmProposalData) { - proposerAddr, err := sdk.AccAddressFromBech32(data.GetProposer()) - if err != nil { - rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) - return - } - msg, err := govtypes.NewMsgSubmitProposal(data.Content(), data.GetDeposit(), proposerAddr) - if err != nil { - rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) - return - } - if err := msg.ValidateBasic(); err != nil { - rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) - return - } - baseReq := data.GetBaseReq().Sanitize() - if !baseReq.ValidateBasic(w) { - return - } - tx.WriteGeneratedTxResponse(cliCtx, w, baseReq, msg) -} diff --git a/x/wasm/client/rest/new_tx.go b/x/wasm/client/rest/new_tx.go deleted file mode 100644 index b261fd7fb7..0000000000 --- a/x/wasm/client/rest/new_tx.go +++ /dev/null @@ -1,86 +0,0 @@ -package rest - -import ( - "net/http" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/cosmos/cosmos-sdk/types/rest" - "github.com/gorilla/mux" - - "github.com/CosmWasm/wasmd/x/wasm/types" -) - -func registerNewTxRoutes(cliCtx client.Context, r *mux.Router) { - r.HandleFunc("/wasm/contract/{contractAddr}/admin", setContractAdminHandlerFn(cliCtx)).Methods("PUT") - r.HandleFunc("/wasm/contract/{contractAddr}/code", migrateContractHandlerFn(cliCtx)).Methods("PUT") -} - -type migrateContractReq struct { - BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"` - Admin string `json:"admin,omitempty" yaml:"admin"` - CodeID uint64 `json:"code_id" yaml:"code_id"` - Msg []byte `json:"msg,omitempty" yaml:"msg"` -} - -type updateContractAdministrateReq struct { - BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"` - Admin string `json:"admin,omitempty" yaml:"admin"` -} - -func setContractAdminHandlerFn(cliCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req updateContractAdministrateReq - if !rest.ReadRESTReq(w, r, cliCtx.LegacyAmino, &req) { - return - } - vars := mux.Vars(r) - contractAddr := vars["contractAddr"] - - req.BaseReq = req.BaseReq.Sanitize() - if !req.BaseReq.ValidateBasic(w) { - return - } - - msg := &types.MsgUpdateAdmin{ - Sender: req.BaseReq.From, - NewAdmin: req.Admin, - Contract: contractAddr, - } - if err := msg.ValidateBasic(); err != nil { - rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) - return - } - - tx.WriteGeneratedTxResponse(cliCtx, w, req.BaseReq, msg) - } -} - -func migrateContractHandlerFn(cliCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req migrateContractReq - if !rest.ReadRESTReq(w, r, cliCtx.LegacyAmino, &req) { - return - } - vars := mux.Vars(r) - contractAddr := vars["contractAddr"] - - req.BaseReq = req.BaseReq.Sanitize() - if !req.BaseReq.ValidateBasic(w) { - return - } - - msg := &types.MsgMigrateContract{ - Sender: req.BaseReq.From, - Contract: contractAddr, - CodeID: req.CodeID, - Msg: req.Msg, - } - if err := msg.ValidateBasic(); err != nil { - rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) - return - } - - tx.WriteGeneratedTxResponse(cliCtx, w, req.BaseReq, msg) - } -} diff --git a/x/wasm/client/rest/query.go b/x/wasm/client/rest/query.go deleted file mode 100644 index d497d23900..0000000000 --- a/x/wasm/client/rest/query.go +++ /dev/null @@ -1,270 +0,0 @@ -package rest - -import ( - "encoding/base64" - "encoding/hex" - "encoding/json" - "fmt" - "net/http" - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/rest" - "github.com/gorilla/mux" - - "github.com/CosmWasm/wasmd/x/wasm/keeper" - "github.com/CosmWasm/wasmd/x/wasm/types" -) - -func registerQueryRoutes(cliCtx client.Context, r *mux.Router) { - r.HandleFunc("/wasm/code", listCodesHandlerFn(cliCtx)).Methods("GET") - r.HandleFunc("/wasm/code/{codeID}", queryCodeHandlerFn(cliCtx)).Methods("GET") - r.HandleFunc("/wasm/code/{codeID}/contracts", listContractsByCodeHandlerFn(cliCtx)).Methods("GET") - r.HandleFunc("/wasm/contract/{contractAddr}", queryContractHandlerFn(cliCtx)).Methods("GET") - r.HandleFunc("/wasm/contract/{contractAddr}/state", queryContractStateAllHandlerFn(cliCtx)).Methods("GET") - r.HandleFunc("/wasm/contract/{contractAddr}/history", queryContractHistoryFn(cliCtx)).Methods("GET") - r.HandleFunc("/wasm/contract/{contractAddr}/smart/{query}", queryContractStateSmartHandlerFn(cliCtx)).Queries("encoding", "{encoding}").Methods("GET") - r.HandleFunc("/wasm/contract/{contractAddr}/raw/{key}", queryContractStateRawHandlerFn(cliCtx)).Queries("encoding", "{encoding}").Methods("GET") -} - -func listCodesHandlerFn(cliCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - cliCtx, ok := rest.ParseQueryHeightOrReturnBadRequest(w, cliCtx, r) - if !ok { - return - } - - route := fmt.Sprintf("custom/%s/%s", types.QuerierRoute, keeper.QueryListCode) - res, height, err := cliCtx.Query(route) - if err != nil { - rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) - return - } - cliCtx = cliCtx.WithHeight(height) - rest.PostProcessResponse(w, cliCtx, json.RawMessage(res)) - } -} - -func queryCodeHandlerFn(cliCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - codeID, err := strconv.ParseUint(mux.Vars(r)["codeID"], 10, 64) - if err != nil { - rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) - return - } - - cliCtx, ok := rest.ParseQueryHeightOrReturnBadRequest(w, cliCtx, r) - if !ok { - return - } - - route := fmt.Sprintf("custom/%s/%s/%d", types.QuerierRoute, keeper.QueryGetCode, codeID) - res, height, err := cliCtx.Query(route) - if err != nil { - rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) - return - } - if len(res) == 0 { - rest.WriteErrorResponse(w, http.StatusNotFound, "contract not found") - return - } - - cliCtx = cliCtx.WithHeight(height) - rest.PostProcessResponse(w, cliCtx, json.RawMessage(res)) - } -} - -func listContractsByCodeHandlerFn(cliCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - codeID, err := strconv.ParseUint(mux.Vars(r)["codeID"], 10, 64) - if err != nil { - rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) - return - } - cliCtx, ok := rest.ParseQueryHeightOrReturnBadRequest(w, cliCtx, r) - if !ok { - return - } - - route := fmt.Sprintf("custom/%s/%s/%d", types.QuerierRoute, keeper.QueryListContractByCode, codeID) - res, height, err := cliCtx.Query(route) - if err != nil { - rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) - return - } - - cliCtx = cliCtx.WithHeight(height) - rest.PostProcessResponse(w, cliCtx, json.RawMessage(res)) - } -} - -func queryContractHandlerFn(cliCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - addr, err := sdk.AccAddressFromBech32(mux.Vars(r)["contractAddr"]) - if err != nil { - rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) - return - } - cliCtx, ok := rest.ParseQueryHeightOrReturnBadRequest(w, cliCtx, r) - if !ok { - return - } - - route := fmt.Sprintf("custom/%s/%s/%s", types.QuerierRoute, keeper.QueryGetContract, addr.String()) - res, height, err := cliCtx.Query(route) - if err != nil { - rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) - return - } - - cliCtx = cliCtx.WithHeight(height) - rest.PostProcessResponse(w, cliCtx, json.RawMessage(res)) - } -} - -func queryContractStateAllHandlerFn(cliCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - addr, err := sdk.AccAddressFromBech32(mux.Vars(r)["contractAddr"]) - if err != nil { - rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) - return - } - cliCtx, ok := rest.ParseQueryHeightOrReturnBadRequest(w, cliCtx, r) - if !ok { - return - } - - route := fmt.Sprintf("custom/%s/%s/%s/%s", types.QuerierRoute, keeper.QueryGetContractState, addr.String(), keeper.QueryMethodContractStateAll) - res, height, err := cliCtx.Query(route) - if err != nil { - rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) - return - } - - // parse res - var resultData []types.Model - err = json.Unmarshal(res, &resultData) - if err != nil { - rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) - return - } - - cliCtx = cliCtx.WithHeight(height) - rest.PostProcessResponse(w, cliCtx, resultData) - } -} - -func queryContractStateRawHandlerFn(cliCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - decoder := newArgDecoder(hex.DecodeString) - addr, err := sdk.AccAddressFromBech32(mux.Vars(r)["contractAddr"]) - if err != nil { - rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) - return - } - decoder.encoding = mux.Vars(r)["encoding"] - queryData, err := decoder.DecodeString(mux.Vars(r)["key"]) - if err != nil { - rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) - return - } - cliCtx, ok := rest.ParseQueryHeightOrReturnBadRequest(w, cliCtx, r) - if !ok { - return - } - - route := fmt.Sprintf("custom/%s/%s/%s/%s", types.QuerierRoute, keeper.QueryGetContractState, addr.String(), keeper.QueryMethodContractStateRaw) - res, height, err := cliCtx.QueryWithData(route, queryData) - if err != nil { - rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) - return - } - cliCtx = cliCtx.WithHeight(height) - // ensure this is base64 encoded - encoded := base64.StdEncoding.EncodeToString(res) - rest.PostProcessResponse(w, cliCtx, encoded) - } -} - -type smartResponse struct { - Smart []byte `json:"smart"` -} - -func queryContractStateSmartHandlerFn(cliCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - decoder := newArgDecoder(hex.DecodeString) - addr, err := sdk.AccAddressFromBech32(mux.Vars(r)["contractAddr"]) - if err != nil { - rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) - return - } - decoder.encoding = mux.Vars(r)["encoding"] - cliCtx, ok := rest.ParseQueryHeightOrReturnBadRequest(w, cliCtx, r) - if !ok { - return - } - - route := fmt.Sprintf("custom/%s/%s/%s/%s", types.QuerierRoute, keeper.QueryGetContractState, addr.String(), keeper.QueryMethodContractStateSmart) - - queryData, err := decoder.DecodeString(mux.Vars(r)["query"]) - if err != nil { - rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) - return - } - res, height, err := cliCtx.QueryWithData(route, queryData) - if err != nil { - rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) - return - } - // return as raw bytes (to be base64-encoded) - responseData := smartResponse{Smart: res} - - cliCtx = cliCtx.WithHeight(height) - rest.PostProcessResponse(w, cliCtx, responseData) - } -} - -func queryContractHistoryFn(cliCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - addr, err := sdk.AccAddressFromBech32(mux.Vars(r)["contractAddr"]) - if err != nil { - rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) - return - } - cliCtx, ok := rest.ParseQueryHeightOrReturnBadRequest(w, cliCtx, r) - if !ok { - return - } - - route := fmt.Sprintf("custom/%s/%s/%s", types.QuerierRoute, keeper.QueryContractHistory, addr.String()) - res, height, err := cliCtx.Query(route) - if err != nil { - rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) - return - } - cliCtx = cliCtx.WithHeight(height) - rest.PostProcessResponse(w, cliCtx, json.RawMessage(res)) - } -} - -type argumentDecoder struct { - // dec is the default decoder - dec func(string) ([]byte, error) - encoding string -} - -func newArgDecoder(def func(string) ([]byte, error)) *argumentDecoder { - return &argumentDecoder{dec: def} -} - -func (a *argumentDecoder) DecodeString(s string) ([]byte, error) { - switch a.encoding { - case "hex": - return hex.DecodeString(s) - case "base64": - return base64.StdEncoding.DecodeString(s) - default: - return a.dec(s) - } -} diff --git a/x/wasm/client/rest/rest.go b/x/wasm/client/rest/rest.go deleted file mode 100644 index 2e697a6b50..0000000000 --- a/x/wasm/client/rest/rest.go +++ /dev/null @@ -1,13 +0,0 @@ -package rest - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/gorilla/mux" -) - -// RegisterRoutes registers staking-related REST handlers to a router -func RegisterRoutes(cliCtx client.Context, r *mux.Router) { - registerQueryRoutes(cliCtx, r) - registerTxRoutes(cliCtx, r) - registerNewTxRoutes(cliCtx, r) -} diff --git a/x/wasm/client/rest/tx.go b/x/wasm/client/rest/tx.go deleted file mode 100644 index 17407c4b6a..0000000000 --- a/x/wasm/client/rest/tx.go +++ /dev/null @@ -1,149 +0,0 @@ -package rest - -import ( - "net/http" - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/tx" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/rest" - "github.com/gorilla/mux" - - "github.com/CosmWasm/wasmd/x/wasm/ioutils" - "github.com/CosmWasm/wasmd/x/wasm/types" -) - -func registerTxRoutes(cliCtx client.Context, r *mux.Router) { - r.HandleFunc("/wasm/code", storeCodeHandlerFn(cliCtx)).Methods("POST") - r.HandleFunc("/wasm/code/{codeId}", instantiateContractHandlerFn(cliCtx)).Methods("POST") - r.HandleFunc("/wasm/contract/{contractAddr}", executeContractHandlerFn(cliCtx)).Methods("POST") -} - -type storeCodeReq struct { - BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"` - WasmBytes []byte `json:"wasm_bytes"` -} - -type instantiateContractReq struct { - BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"` - Label string `json:"label" yaml:"label"` - Deposit sdk.Coins `json:"deposit" yaml:"deposit"` - Admin string `json:"admin,omitempty" yaml:"admin"` - Msg []byte `json:"msg" yaml:"msg"` -} - -type executeContractReq struct { - BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"` - ExecMsg []byte `json:"exec_msg" yaml:"exec_msg"` - Amount sdk.Coins `json:"coins" yaml:"coins"` -} - -func storeCodeHandlerFn(cliCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req storeCodeReq - if !rest.ReadRESTReq(w, r, cliCtx.LegacyAmino, &req) { - return - } - - req.BaseReq = req.BaseReq.Sanitize() - if !req.BaseReq.ValidateBasic(w) { - return - } - - var err error - wasm := req.WasmBytes - - // gzip the wasm file - if ioutils.IsWasm(wasm) { - wasm, err = ioutils.GzipIt(wasm) - if err != nil { - rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) - return - } - } else if !ioutils.IsGzip(wasm) { - rest.WriteErrorResponse(w, http.StatusBadRequest, "Invalid input file, use wasm binary or zip") - return - } - - // build and sign the transaction, then broadcast to Tendermint - msg := types.MsgStoreCode{ - Sender: req.BaseReq.From, - WASMByteCode: wasm, - } - - if err := msg.ValidateBasic(); err != nil { - rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) - return - } - - tx.WriteGeneratedTxResponse(cliCtx, w, req.BaseReq, &msg) - } -} - -func instantiateContractHandlerFn(cliCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req instantiateContractReq - if !rest.ReadRESTReq(w, r, cliCtx.LegacyAmino, &req) { - return - } - vars := mux.Vars(r) - - req.BaseReq = req.BaseReq.Sanitize() - if !req.BaseReq.ValidateBasic(w) { - return - } - - // get the id of the code to instantiate - codeID, err := strconv.ParseUint(vars["codeId"], 10, 64) - if err != nil { - return - } - - msg := types.MsgInstantiateContract{ - Sender: req.BaseReq.From, - CodeID: codeID, - Label: req.Label, - Funds: req.Deposit, - Msg: req.Msg, - Admin: req.Admin, - } - - if err := msg.ValidateBasic(); err != nil { - rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) - return - } - - tx.WriteGeneratedTxResponse(cliCtx, w, req.BaseReq, &msg) - } -} - -func executeContractHandlerFn(cliCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req executeContractReq - if !rest.ReadRESTReq(w, r, cliCtx.LegacyAmino, &req) { - return - } - vars := mux.Vars(r) - contractAddr := vars["contractAddr"] - - req.BaseReq = req.BaseReq.Sanitize() - if !req.BaseReq.ValidateBasic(w) { - return - } - - msg := types.MsgExecuteContract{ - Sender: req.BaseReq.From, - Contract: contractAddr, - Msg: req.ExecMsg, - Funds: req.Amount, - } - - if err := msg.ValidateBasic(); err != nil { - rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) - return - } - - tx.WriteGeneratedTxResponse(cliCtx, w, req.BaseReq, &msg) - } -} diff --git a/x/wasm/ibc.go b/x/wasm/ibc.go index 7e76f6e9a9..0acc705274 100644 --- a/x/wasm/ibc.go +++ b/x/wasm/ibc.go @@ -3,15 +3,15 @@ package wasm import ( "math" - ibcexported "github.com/cosmos/ibc-go/v3/modules/core/exported" + ibcexported "github.com/cosmos/ibc-go/v5/modules/core/exported" + sdkerrors "cosmossdk.io/errors" wasmvmtypes "github.com/CosmWasm/wasmvm/types" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" - porttypes "github.com/cosmos/ibc-go/v3/modules/core/05-port/types" - host "github.com/cosmos/ibc-go/v3/modules/core/24-host" + channeltypes "github.com/cosmos/ibc-go/v5/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v5/modules/core/05-port/types" + host "github.com/cosmos/ibc-go/v5/modules/core/24-host" types "github.com/CosmWasm/wasmd/x/wasm/types" ) @@ -37,14 +37,14 @@ func (i IBCHandler) OnChanOpenInit( chanCap *capabilitytypes.Capability, counterParty channeltypes.Counterparty, version string, -) error { +) (string, error) { // ensure port, version, capability if err := ValidateChannelParams(channelID); err != nil { - return err + return version, err } contractAddr, err := ContractFromPortID(portID) if err != nil { - return sdkerrors.Wrapf(err, "contract port id") + return version, sdkerrors.Wrapf(err, "contract port id") } msg := wasmvmtypes.IBCChannelOpenMsg{ @@ -61,13 +61,13 @@ func (i IBCHandler) OnChanOpenInit( } _, err = i.keeper.OnOpenChannel(ctx, contractAddr, msg) if err != nil { - return err + return version, err } // Claim channel capability passed back by IBC module if err := i.keeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil { - return sdkerrors.Wrap(err, "claim capability") + return version, sdkerrors.Wrap(err, "claim capability") } - return nil + return version, nil } // OnChanOpenTry implements the IBCModule interface @@ -240,12 +240,12 @@ func (i IBCHandler) OnRecvPacket( ) ibcexported.Acknowledgement { contractAddr, err := ContractFromPortID(packet.DestinationPort) if err != nil { - return channeltypes.NewErrorAcknowledgement(sdkerrors.Wrapf(err, "contract port id").Error()) + return channeltypes.NewErrorAcknowledgement(sdkerrors.Wrapf(err, "contract port id")) } msg := wasmvmtypes.IBCPacketReceiveMsg{Packet: newIBCPacket(packet), Relayer: relayer.String()} ack, err := i.keeper.OnRecvPacket(ctx, contractAddr, msg) if err != nil { - return channeltypes.NewErrorAcknowledgement(err.Error()) + return channeltypes.NewErrorAcknowledgement(err) } return ContractConfirmStateAck(ack) } diff --git a/x/wasm/ibc_reflect_test.go b/x/wasm/ibc_reflect_test.go index 16a10c8b74..597fc92d2e 100644 --- a/x/wasm/ibc_reflect_test.go +++ b/x/wasm/ibc_reflect_test.go @@ -5,8 +5,8 @@ import ( "github.com/stretchr/testify/assert" - channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" - ibctesting "github.com/cosmos/ibc-go/v3/testing" + channeltypes "github.com/cosmos/ibc-go/v5/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v5/testing" wasmvmtypes "github.com/CosmWasm/wasmvm/types" "github.com/stretchr/testify/require" diff --git a/x/wasm/ibc_test.go b/x/wasm/ibc_test.go index 767ccbe9aa..51b2900568 100644 --- a/x/wasm/ibc_test.go +++ b/x/wasm/ibc_test.go @@ -4,8 +4,8 @@ import ( "testing" wasmvmtypes "github.com/CosmWasm/wasmvm/types" - clienttypes "github.com/cosmos/ibc-go/v3/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + clienttypes "github.com/cosmos/ibc-go/v5/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v5/modules/core/04-channel/types" "github.com/stretchr/testify/assert" ) diff --git a/x/wasm/ibctesting/chain.go b/x/wasm/ibctesting/chain.go index 16f46b7b32..fe42e89cc7 100644 --- a/x/wasm/ibctesting/chain.go +++ b/x/wasm/ibctesting/chain.go @@ -2,10 +2,13 @@ package ibctesting import ( "bytes" + "context" "fmt" "testing" "time" + tmprotoversion "github.com/tendermint/tendermint/proto/tendermint/version" + "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -20,21 +23,20 @@ import ( stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" "github.com/cosmos/cosmos-sdk/x/staking/teststaking" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - clienttypes "github.com/cosmos/ibc-go/v3/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" - commitmenttypes "github.com/cosmos/ibc-go/v3/modules/core/23-commitment/types" - host "github.com/cosmos/ibc-go/v3/modules/core/24-host" - "github.com/cosmos/ibc-go/v3/modules/core/exported" - ibckeeper "github.com/cosmos/ibc-go/v3/modules/core/keeper" - "github.com/cosmos/ibc-go/v3/modules/core/types" - ibctmtypes "github.com/cosmos/ibc-go/v3/modules/light-clients/07-tendermint/types" - ibctesting "github.com/cosmos/ibc-go/v3/testing" - "github.com/cosmos/ibc-go/v3/testing/mock" + clienttypes "github.com/cosmos/ibc-go/v5/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v5/modules/core/04-channel/types" + commitmenttypes "github.com/cosmos/ibc-go/v5/modules/core/23-commitment/types" + host "github.com/cosmos/ibc-go/v5/modules/core/24-host" + "github.com/cosmos/ibc-go/v5/modules/core/exported" + ibckeeper "github.com/cosmos/ibc-go/v5/modules/core/keeper" + "github.com/cosmos/ibc-go/v5/modules/core/types" + ibctmtypes "github.com/cosmos/ibc-go/v5/modules/light-clients/07-tendermint/types" + ibctesting "github.com/cosmos/ibc-go/v5/testing" + "github.com/cosmos/ibc-go/v5/testing/mock" "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto/tmhash" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - tmprotoversion "github.com/tendermint/tendermint/proto/tendermint/version" tmtypes "github.com/tendermint/tendermint/types" tmversion "github.com/tendermint/tendermint/version" @@ -243,7 +245,6 @@ func (chain *TestChain) sendMsgs(msgs ...sdk.Msg) error { func (chain *TestChain) SendMsgs(msgs ...sdk.Msg) (*sdk.Result, error) { // ensure the chain has the latest time chain.Coordinator.UpdateTimeForChain(chain) - _, r, err := wasmd.SignAndDeliver( chain.t, chain.TxConfig, @@ -423,7 +424,7 @@ func (chain *TestChain) CreateTMClientHeader(chainID string, blockHeight int64, blockID := MakeBlockID(hhash, 3, tmhash.Sum([]byte("part_set"))) voteSet := tmtypes.NewVoteSet(chainID, blockHeight, 1, tmproto.PrecommitType, tmValSet) - commit, err := tmtypes.MakeCommit(blockID, blockHeight, 1, voteSet, signers, timestamp) + commit, err := MakeCommit(context.Background(), blockID, blockHeight, 1, voteSet, signers, timestamp) require.NoError(chain.t, err) signedHeader := &tmproto.SignedHeader{ @@ -570,6 +571,14 @@ func (a TestingAppDecorator) GetBaseApp() *baseapp.BaseApp { return a.TestSupport().GetBaseApp() } +func (a TestingAppDecorator) AppCodec() codec.Codec { + return a.TestSupport().AppCodec() +} + +func (a TestingAppDecorator) AppplySnapshotChunk() func(abci.RequestApplySnapshotChunk) abci.ResponseApplySnapshotChunk { + return a.TestSupport().AppplySnapshotChunk() +} + func (a TestingAppDecorator) GetStakingKeeper() stakingkeeper.Keeper { return a.TestSupport().StakingKeeper() } @@ -589,3 +598,34 @@ func (a TestingAppDecorator) GetTxConfig() client.TxConfig { func (a TestingAppDecorator) TestSupport() *wasmd.TestSupport { return wasmd.NewTestSupport(a.t, a.WasmApp) } + +func MakeCommit(ctx context.Context, blockID tmtypes.BlockID, height int64, round int32, voteSet *tmtypes.VoteSet, validators []tmtypes.PrivValidator, now time.Time) (*tmtypes.Commit, error) { + // all sign + for i := 0; i < len(validators); i++ { + pubKey, err := validators[i].GetPubKey() + if err != nil { + return nil, err + } + vote := &tmtypes.Vote{ + ValidatorAddress: pubKey.Address(), + ValidatorIndex: int32(i), + Height: height, + Round: round, + Type: tmproto.PrecommitType, + BlockID: blockID, + Timestamp: now, + } + + v := vote.ToProto() + + if err := validators[i].SignVote(voteSet.ChainID(), v); err != nil { + return nil, err + } + vote.Signature = v.Signature + if _, err := voteSet.AddVote(vote); err != nil { + return nil, err + } + } + + return voteSet.MakeCommit(), nil +} diff --git a/x/wasm/ibctesting/coordinator.go b/x/wasm/ibctesting/coordinator.go index ed85a4e786..4c9091962d 100644 --- a/x/wasm/ibctesting/coordinator.go +++ b/x/wasm/ibctesting/coordinator.go @@ -6,9 +6,9 @@ import ( "testing" "time" - channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" - host "github.com/cosmos/ibc-go/v3/modules/core/24-host" - ibctesting "github.com/cosmos/ibc-go/v3/testing" + channeltypes "github.com/cosmos/ibc-go/v5/modules/core/04-channel/types" + host "github.com/cosmos/ibc-go/v5/modules/core/24-host" + ibctesting "github.com/cosmos/ibc-go/v5/testing" "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" diff --git a/x/wasm/ibctesting/endpoint.go b/x/wasm/ibctesting/endpoint.go index 9411a79724..5806587f43 100644 --- a/x/wasm/ibctesting/endpoint.go +++ b/x/wasm/ibctesting/endpoint.go @@ -3,18 +3,18 @@ package ibctesting import ( "fmt" - ibctesting "github.com/cosmos/ibc-go/v3/testing" + ibctesting "github.com/cosmos/ibc-go/v5/testing" // sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - clienttypes "github.com/cosmos/ibc-go/v3/modules/core/02-client/types" - connectiontypes "github.com/cosmos/ibc-go/v3/modules/core/03-connection/types" - channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" - commitmenttypes "github.com/cosmos/ibc-go/v3/modules/core/23-commitment/types" - host "github.com/cosmos/ibc-go/v3/modules/core/24-host" - "github.com/cosmos/ibc-go/v3/modules/core/exported" - ibctmtypes "github.com/cosmos/ibc-go/v3/modules/light-clients/07-tendermint/types" + clienttypes "github.com/cosmos/ibc-go/v5/modules/core/02-client/types" + connectiontypes "github.com/cosmos/ibc-go/v5/modules/core/03-connection/types" + channeltypes "github.com/cosmos/ibc-go/v5/modules/core/04-channel/types" + commitmenttypes "github.com/cosmos/ibc-go/v5/modules/core/23-commitment/types" + host "github.com/cosmos/ibc-go/v5/modules/core/24-host" + "github.com/cosmos/ibc-go/v5/modules/core/exported" + ibctmtypes "github.com/cosmos/ibc-go/v5/modules/light-clients/07-tendermint/types" ) // Endpoint is a which represents a channel endpoint and its associated @@ -184,7 +184,7 @@ func (endpoint *Endpoint) ConnOpenTry() error { counterpartyClient, proofClient, proofConsensus, consensusHeight, proofInit, proofHeight := endpoint.QueryConnectionHandshakeProof() msg := connectiontypes.NewMsgConnectionOpenTry( - "", endpoint.ClientID, // does not support handshake continuation + endpoint.ClientID, endpoint.Counterparty.ConnectionID, endpoint.Counterparty.ClientID, counterpartyClient, endpoint.Counterparty.Chain.GetPrefix(), []*connectiontypes.Version{ibctesting.ConnectionVersion}, endpoint.ConnectionConfig.DelayPeriod, proofInit, proofClient, proofConsensus, @@ -297,10 +297,11 @@ func (endpoint *Endpoint) ChanOpenTry() error { proof, height := endpoint.Counterparty.Chain.QueryProof(channelKey) msg := channeltypes.NewMsgChannelOpenTry( - endpoint.ChannelConfig.PortID, "", // does not support handshake continuation + endpoint.ChannelConfig.PortID, endpoint.ChannelConfig.Version, endpoint.ChannelConfig.Order, []string{endpoint.ConnectionID}, endpoint.Counterparty.ChannelConfig.PortID, endpoint.Counterparty.ChannelID, endpoint.Counterparty.ChannelConfig.Version, - proof, height, + proof, + height, endpoint.Chain.SenderAccount.GetAddress().String(), ) res, err := endpoint.Chain.SendMsgs(msg) diff --git a/x/wasm/ibctesting/event_utils.go b/x/wasm/ibctesting/event_utils.go index 6463515ffa..fb298816ed 100644 --- a/x/wasm/ibctesting/event_utils.go +++ b/x/wasm/ibctesting/event_utils.go @@ -4,8 +4,8 @@ import ( "strconv" "strings" - clienttypes "github.com/cosmos/ibc-go/v3/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + clienttypes "github.com/cosmos/ibc-go/v5/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v5/modules/core/04-channel/types" abci "github.com/tendermint/tendermint/abci/types" ) diff --git a/x/wasm/ibctesting/path.go b/x/wasm/ibctesting/path.go index 2ce5e044a6..74ac8c5d43 100644 --- a/x/wasm/ibctesting/path.go +++ b/x/wasm/ibctesting/path.go @@ -5,7 +5,7 @@ import ( "fmt" sdk "github.com/cosmos/cosmos-sdk/types" - channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + channeltypes "github.com/cosmos/ibc-go/v5/modules/core/04-channel/types" ) // Path contains two endpoints representing two chains connected over IBC diff --git a/x/wasm/ibctesting/wasm.go b/x/wasm/ibctesting/wasm.go index 6957f63404..6327696be6 100644 --- a/x/wasm/ibctesting/wasm.go +++ b/x/wasm/ibctesting/wasm.go @@ -10,7 +10,7 @@ import ( wasmd "github.com/CosmWasm/wasmd/app" - ibctesting "github.com/cosmos/ibc-go/v3/testing" + ibctesting "github.com/cosmos/ibc-go/v5/testing" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/golang/protobuf/proto" //nolint diff --git a/x/wasm/ioutils/ioutil.go b/x/wasm/ioutils/ioutil.go index 9c7bd81f04..5740132342 100644 --- a/x/wasm/ioutils/ioutil.go +++ b/x/wasm/ioutils/ioutil.go @@ -4,7 +4,6 @@ import ( "bytes" "compress/gzip" "io" - "io/ioutil" "github.com/CosmWasm/wasmd/x/wasm/types" ) @@ -26,7 +25,7 @@ func Uncompress(src []byte, limit uint64) ([]byte, error) { } zr.Multistream(false) defer zr.Close() - return ioutil.ReadAll(LimitReader(zr, int64(limit))) + return io.ReadAll(LimitReader(zr, int64(limit))) } // LimitReader returns a Reader that reads from r diff --git a/x/wasm/keeper/ante.go b/x/wasm/keeper/ante.go index 1ffd34befd..08dfdf64b4 100644 --- a/x/wasm/keeper/ante.go +++ b/x/wasm/keeper/ante.go @@ -3,6 +3,7 @@ package keeper import ( "encoding/binary" + storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/CosmWasm/wasmd/x/wasm/types" @@ -10,11 +11,11 @@ import ( // CountTXDecorator ante handler to count the tx position in a block. type CountTXDecorator struct { - storeKey sdk.StoreKey + storeKey storetypes.StoreKey } // NewCountTXDecorator constructor -func NewCountTXDecorator(storeKey sdk.StoreKey) *CountTXDecorator { +func NewCountTXDecorator(storeKey storetypes.StoreKey) *CountTXDecorator { return &CountTXDecorator{storeKey: storeKey} } diff --git a/x/wasm/keeper/ante_test.go b/x/wasm/keeper/ante_test.go index fa64b62fe3..e96332c9fe 100644 --- a/x/wasm/keeper/ante_test.go +++ b/x/wasm/keeper/ante_test.go @@ -9,6 +9,7 @@ import ( "github.com/CosmWasm/wasmd/x/wasm/keeper" "github.com/cosmos/cosmos-sdk/store" + storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -23,7 +24,7 @@ func TestCountTxDecorator(t *testing.T) { keyWasm := sdk.NewKVStoreKey(types.StoreKey) db := dbm.NewMemDB() ms := store.NewCommitMultiStore(db) - ms.MountStoreWithDB(keyWasm, sdk.StoreTypeIAVL, db) + ms.MountStoreWithDB(keyWasm, storetypes.StoreTypeIAVL, db) require.NoError(t, ms.LoadLatestVersion()) const myCurrentBlockHeight = 100 diff --git a/x/wasm/keeper/genesis_test.go b/x/wasm/keeper/genesis_test.go index ff7c6db53a..61f45ad4c1 100644 --- a/x/wasm/keeper/genesis_test.go +++ b/x/wasm/keeper/genesis_test.go @@ -634,7 +634,7 @@ func TestSupportedGenMsgTypes(t *testing.T) { assert.Equal(t, sdk.NewCoin(denom, sdk.NewInt(10)), gotBalance) } -func setupKeeper(t *testing.T) (*Keeper, sdk.Context, []sdk.StoreKey) { +func setupKeeper(t *testing.T) (*Keeper, sdk.Context, []storetypes.StoreKey) { t.Helper() tempDir, err := ioutil.TempDir("", "wasm") require.NoError(t, err) @@ -670,7 +670,7 @@ func setupKeeper(t *testing.T) (*Keeper, sdk.Context, []sdk.StoreKey) { pk := paramskeeper.NewKeeper(encodingConfig.Marshaler, encodingConfig.Amino, keyParams, tkeyParams) srcKeeper := NewKeeper(encodingConfig.Marshaler, keyWasm, pk.Subspace(wasmTypes.ModuleName), authkeeper.AccountKeeper{}, nil, stakingkeeper.Keeper{}, distributionkeeper.Keeper{}, nil, nil, nil, nil, nil, nil, tempDir, wasmConfig, SupportedFeatures) - return &srcKeeper, ctx, []sdk.StoreKey{keyWasm, keyParams} + return &srcKeeper, ctx, []storetypes.StoreKey{keyWasm, keyParams} } type StakingKeeperMock struct { diff --git a/x/wasm/keeper/handler_plugin.go b/x/wasm/keeper/handler_plugin.go index c138e5ed00..c91247697e 100644 --- a/x/wasm/keeper/handler_plugin.go +++ b/x/wasm/keeper/handler_plugin.go @@ -9,8 +9,8 @@ import ( codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" - host "github.com/cosmos/ibc-go/v3/modules/core/24-host" + channeltypes "github.com/cosmos/ibc-go/v5/modules/core/04-channel/types" + host "github.com/cosmos/ibc-go/v5/modules/core/24-host" "github.com/CosmWasm/wasmd/x/wasm/types" ) diff --git a/x/wasm/keeper/handler_plugin_encoders.go b/x/wasm/keeper/handler_plugin_encoders.go index 90734c1dc2..628c1d2c79 100644 --- a/x/wasm/keeper/handler_plugin_encoders.go +++ b/x/wasm/keeper/handler_plugin_encoders.go @@ -10,11 +10,11 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" distributiontypes "github.com/cosmos/cosmos-sdk/x/distribution/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - ibctransfertypes "github.com/cosmos/ibc-go/v3/modules/apps/transfer/types" - ibcclienttypes "github.com/cosmos/ibc-go/v3/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + ibctransfertypes "github.com/cosmos/ibc-go/v5/modules/apps/transfer/types" + ibcclienttypes "github.com/cosmos/ibc-go/v5/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v5/modules/core/04-channel/types" "github.com/CosmWasm/wasmd/x/wasm/types" ) @@ -294,18 +294,18 @@ func EncodeIBCMsg(portSource types.ICS20TransferPortSource) func(ctx sdk.Context } func EncodeGovMsg(sender sdk.AccAddress, msg *wasmvmtypes.GovMsg) ([]sdk.Msg, error) { - var option govtypes.VoteOption + var option govv1.VoteOption switch msg.Vote.Vote { case wasmvmtypes.Yes: - option = govtypes.OptionYes + option = govv1.OptionYes case wasmvmtypes.No: - option = govtypes.OptionNo + option = govv1.OptionNo case wasmvmtypes.NoWithVeto: - option = govtypes.OptionNoWithVeto + option = govv1.OptionNoWithVeto case wasmvmtypes.Abstain: - option = govtypes.OptionAbstain + option = govv1.OptionAbstain } - vote := &govtypes.MsgVote{ + vote := &govv1.MsgVote{ ProposalId: msg.Vote.ProposalId, Voter: sender.String(), Option: option, diff --git a/x/wasm/keeper/handler_plugin_encoders_test.go b/x/wasm/keeper/handler_plugin_encoders_test.go index e1c49c591c..704221e7e3 100644 --- a/x/wasm/keeper/handler_plugin_encoders_test.go +++ b/x/wasm/keeper/handler_plugin_encoders_test.go @@ -4,10 +4,10 @@ import ( "testing" codectypes "github.com/cosmos/cosmos-sdk/codec/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - ibctransfertypes "github.com/cosmos/ibc-go/v3/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v3/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" + ibctransfertypes "github.com/cosmos/ibc-go/v5/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v5/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v5/modules/core/04-channel/types" "github.com/golang/protobuf/proto" "github.com/stretchr/testify/assert" diff --git a/x/wasm/keeper/handler_plugin_test.go b/x/wasm/keeper/handler_plugin_test.go index 4c60bc550f..5fe7d94154 100644 --- a/x/wasm/keeper/handler_plugin_test.go +++ b/x/wasm/keeper/handler_plugin_test.go @@ -11,9 +11,9 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - clienttypes "github.com/cosmos/ibc-go/v3/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v3/modules/core/exported" + clienttypes "github.com/cosmos/ibc-go/v5/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v5/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v5/modules/core/exported" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -400,7 +400,7 @@ func TestBurnCoinMessageHandlerIntegration(t *testing.T) { // and total supply reduced by burned amount after, err := keepers.BankKeeper.TotalSupply(sdk.WrapSDKContext(ctx), &banktypes.QueryTotalSupplyRequest{}) require.NoError(t, err) - diff := before.Supply.Sub(after.Supply) + diff := before.Supply.Sub(after.Supply...) assert.Equal(t, sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(100))), diff) }) } diff --git a/x/wasm/keeper/ibc.go b/x/wasm/keeper/ibc.go index f6f928df62..7c0a79c311 100644 --- a/x/wasm/keeper/ibc.go +++ b/x/wasm/keeper/ibc.go @@ -6,7 +6,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - host "github.com/cosmos/ibc-go/v3/modules/core/24-host" + host "github.com/cosmos/ibc-go/v5/modules/core/24-host" "github.com/CosmWasm/wasmd/x/wasm/types" ) diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index 986a185e0a..a5fce2ace6 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -17,6 +17,7 @@ import ( wasmvmtypes "github.com/CosmWasm/wasmvm/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/store/prefix" + storetypes "github.com/cosmos/cosmos-sdk/store/types" "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -68,7 +69,7 @@ type WasmVMResponseHandler interface { // Keeper will have a reference to Wasmer with it's own data directory. type Keeper struct { - storeKey sdk.StoreKey + storeKey storetypes.StoreKey cdc codec.Codec accountKeeper types.AccountKeeper bank CoinTransferrer @@ -89,7 +90,7 @@ type Keeper struct { // If customEncoders is non-nil, we can use this to override some of the message handler, especially custom func NewKeeper( cdc codec.Codec, - storeKey sdk.StoreKey, + storeKey storetypes.StoreKey, paramSpace paramtypes.Subspace, accountKeeper types.AccountKeeper, bankKeeper types.BankKeeper, diff --git a/x/wasm/keeper/proposal_handler.go b/x/wasm/keeper/proposal_handler.go index 9da330ce0f..53586cd1dc 100644 --- a/x/wasm/keeper/proposal_handler.go +++ b/x/wasm/keeper/proposal_handler.go @@ -5,7 +5,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/CosmWasm/wasmd/x/wasm/types" ) diff --git a/x/wasm/keeper/proposal_integration_test.go b/x/wasm/keeper/proposal_integration_test.go index 3d5097b501..8c8640da34 100644 --- a/x/wasm/keeper/proposal_integration_test.go +++ b/x/wasm/keeper/proposal_integration_test.go @@ -15,12 +15,13 @@ import ( "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" sdk "github.com/cosmos/cosmos-sdk/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - "github.com/cosmos/cosmos-sdk/x/params/types/proposal" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/CosmWasm/wasmd/x/wasm/types" + govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" + "github.com/cosmos/cosmos-sdk/x/params/types/proposal" ) func TestStoreCodeProposal(t *testing.T) { @@ -33,20 +34,23 @@ func TestStoreCodeProposal(t *testing.T) { wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) - myActorAddress := RandomBech32AccountAddress(t) + myActorAddress := govKeeper.GetGovernanceAccount(ctx).GetAddress().String() src := types.StoreCodeProposalFixture(func(p *types.StoreCodeProposal) { p.RunAs = myActorAddress p.WASMByteCode = wasmCode }) + msgContent, err := govv1.NewLegacyContent(src, myActorAddress) + require.NoError(t, err) + // when stored - storedProposal, err := govKeeper.SubmitProposal(ctx, src) + _, err = govKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, "testing 123") require.NoError(t, err) // and proposal execute - handler := govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) - err = handler(ctx, storedProposal.GetContent()) + handler := govKeeper.LegacyRouter().GetRoute(src.ProposalRoute()) + err = handler(ctx, src) require.NoError(t, err) // then @@ -88,85 +92,16 @@ func TestInstantiateProposal(t *testing.T) { }) em := sdk.NewEventManager() - // when stored - storedProposal, err := govKeeper.SubmitProposal(ctx, src) - require.NoError(t, err) - - // and proposal execute - handler := govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) - err = handler(ctx.WithEventManager(em), storedProposal.GetContent()) - require.NoError(t, err) - - // then - contractAddr, err := sdk.AccAddressFromBech32("cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr") - require.NoError(t, err) - - cInfo := wasmKeeper.GetContractInfo(ctx, contractAddr) - require.NotNil(t, cInfo) - assert.Equal(t, uint64(1), cInfo.CodeID) - assert.Equal(t, oneAddress.String(), cInfo.Creator) - assert.Equal(t, otherAddress.String(), cInfo.Admin) - assert.Equal(t, "testing", cInfo.Label) - expHistory := []types.ContractCodeHistoryEntry{{ - Operation: types.ContractCodeHistoryOperationTypeInit, - CodeID: src.CodeID, - Updated: types.NewAbsoluteTxPosition(ctx), - Msg: src.Msg, - }} - assert.Equal(t, expHistory, wasmKeeper.GetContractHistory(ctx, contractAddr)) - // and event - require.Len(t, em.Events(), 3, "%#v", em.Events()) - require.Equal(t, types.EventTypeInstantiate, em.Events()[0].Type) - require.Equal(t, types.WasmModuleEventType, em.Events()[1].Type) - require.Equal(t, types.EventTypeGovContractResult, em.Events()[2].Type) - require.Len(t, em.Events()[2].Attributes, 1) - require.NotEmpty(t, em.Events()[2].Attributes[0]) -} - -func TestInstantiateProposal_NoAdmin(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking") - govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper - wasmKeeper.SetParams(ctx, types.Params{ - CodeUploadAccess: types.AllowNobody, - InstantiateDefaultPermission: types.AccessTypeNobody, - }) - - wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") - require.NoError(t, err) - - require.NoError(t, wasmKeeper.importCode(ctx, 1, - types.CodeInfoFixture(types.WithSHA256CodeHash(wasmCode)), - wasmCode), - ) - - var oneAddress sdk.AccAddress = bytes.Repeat([]byte{0x1}, types.ContractAddrLen) - - // test invalid admin address - src := types.InstantiateContractProposalFixture(func(p *types.InstantiateContractProposal) { - p.CodeID = firstCodeID - p.RunAs = oneAddress.String() - p.Admin = "invalid" - p.Label = "testing" - }) - _, err = govKeeper.SubmitProposal(ctx, src) - require.Error(t, err) - - // test with no admin - src = types.InstantiateContractProposalFixture(func(p *types.InstantiateContractProposal) { - p.CodeID = firstCodeID - p.RunAs = oneAddress.String() - p.Admin = "" - p.Label = "testing" - }) - em := sdk.NewEventManager() + myActorAddress := govKeeper.GetGovernanceAccount(ctx).GetAddress().String() + msgContent, err := govv1.NewLegacyContent(src, myActorAddress) // when stored - storedProposal, err := govKeeper.SubmitProposal(ctx, src) + _, err = govKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, "testing 123") require.NoError(t, err) // and proposal execute - handler := govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) - err = handler(ctx.WithEventManager(em), storedProposal.GetContent()) + handler := govKeeper.LegacyRouter().GetRoute(src.ProposalRoute()) + err = handler(ctx.WithEventManager(em), src) require.NoError(t, err) // then @@ -177,7 +112,7 @@ func TestInstantiateProposal_NoAdmin(t *testing.T) { require.NotNil(t, cInfo) assert.Equal(t, uint64(1), cInfo.CodeID) assert.Equal(t, oneAddress.String(), cInfo.Creator) - assert.Equal(t, "", cInfo.Admin) + assert.Equal(t, otherAddress.String(), cInfo.Admin) assert.Equal(t, "testing", cInfo.Label) expHistory := []types.ContractCodeHistoryEntry{{ Operation: types.ContractCodeHistoryOperationTypeInit, @@ -241,13 +176,16 @@ func TestMigrateProposal(t *testing.T) { em := sdk.NewEventManager() + myActorAddress := govKeeper.GetGovernanceAccount(ctx).GetAddress().String() + msgContent, err := govv1.NewLegacyContent(&src, myActorAddress) + // when stored - storedProposal, err := govKeeper.SubmitProposal(ctx, &src) + _, err = govKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, "testing 123") require.NoError(t, err) // and proposal execute - handler := govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) - err = handler(ctx.WithEventManager(em), storedProposal.GetContent()) + handler := govKeeper.LegacyRouter().GetRoute(src.ProposalRoute()) + err = handler(ctx.WithEventManager(em), &src) require.NoError(t, err) // then @@ -302,10 +240,11 @@ func TestExecuteProposal(t *testing.T) { RunAs: exampleContract.BeneficiaryAddr.String(), } - em := sdk.NewEventManager() + myActorAddress := govKeeper.GetGovernanceAccount(ctx).GetAddress().String() + msgContent, err := govv1.NewLegacyContent(&badSrc, myActorAddress) // fails on store - this doesn't have permission - storedProposal, err := govKeeper.SubmitProposal(ctx, &badSrc) + _, err = govKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, "testing 123") require.Error(t, err) // balance should not change bal = bankKeeper.GetBalance(ctx, contractAddr, "denom") @@ -320,15 +259,16 @@ func TestExecuteProposal(t *testing.T) { RunAs: exampleContract.VerifierAddr.String(), } - em = sdk.NewEventManager() + myActorAddress = govKeeper.GetGovernanceAccount(ctx).GetAddress().String() + msgContent, err = govv1.NewLegacyContent(&src, myActorAddress) // when stored - storedProposal, err = govKeeper.SubmitProposal(ctx, &src) + _, err = govKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, "testing 123") require.NoError(t, err) // and proposal execute - handler := govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) - err = handler(ctx.WithEventManager(em), storedProposal.GetContent()) + handler := govKeeper.LegacyRouter().GetRoute(src.ProposalRoute()) + err = handler(ctx, &src) require.NoError(t, err) // balance should be empty (proper release) @@ -371,15 +311,16 @@ func TestSudoProposal(t *testing.T) { Msg: stealMsgBz, } - em := sdk.NewEventManager() + myActorAddress := govKeeper.GetGovernanceAccount(ctx).GetAddress().String() + msgContent, err := govv1.NewLegacyContent(&src, myActorAddress) // when stored - storedProposal, err := govKeeper.SubmitProposal(ctx, &src) + _, err = govKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, "testing 123") require.NoError(t, err) // and proposal execute - handler := govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) - err = handler(ctx.WithEventManager(em), storedProposal.GetContent()) + handler := govKeeper.LegacyRouter().GetRoute(src.ProposalRoute()) + err = handler(ctx, &src) require.NoError(t, err) // balance should be empty (and verifier richer) @@ -399,7 +340,7 @@ func TestAdminProposals(t *testing.T) { specs := map[string]struct { state types.ContractInfo - srcProposal govtypes.Content + srcProposal govv1beta1.Content expAdmin sdk.AccAddress }{ "update with different admin": { @@ -459,12 +400,15 @@ func TestAdminProposals(t *testing.T) { require.NoError(t, wasmKeeper.importContract(ctx, contractAddr, &spec.state, []types.Model{})) // when stored - storedProposal, err := govKeeper.SubmitProposal(ctx, spec.srcProposal) + myActorAddress := govKeeper.GetGovernanceAccount(ctx).GetAddress().String() + msgContent, err := govv1.NewLegacyContent(spec.srcProposal, myActorAddress) + + _, err = govKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, "testing 123") require.NoError(t, err) // and execute proposal - handler := govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) - err = handler(ctx, storedProposal.GetContent()) + handler := govKeeper.LegacyRouter().GetRoute(spec.srcProposal.ProposalRoute()) + err = handler(ctx, spec.srcProposal) require.NoError(t, err) // then @@ -556,12 +500,15 @@ func TestUpdateParamsProposal(t *testing.T) { Changes: jsonProposal.Changes.ToParamChanges(), } // when stored - storedProposal, err := govKeeper.SubmitProposal(ctx, &proposal) + myActorAddress := govKeeper.GetGovernanceAccount(ctx).GetAddress().String() + msgContent, err := govv1.NewLegacyContent(&proposal, myActorAddress) + + _, err = govKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, "testing 123") require.NoError(t, err) // and proposal execute - handler := govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) - err = handler(ctx, storedProposal.GetContent()) + handler := govKeeper.LegacyRouter().GetRoute(proposal.ProposalRoute()) + err = handler(ctx, &proposal) require.NoError(t, err) // then @@ -639,17 +586,19 @@ func TestPinCodesProposal(t *testing.T) { } // when stored - storedProposal, gotErr := govKeeper.SubmitProposal(ctx, &proposal) + myActorAddress := govKeeper.GetGovernanceAccount(ctx).GetAddress().String() + msgContent, err := govv1.NewLegacyContent(&proposal, myActorAddress) + + _, err = govKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, "testing 123") if spec.expErr { - require.Error(t, gotErr) + require.Error(t, err) return } - require.NoError(t, gotErr) // and proposal execute - handler := govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) - gotErr = handler(ctx, storedProposal.GetContent()) - require.NoError(t, gotErr) + handler := govKeeper.LegacyRouter().GetRoute(proposal.ProposalRoute()) + err = handler(ctx, &proposal) + require.NoError(t, err) // then for i := range spec.srcCodeIDs { @@ -727,17 +676,19 @@ func TestUnpinCodesProposal(t *testing.T) { } // when stored - storedProposal, gotErr := govKeeper.SubmitProposal(ctx, &proposal) + myActorAddress := govKeeper.GetGovernanceAccount(ctx).GetAddress().String() + msgContent, err := govv1.NewLegacyContent(&proposal, myActorAddress) + + _, err = govKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, "testing 123") if spec.expErr { - require.Error(t, gotErr) + require.Error(t, err) return } - require.NoError(t, gotErr) // and proposal execute - handler := govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) - gotErr = handler(ctx, storedProposal.GetContent()) - require.NoError(t, gotErr) + handler := govKeeper.LegacyRouter().GetRoute(proposal.ProposalRoute()) + err = handler(ctx, &proposal) + require.NoError(t, err) // then for i := range spec.srcCodeIDs { @@ -747,97 +698,3 @@ func TestUnpinCodesProposal(t *testing.T) { }) } } - -func TestUpdateInstantiateConfigProposal(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking") - govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper - - mock := wasmtesting.MockWasmer{ - CreateFn: wasmtesting.NoOpCreateFn, - AnalyzeCodeFn: wasmtesting.WithoutIBCAnalyzeFn, - } - anyAddress, err := sdk.AccAddressFromBech32("cosmos100dejzacpanrldpjjwksjm62shqhyss44jf5xz") - require.NoError(t, err) - - withAddressAccessConfig := types.AccessTypeOnlyAddress.With(anyAddress) - var ( - nobody = StoreRandomContractWithAccessConfig(t, ctx, keepers, &mock, &types.AllowNobody) - everybody = StoreRandomContractWithAccessConfig(t, ctx, keepers, &mock, &types.AllowEverybody) - withAddress = StoreRandomContractWithAccessConfig(t, ctx, keepers, &mock, &withAddressAccessConfig) - ) - - specs := map[string]struct { - accessConfigUpdates []types.AccessConfigUpdate - expErr bool - }{ - "update one": { - accessConfigUpdates: []types.AccessConfigUpdate{ - {CodeID: nobody.CodeID, InstantiatePermission: types.AllowEverybody}, - }, - }, - "update multiple": { - accessConfigUpdates: []types.AccessConfigUpdate{ - {CodeID: everybody.CodeID, InstantiatePermission: types.AllowNobody}, - {CodeID: nobody.CodeID, InstantiatePermission: withAddressAccessConfig}, - {CodeID: withAddress.CodeID, InstantiatePermission: types.AllowEverybody}, - }, - }, - "update same code id": { - accessConfigUpdates: []types.AccessConfigUpdate{ - {CodeID: everybody.CodeID, InstantiatePermission: types.AllowNobody}, - {CodeID: everybody.CodeID, InstantiatePermission: types.AllowEverybody}, - }, - expErr: true, - }, - "update non existing code id": { - accessConfigUpdates: []types.AccessConfigUpdate{ - {CodeID: 100, InstantiatePermission: types.AllowNobody}, - {CodeID: everybody.CodeID, InstantiatePermission: types.AllowEverybody}, - }, - expErr: true, - }, - "update empty list": { - accessConfigUpdates: make([]types.AccessConfigUpdate, 0), - expErr: true, - }, - } - parentCtx := ctx - for msg, spec := range specs { - t.Run(msg, func(t *testing.T) { - ctx, _ := parentCtx.CacheContext() - - updates := make([]types.AccessConfigUpdate, 0) - for _, cu := range spec.accessConfigUpdates { - updates = append(updates, types.AccessConfigUpdate{ - CodeID: cu.CodeID, - InstantiatePermission: cu.InstantiatePermission, - }) - } - - proposal := types.UpdateInstantiateConfigProposal{ - Title: "Foo", - Description: "Bar", - AccessConfigUpdates: updates, - } - - // when stored - storedProposal, gotErr := govKeeper.SubmitProposal(ctx, &proposal) - if spec.expErr { - require.Error(t, gotErr) - return - } - require.NoError(t, gotErr) - - // and proposal execute - handler := govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) - gotErr = handler(ctx, storedProposal.GetContent()) - require.NoError(t, gotErr) - - // then - for i := range spec.accessConfigUpdates { - c := wasmKeeper.GetCodeInfo(ctx, spec.accessConfigUpdates[i].CodeID) - require.Equal(t, spec.accessConfigUpdates[i].InstantiatePermission, c.InstantiateConfig) - } - }) - } -} diff --git a/x/wasm/keeper/querier.go b/x/wasm/keeper/querier.go index 6c4e45430c..e7c7572877 100644 --- a/x/wasm/keeper/querier.go +++ b/x/wasm/keeper/querier.go @@ -10,6 +10,7 @@ import ( "google.golang.org/grpc/status" "github.com/cosmos/cosmos-sdk/store/prefix" + storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/query" @@ -21,13 +22,13 @@ var _ types.QueryServer = &grpcQuerier{} type grpcQuerier struct { cdc codec.Codec - storeKey sdk.StoreKey + storeKey storetypes.StoreKey keeper types.ViewKeeper queryGasLimit sdk.Gas } // NewGrpcQuerier constructor -func NewGrpcQuerier(cdc codec.Codec, storeKey sdk.StoreKey, keeper types.ViewKeeper, queryGasLimit sdk.Gas) *grpcQuerier { //nolint:revive +func NewGrpcQuerier(cdc codec.Codec, storeKey storetypes.StoreKey, keeper types.ViewKeeper, queryGasLimit sdk.Gas) *grpcQuerier { //nolint:revive return &grpcQuerier{cdc: cdc, storeKey: storeKey, keeper: keeper, queryGasLimit: queryGasLimit} } diff --git a/x/wasm/keeper/querier_test.go b/x/wasm/keeper/querier_test.go index f473f52fac..ebf2a371be 100644 --- a/x/wasm/keeper/querier_test.go +++ b/x/wasm/keeper/querier_test.go @@ -17,7 +17,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkErrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/query" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/libs/log" @@ -545,7 +546,7 @@ func TestQueryContractInfo(t *testing.T) { querier := NewGrpcQuerier(k.cdc, k.storeKey, k, k.queryGasLimit) myExtension := func(info *types.ContractInfo) { // abuse gov proposal as a random protobuf extension with an Any type - myExt, err := govtypes.NewProposal(&govtypes.TextProposal{Title: "foo", Description: "bar"}, 1, anyDate, anyDate) + myExt, err := govv1beta1.NewProposal(&govv1beta1.TextProposal{Title: "foo", Description: "bar"}, 1, anyDate, anyDate) require.NoError(t, err) myExt.TotalDeposit = nil info.SetExtension(&myExt) diff --git a/x/wasm/keeper/query_plugins.go b/x/wasm/keeper/query_plugins.go index b0e095b12c..e75c2b4c10 100644 --- a/x/wasm/keeper/query_plugins.go +++ b/x/wasm/keeper/query_plugins.go @@ -6,7 +6,7 @@ import ( "github.com/cosmos/cosmos-sdk/baseapp" - channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + channeltypes "github.com/cosmos/ibc-go/v5/modules/core/04-channel/types" "github.com/CosmWasm/wasmd/x/wasm/types" diff --git a/x/wasm/keeper/query_plugins_test.go b/x/wasm/keeper/query_plugins_test.go index c58932d67e..555521d68f 100644 --- a/x/wasm/keeper/query_plugins_test.go +++ b/x/wasm/keeper/query_plugins_test.go @@ -10,7 +10,7 @@ import ( wasmvmtypes "github.com/CosmWasm/wasmvm/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + channeltypes "github.com/cosmos/ibc-go/v5/modules/core/04-channel/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/x/wasm/keeper/reflect_test.go b/x/wasm/keeper/reflect_test.go index 2f89a265c4..25b4da8144 100644 --- a/x/wasm/keeper/reflect_test.go +++ b/x/wasm/keeper/reflect_test.go @@ -262,7 +262,7 @@ func TestReflectStargateQuery(t *testing.T) { funds := sdk.NewCoins(sdk.NewInt64Coin("denom", 320000)) contractStart := sdk.NewCoins(sdk.NewInt64Coin("denom", 40000)) - expectedBalance := funds.Sub(contractStart) + expectedBalance := funds.Sub(contractStart...) creator := keepers.Faucet.NewFundedAccount(ctx, funds...) // upload code diff --git a/x/wasm/keeper/snapshotter.go b/x/wasm/keeper/snapshotter.go index a781cb07a3..5235876bd6 100644 --- a/x/wasm/keeper/snapshotter.go +++ b/x/wasm/keeper/snapshotter.go @@ -98,6 +98,14 @@ func (ws *WasmSnapshotter) Restore( return snapshot.SnapshotItem{}, snapshot.ErrUnknownFormat } +func (ws *WasmSnapshotter) PruneSnapshotHeight(height int64) { + // nothing to do +} + +func (ws *WasmSnapshotter) SetSnapshotInterval(snapshotInterval uint64) { + return bapp.snapshotInterval() +} + func restoreV1(ctx sdk.Context, k *Keeper, compressedCode []byte) error { wasmCode, err := ioutils.Uncompress(compressedCode, uint64(types.MaxWasmSize)) if err != nil { diff --git a/x/wasm/keeper/staking_test.go b/x/wasm/keeper/staking_test.go index b6d719f135..b1b0de32ff 100644 --- a/x/wasm/keeper/staking_test.go +++ b/x/wasm/keeper/staking_test.go @@ -676,8 +676,8 @@ func addValidator(t *testing.T, ctx sdk.Context, stakingKeeper stakingkeeper.Kee Value: value, } - h := staking.NewHandler(stakingKeeper) - _, err = h(ctx, &msg) + h := stakingkeeper.NewMsgServerImpl(stakingKeeper) + _, err = h.CreateValidator(ctx, &msg) require.NoError(t, err) return addr } diff --git a/x/wasm/keeper/submsg_test.go b/x/wasm/keeper/submsg_test.go index 4cf25fc894..341816464f 100644 --- a/x/wasm/keeper/submsg_test.go +++ b/x/wasm/keeper/submsg_test.go @@ -27,7 +27,7 @@ func TestDispatchSubMsgSuccessCase(t *testing.T) { contractStart := sdk.NewCoins(sdk.NewInt64Coin("denom", 40000)) creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) - creatorBalance := deposit.Sub(contractStart) + creatorBalance := deposit.Sub(contractStart...) _, _, fred := keyPubAddr() // upload code diff --git a/x/wasm/keeper/test_common.go b/x/wasm/keeper/test_common.go index 717228962d..ce12ddd981 100644 --- a/x/wasm/keeper/test_common.go +++ b/x/wasm/keeper/test_common.go @@ -14,6 +14,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/std" "github.com/cosmos/cosmos-sdk/store" + storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/module" @@ -37,8 +38,11 @@ import ( evidencetypes "github.com/cosmos/cosmos-sdk/x/evidence/types" "github.com/cosmos/cosmos-sdk/x/feegrant" "github.com/cosmos/cosmos-sdk/x/gov" + govclient "github.com/cosmos/cosmos-sdk/x/gov/client" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/cosmos/cosmos-sdk/x/mint" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" "github.com/cosmos/cosmos-sdk/x/params" @@ -55,11 +59,11 @@ import ( upgradeclient "github.com/cosmos/cosmos-sdk/x/upgrade/client" upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - "github.com/cosmos/ibc-go/v3/modules/apps/transfer" - ibctransfertypes "github.com/cosmos/ibc-go/v3/modules/apps/transfer/types" - ibc "github.com/cosmos/ibc-go/v3/modules/core" - ibchost "github.com/cosmos/ibc-go/v3/modules/core/24-host" - ibckeeper "github.com/cosmos/ibc-go/v3/modules/core/keeper" + "github.com/cosmos/ibc-go/v5/modules/apps/transfer" + ibctransfertypes "github.com/cosmos/ibc-go/v5/modules/apps/transfer/types" + ibc "github.com/cosmos/ibc-go/v5/modules/core" + ibchost "github.com/cosmos/ibc-go/v5/modules/core/24-host" + ibckeeper "github.com/cosmos/ibc-go/v5/modules/core/keeper" "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/crypto" "github.com/tendermint/tendermint/crypto/ed25519" @@ -81,9 +85,9 @@ var moduleBasics = module.NewBasicManager( staking.AppModuleBasic{}, mint.AppModuleBasic{}, distribution.AppModuleBasic{}, - gov.NewAppModuleBasic( - paramsclient.ProposalHandler, distrclient.ProposalHandler, upgradeclient.ProposalHandler, - ), + gov.NewAppModuleBasic([]govclient.ProposalHandler{ + paramsclient.ProposalHandler, distrclient.ProposalHandler, upgradeclient.LegacyProposalHandler, + }), params.AppModuleBasic{}, crisis.AppModuleBasic{}, slashing.AppModuleBasic{}, @@ -159,7 +163,7 @@ func (f *TestFaucet) Fund(parentCtx sdk.Context, receiver sdk.AccAddress, amount ctx := parentCtx.WithEventManager(sdk.NewEventManager()) // discard all faucet related events err := f.bankKeeper.SendCoins(ctx, f.sender, receiver, amounts) require.NoError(f.t, err) - f.balance = f.balance.Sub(amounts) + f.balance = f.balance.Sub(amounts...) } func (f *TestFaucet) NewFundedAccount(ctx sdk.Context, amounts ...sdk.Coin) sdk.AccAddress { @@ -177,7 +181,7 @@ type TestKeepers struct { ContractKeeper types.ContractOpsKeeper WasmKeeper *Keeper IBCKeeper *ibckeeper.Keeper - Router *baseapp.Router + Router *baseapp.MsgServiceRouter EncodingConfig wasmappparams.EncodingConfig Faucet *TestFaucet MultiStore sdk.CommitMultiStore @@ -215,16 +219,16 @@ func createTestInput( ) ms := store.NewCommitMultiStore(db) for _, v := range keys { - ms.MountStoreWithDB(v, sdk.StoreTypeIAVL, db) + ms.MountStoreWithDB(v, storetypes.StoreTypeIAVL, db) } tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey) for _, v := range tkeys { - ms.MountStoreWithDB(v, sdk.StoreTypeTransient, db) + ms.MountStoreWithDB(v, storetypes.StoreTypeTransient, db) } memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey) for _, v := range memKeys { - ms.MountStoreWithDB(v, sdk.StoreTypeMemory, db) + ms.MountStoreWithDB(v, storetypes.StoreTypeMemory, db) } require.NoError(t, ms.LoadLatestVersion()) @@ -281,6 +285,7 @@ func createTestInput( subspace(authtypes.ModuleName), authtypes.ProtoBaseAccount, // prototype maccPerms, + sdk.GetConfig().GetBech32AccountAddrPrefix(), ) blockedAddrs := make(map[string]bool) for acc := range maccPerms { @@ -313,7 +318,6 @@ func createTestInput( bankKeeper, stakingKeeper, authtypes.FeeCollectorName, - nil, ) distKeeper.SetParams(ctx, distributiontypes.DefaultParams()) stakingKeeper.SetHooks(distKeeper.Hooks()) @@ -327,6 +331,7 @@ func createTestInput( appCodec, tempDir, nil, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) faucet := NewTestFaucet(t, ctx, bankKeeper, minttypes.ModuleName, sdk.NewCoin("stake", sdk.NewInt(100_000_000_000))) @@ -354,13 +359,10 @@ func createTestInput( scopedIBCKeeper, ) - router := baseapp.NewRouter() - bh := bank.NewHandler(bankKeeper) - router.AddRoute(sdk.NewRoute(banktypes.RouterKey, bh)) - sh := staking.NewHandler(stakingKeeper) - router.AddRoute(sdk.NewRoute(stakingtypes.RouterKey, sh)) - dh := distribution.NewHandler(distKeeper) - router.AddRoute(sdk.NewRoute(distributiontypes.RouterKey, dh)) + router := baseapp.NewMsgServiceRouter() + banktypes.RegisterMsgServer(router, bankkeeper.NewMsgServerImpl(bankKeeper)) + stakingtypes.RegisterMsgServer(router, stakingkeeper.NewMsgServerImpl(stakingKeeper)) + distributiontypes.RegisterMsgServer(router, distributionkeeper.NewMsgServerImpl(distKeeper)) querier := baseapp.NewGRPCQueryRouter() querier.SetInterfaceRegistry(encodingConfig.InterfaceRegistry) @@ -392,7 +394,7 @@ func createTestInput( keeper.SetParams(ctx, types.DefaultParams()) // add wasm handler so we can loop-back (contracts calling contracts) contractKeeper := NewDefaultPermissionKeeper(&keeper) - router.AddRoute(sdk.NewRoute(types.RouterKey, TestHandler(contractKeeper))) + types.RegisterMsgServer(router, NewMsgServerImpl(contractKeeper)) am := module.NewManager( // minimal module set that we use for message/ query tests bank.NewAppModule(appCodec, bankKeeper, accountKeeper), @@ -403,26 +405,34 @@ func createTestInput( types.RegisterMsgServer(msgRouter, NewMsgServerImpl(NewDefaultPermissionKeeper(keeper))) types.RegisterQueryServer(querier, NewGrpcQuerier(appCodec, keys[types.ModuleName], keeper, keeper.queryGasLimit)) - govRouter := govtypes.NewRouter(). - AddRoute(govtypes.RouterKey, govtypes.ProposalHandler). + govRouter := govv1beta1.NewRouter(). + AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler). AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(paramsKeeper)). AddRoute(distributiontypes.RouterKey, distribution.NewCommunityPoolSpendProposalHandler(distKeeper)). AddRoute(types.RouterKey, NewWasmProposalHandler(&keeper, types.EnableAllProposals)) + govConfig := govtypes.DefaultConfig() + /* + Example of setting gov params: + govConfig.MaxMetadataLen = 10000 + */ + govKeeper := govkeeper.NewKeeper( appCodec, keys[govtypes.StoreKey], - subspace(govtypes.ModuleName).WithKeyTable(govtypes.ParamKeyTable()), + subspace(govtypes.ModuleName).WithKeyTable(govv1.ParamKeyTable()), accountKeeper, bankKeeper, stakingKeeper, govRouter, + baseapp.NewMsgServiceRouter(), + govConfig, ) - govKeeper.SetProposalID(ctx, govtypes.DefaultStartingProposalID) - govKeeper.SetDepositParams(ctx, govtypes.DefaultDepositParams()) - govKeeper.SetVotingParams(ctx, govtypes.DefaultVotingParams()) - govKeeper.SetTallyParams(ctx, govtypes.DefaultTallyParams()) + govKeeper.SetProposalID(ctx, govv1beta1.DefaultStartingProposalID) + govKeeper.SetDepositParams(ctx, govv1.DefaultDepositParams()) + govKeeper.SetVotingParams(ctx, govv1.DefaultVotingParams()) + govKeeper.SetTallyParams(ctx, govv1.DefaultTallyParams()) keepers := TestKeepers{ AccountKeeper: accountKeeper, diff --git a/x/wasm/keeper/wasmtesting/mock_keepers.go b/x/wasm/keeper/wasmtesting/mock_keepers.go index 4295b24ef0..73eba9c9f3 100644 --- a/x/wasm/keeper/wasmtesting/mock_keepers.go +++ b/x/wasm/keeper/wasmtesting/mock_keepers.go @@ -3,8 +3,8 @@ package wasmtesting import ( sdk "github.com/cosmos/cosmos-sdk/types" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v3/modules/core/exported" + channeltypes "github.com/cosmos/ibc-go/v5/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v5/modules/core/exported" "github.com/CosmWasm/wasmd/x/wasm/types" ) diff --git a/x/wasm/module.go b/x/wasm/module.go index a237a910d4..31acb6118c 100644 --- a/x/wasm/module.go +++ b/x/wasm/module.go @@ -13,14 +13,12 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/gorilla/mux" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cast" "github.com/spf13/cobra" abci "github.com/tendermint/tendermint/abci/types" "github.com/CosmWasm/wasmd/x/wasm/client/cli" - "github.com/CosmWasm/wasmd/x/wasm/client/rest" "github.com/CosmWasm/wasmd/x/wasm/keeper" "github.com/CosmWasm/wasmd/x/wasm/simulation" "github.com/CosmWasm/wasmd/x/wasm/types" @@ -75,11 +73,6 @@ func (b AppModuleBasic) ValidateGenesis(marshaler codec.JSONCodec, config client return ValidateGenesis(data) } -// RegisterRESTRoutes registers the REST routes for the wasm module. -func (AppModuleBasic) RegisterRESTRoutes(cliCtx client.Context, rtr *mux.Router) { - rest.RegisterRoutes(cliCtx, rtr) -} - // GetTxCmd returns the root tx command for the wasm module. func (b AppModuleBasic) GetTxCmd() *cobra.Command { return cli.GetTxCmd() diff --git a/x/wasm/relay_pingpong_test.go b/x/wasm/relay_pingpong_test.go index 46c32497b3..aa8342d711 100644 --- a/x/wasm/relay_pingpong_test.go +++ b/x/wasm/relay_pingpong_test.go @@ -5,15 +5,15 @@ import ( "fmt" "testing" - ibctransfertypes "github.com/cosmos/ibc-go/v3/modules/apps/transfer/types" - ibctesting "github.com/cosmos/ibc-go/v3/testing" + ibctransfertypes "github.com/cosmos/ibc-go/v5/modules/apps/transfer/types" + ibctesting "github.com/cosmos/ibc-go/v5/testing" wasmvm "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" "github.com/cosmos/cosmos-sdk/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" - clienttypes "github.com/cosmos/ibc-go/v3/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + clienttypes "github.com/cosmos/ibc-go/v5/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v5/modules/core/04-channel/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/x/wasm/relay_test.go b/x/wasm/relay_test.go index 5edd182d59..8e8fc61c0a 100644 --- a/x/wasm/relay_test.go +++ b/x/wasm/relay_test.go @@ -6,14 +6,14 @@ import ( "testing" "time" + sdkerrors "cosmossdk.io/errors" wasmvm "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - ibctransfertypes "github.com/cosmos/ibc-go/v3/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v3/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" - ibctesting "github.com/cosmos/ibc-go/v3/testing" + ibctransfertypes "github.com/cosmos/ibc-go/v5/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v5/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v5/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v5/testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/x/wasm/simulation/sim_utils.go b/x/wasm/simulation/sim_utils.go index b29c18cf28..a915670a13 100644 --- a/x/wasm/simulation/sim_utils.go +++ b/x/wasm/simulation/sim_utils.go @@ -15,7 +15,7 @@ func GenAndDeliverTxWithRandFees(txCtx simulation.OperationInput, gas uint64) (s var fees sdk.Coins var err error - coins, hasNeg := spendable.SafeSub(txCtx.CoinsSpentInMsg) + coins, hasNeg := spendable.SafeSub(txCtx.CoinsSpentInMsg...) if hasNeg { return simtypes.NoOpMsg(txCtx.ModuleName, txCtx.MsgType, "message doesn't leave room for fees"), nil, err } @@ -30,7 +30,7 @@ func GenAndDeliverTxWithRandFees(txCtx simulation.OperationInput, gas uint64) (s // GenAndDeliverTx generates a transactions and delivers it. func GenAndDeliverTx(txCtx simulation.OperationInput, fees sdk.Coins, gas uint64) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { account := txCtx.AccountKeeper.GetAccount(txCtx.Context, txCtx.SimAccount.Address) - tx, err := helpers.GenTx( + tx, err := helpers.GenSignedMockTx( txCtx.R, txCtx.TxGen, []sdk.Msg{txCtx.Msg}, @@ -45,7 +45,7 @@ func GenAndDeliverTx(txCtx simulation.OperationInput, fees sdk.Coins, gas uint64 return simtypes.NoOpMsg(txCtx.ModuleName, txCtx.MsgType, "unable to generate mock tx"), nil, err } - _, _, err = txCtx.App.Deliver(txCtx.TxGen.TxEncoder(), tx) + _, _, err = txCtx.App.SimDeliver(txCtx.TxGen.TxEncoder(), tx) if err != nil { return simtypes.NoOpMsg(txCtx.ModuleName, txCtx.MsgType, "unable to deliver tx"), nil, err } diff --git a/x/wasm/types/codec.go b/x/wasm/types/codec.go index e7e578b7f8..d21d2ecd86 100644 --- a/x/wasm/types/codec.go +++ b/x/wasm/types/codec.go @@ -6,7 +6,7 @@ import ( cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/msgservice" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" ) // RegisterLegacyAminoCodec registers the account types and interface @@ -43,7 +43,7 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { &MsgIBCSend{}, ) registry.RegisterImplementations( - (*govtypes.Content)(nil), + (*govv1beta1.Content)(nil), &StoreCodeProposal{}, &InstantiateContractProposal{}, &MigrateContractProposal{}, diff --git a/x/wasm/types/expected_keepers.go b/x/wasm/types/expected_keepers.go index 0cdd4d80e0..d59eb74ac7 100644 --- a/x/wasm/types/expected_keepers.go +++ b/x/wasm/types/expected_keepers.go @@ -8,9 +8,9 @@ import ( capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" "github.com/cosmos/cosmos-sdk/x/distribution/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - connectiontypes "github.com/cosmos/ibc-go/v3/modules/core/03-connection/types" - channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v3/modules/core/exported" + connectiontypes "github.com/cosmos/ibc-go/v5/modules/core/03-connection/types" + channeltypes "github.com/cosmos/ibc-go/v5/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v5/modules/core/exported" ) // BankViewKeeper defines a subset of methods implemented by the cosmos-sdk bank keeper diff --git a/x/wasm/types/genesis_test.go b/x/wasm/types/genesis_test.go index 3ef424e7e5..5fb4c9ecd9 100644 --- a/x/wasm/types/genesis_test.go +++ b/x/wasm/types/genesis_test.go @@ -8,7 +8,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/stretchr/testify/assert" "github.com/tendermint/tendermint/libs/rand" diff --git a/x/wasm/types/proposal.go b/x/wasm/types/proposal.go index 748a03895b..d1e2635242 100644 --- a/x/wasm/types/proposal.go +++ b/x/wasm/types/proposal.go @@ -8,6 +8,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" ) type ProposalType string @@ -61,26 +62,26 @@ func ConvertToProposals(keys []string) ([]ProposalType, error) { } func init() { // register new content types with the sdk - govtypes.RegisterProposalType(string(ProposalTypeStoreCode)) - govtypes.RegisterProposalType(string(ProposalTypeInstantiateContract)) - govtypes.RegisterProposalType(string(ProposalTypeMigrateContract)) - govtypes.RegisterProposalType(string(ProposalTypeSudoContract)) - govtypes.RegisterProposalType(string(ProposalTypeExecuteContract)) - govtypes.RegisterProposalType(string(ProposalTypeUpdateAdmin)) - govtypes.RegisterProposalType(string(ProposalTypeClearAdmin)) - govtypes.RegisterProposalType(string(ProposalTypePinCodes)) - govtypes.RegisterProposalType(string(ProposalTypeUnpinCodes)) - govtypes.RegisterProposalType(string(ProposalTypeUpdateInstantiateConfig)) - govtypes.RegisterProposalTypeCodec(&StoreCodeProposal{}, "wasm/StoreCodeProposal") - govtypes.RegisterProposalTypeCodec(&InstantiateContractProposal{}, "wasm/InstantiateContractProposal") - govtypes.RegisterProposalTypeCodec(&MigrateContractProposal{}, "wasm/MigrateContractProposal") - govtypes.RegisterProposalTypeCodec(&SudoContractProposal{}, "wasm/SudoContractProposal") - govtypes.RegisterProposalTypeCodec(&ExecuteContractProposal{}, "wasm/ExecuteContractProposal") - govtypes.RegisterProposalTypeCodec(&UpdateAdminProposal{}, "wasm/UpdateAdminProposal") - govtypes.RegisterProposalTypeCodec(&ClearAdminProposal{}, "wasm/ClearAdminProposal") - govtypes.RegisterProposalTypeCodec(&PinCodesProposal{}, "wasm/PinCodesProposal") - govtypes.RegisterProposalTypeCodec(&UnpinCodesProposal{}, "wasm/UnpinCodesProposal") - govtypes.RegisterProposalTypeCodec(&UpdateInstantiateConfigProposal{}, "wasm/UpdateInstantiateConfigProposal") + govv1beta1.RegisterProposalType(string(ProposalTypeStoreCode)) + govv1beta1.RegisterProposalType(string(ProposalTypeInstantiateContract)) + govv1beta1.RegisterProposalType(string(ProposalTypeMigrateContract)) + govv1beta1.RegisterProposalType(string(ProposalTypeSudoContract)) + govv1beta1.RegisterProposalType(string(ProposalTypeExecuteContract)) + govv1beta1.RegisterProposalType(string(ProposalTypeUpdateAdmin)) + govv1beta1.RegisterProposalType(string(ProposalTypeClearAdmin)) + govv1beta1.RegisterProposalType(string(ProposalTypePinCodes)) + govv1beta1.RegisterProposalType(string(ProposalTypeUnpinCodes)) + govv1beta1.RegisterProposalType(string(ProposalTypeUpdateInstantiateConfig)) + govv1beta1.ModuleCdc.LegacyAmino.RegisterConcrete(&StoreCodeProposal{}, "wasm/StoreCodeProposal", nil) + govv1beta1.ModuleCdc.LegacyAmino.RegisterConcrete(&InstantiateContractProposal{}, "wasm/InstantiateContractProposal", nil) + govv1beta1.ModuleCdc.LegacyAmino.RegisterConcrete(&MigrateContractProposal{}, "wasm/MigrateContractProposal", nil) + govv1beta1.ModuleCdc.LegacyAmino.RegisterConcrete(&SudoContractProposal{}, "wasm/SudoContractProposal", nil) + govv1beta1.ModuleCdc.LegacyAmino.RegisterConcrete(&ExecuteContractProposal{}, "wasm/ExecuteContractProposal", nil) + govv1beta1.ModuleCdc.LegacyAmino.RegisterConcrete(&UpdateAdminProposal{}, "wasm/UpdateAdminProposal", nil) + govv1beta1.ModuleCdc.LegacyAmino.RegisterConcrete(&ClearAdminProposal{}, "wasm/ClearAdminProposal", nil) + govv1beta1.ModuleCdc.LegacyAmino.RegisterConcrete(&PinCodesProposal{}, "wasm/PinCodesProposal", nil) + govv1beta1.ModuleCdc.LegacyAmino.RegisterConcrete(&UnpinCodesProposal{}, "wasm/UnpinCodesProposal", nil) + govv1beta1.ModuleCdc.LegacyAmino.RegisterConcrete(&UpdateInstantiateConfigProposal{}, "wasm/UpdateInstantiateConfigProposal", nil) } // ProposalRoute returns the routing key of a parameter change proposal. @@ -536,8 +537,8 @@ func validateProposalCommons(title, description string) error { if len(title) == 0 { return sdkerrors.Wrap(govtypes.ErrInvalidProposalContent, "proposal title cannot be blank") } - if len(title) > govtypes.MaxTitleLength { - return sdkerrors.Wrapf(govtypes.ErrInvalidProposalContent, "proposal title is longer than max length of %d", govtypes.MaxTitleLength) + if len(title) > govv1beta1.MaxTitleLength { + return sdkerrors.Wrapf(govtypes.ErrInvalidProposalContent, "proposal title is longer than max length of %d", govv1beta1.MaxTitleLength) } if strings.TrimSpace(description) != description { return sdkerrors.Wrap(govtypes.ErrInvalidProposalContent, "proposal description must not start/end with white spaces") @@ -545,8 +546,8 @@ func validateProposalCommons(title, description string) error { if len(description) == 0 { return sdkerrors.Wrap(govtypes.ErrInvalidProposalContent, "proposal description cannot be blank") } - if len(description) > govtypes.MaxDescriptionLength { - return sdkerrors.Wrapf(govtypes.ErrInvalidProposalContent, "proposal description is longer than max length of %d", govtypes.MaxDescriptionLength) + if len(description) > govv1beta1.MaxDescriptionLength { + return sdkerrors.Wrapf(govtypes.ErrInvalidProposalContent, "proposal description is longer than max length of %d", govv1beta1.MaxDescriptionLength) } return nil } diff --git a/x/wasm/types/proposal_test.go b/x/wasm/types/proposal_test.go index fcc378d390..fe5139c447 100644 --- a/x/wasm/types/proposal_test.go +++ b/x/wasm/types/proposal_test.go @@ -7,7 +7,7 @@ import ( "testing" sdk "github.com/cosmos/cosmos-sdk/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "gopkg.in/yaml.v2" @@ -48,7 +48,7 @@ func TestValidateProposalCommons(t *testing.T) { }, "prevent title exceeds max length ": { src: commonProposal{ - Title: strings.Repeat("a", govtypes.MaxTitleLength+1), + Title: strings.Repeat("a", govv1beta1.MaxTitleLength+1), Description: "Bar", }, expErr: true, @@ -76,7 +76,7 @@ func TestValidateProposalCommons(t *testing.T) { "prevent descr exceeds max length ": { src: commonProposal{ Title: "Foo", - Description: strings.Repeat("a", govtypes.MaxDescriptionLength+1), + Description: strings.Repeat("a", govv1beta1.MaxDescriptionLength+1), }, expErr: true, }, @@ -521,7 +521,7 @@ func TestValidateClearAdminProposal(t *testing.T) { func TestProposalStrings(t *testing.T) { specs := map[string]struct { - src govtypes.Content + src govv1beta1.Content exp string }{ "store code": { @@ -637,7 +637,7 @@ func TestProposalStrings(t *testing.T) { func TestProposalYaml(t *testing.T) { specs := map[string]struct { - src govtypes.Content + src govv1beta1.Content exp string }{ "store code": { @@ -782,8 +782,8 @@ func TestConvertToProposals(t *testing.T) { func TestUnmarshalContentFromJson(t *testing.T) { specs := map[string]struct { src string - got govtypes.Content - exp govtypes.Content + got govv1beta1.Content + exp govv1beta1.Content }{ "instantiate ": { src: ` @@ -840,7 +840,7 @@ func TestUnmarshalContentFromJson(t *testing.T) { func TestProposalJsonSignBytes(t *testing.T) { const myInnerMsg = `{"foo":"bar"}` specs := map[string]struct { - src govtypes.Content + src govv1beta1.Content exp string }{ "instantiate contract": { @@ -862,7 +862,7 @@ func TestProposalJsonSignBytes(t *testing.T) { } for name, spec := range specs { t.Run(name, func(t *testing.T) { - msg, err := govtypes.NewMsgSubmitProposal(spec.src, sdk.NewCoins(), []byte{}) + msg, err := govv1beta1.NewMsgSubmitProposal(spec.src, sdk.NewCoins(), []byte{}) require.NoError(t, err) bz := msg.GetSignBytes() diff --git a/x/wasm/types/tx_test.go b/x/wasm/types/tx_test.go index b0ea43e969..b5e4f4cb98 100644 --- a/x/wasm/types/tx_test.go +++ b/x/wasm/types/tx_test.go @@ -5,7 +5,7 @@ import ( "strings" "testing" - "github.com/cosmos/cosmos-sdk/x/auth/legacy/legacytx" + "github.com/cosmos/cosmos-sdk/x/auth/migrations/legacytx" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/assert" @@ -15,7 +15,7 @@ import ( const firstCodeID = 1 func TestStoreCodeValidation(t *testing.T) { - bad, err := sdk.AccAddressFromHex("012345") + bad, err := sdk.AccAddressFromHexUnsafe("012345") require.NoError(t, err) badAddress := bad.String() // proper address size @@ -79,7 +79,7 @@ func TestStoreCodeValidation(t *testing.T) { } func TestInstantiateContractValidation(t *testing.T) { - bad, err := sdk.AccAddressFromHex("012345") + bad, err := sdk.AccAddressFromHexUnsafe("012345") require.NoError(t, err) badAddress := bad.String() // proper address size @@ -186,7 +186,7 @@ func TestInstantiateContractValidation(t *testing.T) { } func TestExecuteContractValidation(t *testing.T) { - bad, err := sdk.AccAddressFromHex("012345") + bad, err := sdk.AccAddressFromHexUnsafe("012345") require.NoError(t, err) badAddress := bad.String() // proper address size @@ -295,7 +295,7 @@ func TestExecuteContractValidation(t *testing.T) { } func TestMsgUpdateAdministrator(t *testing.T) { - bad, err := sdk.AccAddressFromHex("012345") + bad, err := sdk.AccAddressFromHexUnsafe("012345") require.NoError(t, err) badAddress := bad.String() // proper address size @@ -367,7 +367,7 @@ func TestMsgUpdateAdministrator(t *testing.T) { } func TestMsgClearAdministrator(t *testing.T) { - bad, err := sdk.AccAddressFromHex("012345") + bad, err := sdk.AccAddressFromHexUnsafe("012345") require.NoError(t, err) badAddress := bad.String() // proper address size @@ -418,7 +418,7 @@ func TestMsgClearAdministrator(t *testing.T) { } func TestMsgMigrateContract(t *testing.T) { - bad, err := sdk.AccAddressFromHex("012345") + bad, err := sdk.AccAddressFromHexUnsafe("012345") require.NoError(t, err) badAddress := bad.String() // proper address size diff --git a/x/wasm/types/types_test.go b/x/wasm/types/types_test.go index 117415930d..64f3ee06e1 100644 --- a/x/wasm/types/types_test.go +++ b/x/wasm/types/types_test.go @@ -12,7 +12,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec/types" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/libs/rand" From 271525ba0c6a7ef6e794cd4e9d01863bf657ad59 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 13 Aug 2022 22:54:51 +0700 Subject: [PATCH 027/120] TestInitGenesis fails --- app/export.go | 3 +- app/test_helpers.go | 9 +- go.mod | 2 +- x/wasm/client/cli/genesis_msg.go | 3 + x/wasm/client/cli/gov_tx.go | 100 ++++++++++----------- x/wasm/client/cli/query.go | 4 +- x/wasm/client/cli/tx.go | 4 +- x/wasm/ibctesting/chain.go | 4 - x/wasm/ibctesting/wasm.go | 4 +- x/wasm/keeper/genesis_test.go | 17 ++-- x/wasm/keeper/snapshotter.go | 2 +- x/wasm/keeper/test_common.go | 4 +- x/wasm/simulation/operations.go | 5 +- x/wasm/types/genesis.pb.go | 51 +---------- x/wasm/types/ibc.pb.go | 27 +----- x/wasm/types/proposal.pb.go | 94 ++------------------ x/wasm/types/query.pb.go | 144 ++----------------------------- x/wasm/types/query.pb.gw.go | 71 ++++++++++++--- x/wasm/types/tx.pb.go | 103 +++------------------- x/wasm/types/types.go | 9 +- x/wasm/types/types.pb.go | 73 ++-------------- 21 files changed, 181 insertions(+), 552 deletions(-) diff --git a/app/export.go b/app/export.go index 4740592806..ce09220931 100644 --- a/app/export.go +++ b/app/export.go @@ -46,7 +46,8 @@ func (app *WasmApp) ExportAppStateAndValidators( // prepare for fresh start at zero height // NOTE zero height genesis is a temporary feature which will be deprecated -// in favour of export at a block height +// +// in favour of export at a block height func (app *WasmApp) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []string) { applyAllowedAddrs := false diff --git a/app/test_helpers.go b/app/test_helpers.go index 678f5e469a..8c81c16f18 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -11,6 +11,7 @@ import ( "testing" "time" + "cosmossdk.io/math" bam "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" codectypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -204,7 +205,7 @@ func createIncrementalAccounts(accNum int) []sdk.AccAddress { } // AddTestAddrsFromPubKeys adds the addresses into the WasmApp providing only the public keys. -func AddTestAddrsFromPubKeys(app *WasmApp, ctx sdk.Context, pubKeys []cryptotypes.PubKey, accAmt sdk.Int) { +func AddTestAddrsFromPubKeys(app *WasmApp, ctx sdk.Context, pubKeys []cryptotypes.PubKey, accAmt math.Int) { initCoins := sdk.NewCoins(sdk.NewCoin(app.stakingKeeper.BondDenom(ctx), accAmt)) for _, pk := range pubKeys { @@ -214,17 +215,17 @@ func AddTestAddrsFromPubKeys(app *WasmApp, ctx sdk.Context, pubKeys []cryptotype // AddTestAddrs constructs and returns accNum amount of accounts with an // initial balance of accAmt in random order -func AddTestAddrs(app *WasmApp, ctx sdk.Context, accNum int, accAmt sdk.Int) []sdk.AccAddress { +func AddTestAddrs(app *WasmApp, ctx sdk.Context, accNum int, accAmt math.Int) []sdk.AccAddress { return addTestAddrs(app, ctx, accNum, accAmt, createRandomAccounts) } // AddTestAddrs constructs and returns accNum amount of accounts with an // initial balance of accAmt in random order -func AddTestAddrsIncremental(app *WasmApp, ctx sdk.Context, accNum int, accAmt sdk.Int) []sdk.AccAddress { +func AddTestAddrsIncremental(app *WasmApp, ctx sdk.Context, accNum int, accAmt math.Int) []sdk.AccAddress { return addTestAddrs(app, ctx, accNum, accAmt, createIncrementalAccounts) } -func addTestAddrs(app *WasmApp, ctx sdk.Context, accNum int, accAmt sdk.Int, strategy GenerateAccountStrategy) []sdk.AccAddress { +func addTestAddrs(app *WasmApp, ctx sdk.Context, accNum int, accAmt math.Int, strategy GenerateAccountStrategy) []sdk.AccAddress { testAddrs := strategy(accNum) initCoins := sdk.NewCoins(sdk.NewCoin(app.stakingKeeper.BondDenom(ctx), accAmt)) diff --git a/go.mod b/go.mod index d990996c5d..2fb2bf551e 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.18 require ( cosmossdk.io/errors v1.0.0-beta.7 + cosmossdk.io/math v1.0.0-beta.3 github.com/CosmWasm/wasmvm v1.0.0 github.com/cosmos/cosmos-sdk v0.46.1-0.20220811143248-629b3b9df8de github.com/cosmos/iavl v0.19.1 @@ -38,7 +39,6 @@ require ( cloud.google.com/go/compute v1.6.1 // indirect cloud.google.com/go/iam v0.3.0 // indirect cloud.google.com/go/storage v1.14.0 // indirect - cosmossdk.io/math v1.0.0-beta.3 // indirect filippo.io/edwards25519 v1.0.0-rc.1 // indirect github.com/99designs/keyring v1.2.1 // indirect github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect diff --git a/x/wasm/client/cli/genesis_msg.go b/x/wasm/client/cli/genesis_msg.go index d2a0d639e6..b0de762f7e 100644 --- a/x/wasm/client/cli/genesis_msg.go +++ b/x/wasm/client/cli/genesis_msg.go @@ -504,6 +504,9 @@ func getActorAddress(cmd *cobra.Command) (sdk.AccAddress, error) { homeDir := clientCtx.HomeDir // attempt to lookup address from Keybase if no address was provided kb, err := keyring.New(sdk.KeyringServiceName(), keyringBackend, homeDir, inBuf, clientCtx.Codec) + if err != nil { + return nil, fmt.Errorf("failed to get keyring service name: %w", err) + } info, err := kb.Key(actorArg) if err != nil { diff --git a/x/wasm/client/cli/gov_tx.go b/x/wasm/client/cli/gov_tx.go index b226089e0d..70bb3fc630 100644 --- a/x/wasm/client/cli/gov_tx.go +++ b/x/wasm/client/cli/gov_tx.go @@ -39,11 +39,11 @@ func ProposalStoreCodeCmd() *cobra.Command { if len(runAs) == 0 { return errors.New("run-as address is required") } - proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) + proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) //nolint:staticcheck if err != nil { return fmt.Errorf("proposal title: %s", err) } - proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) + proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) //nolint:staticcheck if err != nil { return fmt.Errorf("proposal description: %s", err) } @@ -82,10 +82,10 @@ func ProposalStoreCodeCmd() *cobra.Command { cmd.Flags().String(flagInstantiateByAddress, "", "Only this address can instantiate a contract instance from the code, optional") // proposal flags - cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") - cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") + cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") //nolint:staticcheck + cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") //nolint:staticcheck cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") - cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") + cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd @@ -114,11 +114,11 @@ func ProposalInstantiateContractCmd() *cobra.Command { if len(runAs) == 0 { return errors.New("run-as address is required") } - proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) + proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) //nolint:staticcheck if err != nil { return fmt.Errorf("proposal title: %s", err) } - proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) + proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) //nolint:staticcheck if err != nil { return fmt.Errorf("proposal description: %s", err) } @@ -160,10 +160,10 @@ func ProposalInstantiateContractCmd() *cobra.Command { cmd.Flags().Bool(flagNoAdmin, false, "You must set this explicitly if you don't want an admin") // proposal flags - cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") - cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") + cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") //nolint:staticcheck + cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") //nolint:staticcheck cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") - cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") + cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd @@ -185,11 +185,11 @@ func ProposalMigrateContractCmd() *cobra.Command { return err } - proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) + proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) //nolint:staticcheck if err != nil { return fmt.Errorf("proposal title: %s", err) } - proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) + proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) //nolint:staticcheck if err != nil { return fmt.Errorf("proposal description: %s", err) } @@ -223,10 +223,10 @@ func ProposalMigrateContractCmd() *cobra.Command { } // proposal flags - cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") - cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") + cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") //nolint:staticcheck + cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") //nolint:staticcheck cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") - cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") + cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd @@ -261,11 +261,11 @@ func ProposalExecuteContractCmd() *cobra.Command { if len(runAs) == 0 { return errors.New("run-as address is required") } - proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) + proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) //nolint:staticcheck if err != nil { return fmt.Errorf("proposal title: %s", err) } - proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) + proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) //nolint:staticcheck if err != nil { return fmt.Errorf("proposal description: %s", err) } @@ -302,10 +302,10 @@ func ProposalExecuteContractCmd() *cobra.Command { cmd.Flags().String(flagAmount, "", "Coins to send to the contract during instantiation") // proposal flags - cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") - cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") + cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") //nolint:staticcheck + cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") //nolint:staticcheck cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") - cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") + cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd @@ -325,11 +325,11 @@ func ProposalSudoContractCmd() *cobra.Command { contract := args[0] sudoMsg := []byte(args[1]) - proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) + proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) //nolint:staticcheck if err != nil { return fmt.Errorf("proposal title: %s", err) } - proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) + proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) //nolint:staticcheck if err != nil { return fmt.Errorf("proposal description: %s", err) } @@ -362,10 +362,10 @@ func ProposalSudoContractCmd() *cobra.Command { } // proposal flagsExecute - cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") - cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") + cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") //nolint:staticcheck + cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") //nolint:staticcheck cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") - cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") + cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd @@ -387,11 +387,11 @@ func ProposalUpdateContractAdminCmd() *cobra.Command { return err } - proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) + proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) //nolint:staticcheck if err != nil { return fmt.Errorf("proposal title: %s", err) } - proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) + proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) //nolint:staticcheck if err != nil { return fmt.Errorf("proposal description: %s", err) } @@ -423,10 +423,10 @@ func ProposalUpdateContractAdminCmd() *cobra.Command { }, } // proposal flags - cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") - cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") + cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") //nolint:staticcheck + cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") //nolint:staticcheck cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") - cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") + cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd @@ -443,11 +443,11 @@ func ProposalClearContractAdminCmd() *cobra.Command { return err } - proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) + proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) //nolint:staticcheck if err != nil { return fmt.Errorf("proposal title: %s", err) } - proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) + proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) //nolint:staticcheck if err != nil { return fmt.Errorf("proposal description: %s", err) } @@ -478,10 +478,10 @@ func ProposalClearContractAdminCmd() *cobra.Command { }, } // proposal flags - cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") - cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") + cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") //nolint:staticcheck + cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") //nolint:staticcheck cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") - cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") + cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd @@ -498,11 +498,11 @@ func ProposalPinCodesCmd() *cobra.Command { return err } - proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) + proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) //nolint:staticcheck if err != nil { return fmt.Errorf("proposal title: %s", err) } - proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) + proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) //nolint:staticcheck if err != nil { return fmt.Errorf("proposal description: %s", err) } @@ -537,10 +537,10 @@ func ProposalPinCodesCmd() *cobra.Command { }, } // proposal flags - cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") - cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") + cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") //nolint:staticcheck + cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") //nolint:staticcheck cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") - cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") + cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd @@ -569,11 +569,11 @@ func ProposalUnpinCodesCmd() *cobra.Command { return err } - proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) + proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) //nolint:staticcheck if err != nil { return fmt.Errorf("proposal title: %s", err) } - proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) + proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) //nolint:staticcheck if err != nil { return fmt.Errorf("proposal description: %s", err) } @@ -608,10 +608,10 @@ func ProposalUnpinCodesCmd() *cobra.Command { }, } // proposal flags - cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") - cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") + cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") //nolint:staticcheck + cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") //nolint:staticcheck cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") - cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") + cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd @@ -677,11 +677,11 @@ $ %s tx gov submit-proposal update-instantiate-config 1,nobody 2,everybody 3,%s1 return err } - proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) + proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) //nolint:staticcheck if err != nil { return fmt.Errorf("proposal title: %s", err) } - proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) + proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) //nolint:staticcheck if err != nil { return fmt.Errorf("proposal description: %s", err) } @@ -715,10 +715,10 @@ $ %s tx gov submit-proposal update-instantiate-config 1,nobody 2,everybody 3,%s1 }, } // proposal flags - cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") - cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") + cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") //nolint:staticcheck + cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") //nolint:staticcheck cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") - cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") + cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd diff --git a/x/wasm/client/cli/query.go b/x/wasm/client/cli/query.go index 49cea64ea4..e7a21167af 100644 --- a/x/wasm/client/cli/query.go +++ b/x/wasm/client/cli/query.go @@ -7,7 +7,7 @@ import ( "encoding/json" "errors" "fmt" - "io/ioutil" + "os" "strconv" wasmvm "github.com/CosmWasm/wasmvm" @@ -174,7 +174,7 @@ func GetCmdQueryCode() *cobra.Command { } fmt.Printf("Downloading wasm code to %s\n", args[1]) - return ioutil.WriteFile(args[1], res.Data, 0o600) + return os.WriteFile(args[1], res.Data, 0o600) }, } flags.AddQueryFlagsToCmd(cmd) diff --git a/x/wasm/client/cli/tx.go b/x/wasm/client/cli/tx.go index 8f3203ea68..662758abcc 100644 --- a/x/wasm/client/cli/tx.go +++ b/x/wasm/client/cli/tx.go @@ -3,7 +3,7 @@ package cli import ( "errors" "fmt" - "io/ioutil" + "os" "strconv" "github.com/cosmos/cosmos-sdk/client" @@ -81,7 +81,7 @@ func StoreCodeCmd() *cobra.Command { } func parseStoreCodeArgs(file string, sender sdk.AccAddress, flags *flag.FlagSet) (types.MsgStoreCode, error) { - wasm, err := ioutil.ReadFile(file) + wasm, err := os.ReadFile(file) if err != nil { return types.MsgStoreCode{}, err } diff --git a/x/wasm/ibctesting/chain.go b/x/wasm/ibctesting/chain.go index fe42e89cc7..ac3a816e05 100644 --- a/x/wasm/ibctesting/chain.go +++ b/x/wasm/ibctesting/chain.go @@ -575,10 +575,6 @@ func (a TestingAppDecorator) AppCodec() codec.Codec { return a.TestSupport().AppCodec() } -func (a TestingAppDecorator) AppplySnapshotChunk() func(abci.RequestApplySnapshotChunk) abci.ResponseApplySnapshotChunk { - return a.TestSupport().AppplySnapshotChunk() -} - func (a TestingAppDecorator) GetStakingKeeper() stakingkeeper.Keeper { return a.TestSupport().StakingKeeper() } diff --git a/x/wasm/ibctesting/wasm.go b/x/wasm/ibctesting/wasm.go index 6327696be6..29abb654df 100644 --- a/x/wasm/ibctesting/wasm.go +++ b/x/wasm/ibctesting/wasm.go @@ -5,7 +5,7 @@ import ( "compress/gzip" "encoding/json" "fmt" - "io/ioutil" + "os" "strings" wasmd "github.com/CosmWasm/wasmd/app" @@ -37,7 +37,7 @@ func (chain *TestChain) SeedNewContractInstance() sdk.AccAddress { } func (chain *TestChain) StoreCodeFile(filename string) types.MsgStoreCodeResponse { - wasmCode, err := ioutil.ReadFile(filename) + wasmCode, err := os.ReadFile(filename) require.NoError(chain.t, err) if strings.HasSuffix(filename, "wasm") { // compress for gas limit var buf bytes.Buffer diff --git a/x/wasm/keeper/genesis_test.go b/x/wasm/keeper/genesis_test.go index 61f45ad4c1..fc9dbd5365 100644 --- a/x/wasm/keeper/genesis_test.go +++ b/x/wasm/keeper/genesis_test.go @@ -14,10 +14,11 @@ import ( "github.com/cosmos/cosmos-sdk/store" "github.com/cosmos/cosmos-sdk/store/prefix" + storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" distributionkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypesv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" @@ -73,9 +74,9 @@ func TestGenesisExportImport(t *testing.T) { } if contractExtension { anyTime := time.Now().UTC() - var nestedType govtypes.TextProposal + var nestedType govtypesv1beta1.TextProposal f.NilChance(0).Fuzz(&nestedType) - myExtension, err := govtypes.NewProposal(&nestedType, 1, anyTime, anyTime) + myExtension, err := govtypesv1beta1.NewProposal(&nestedType, 1, anyTime, anyTime) require.NoError(t, err) contract.SetExtension(&myExtension) } @@ -647,9 +648,9 @@ func setupKeeper(t *testing.T) (*Keeper, sdk.Context, []storetypes.StoreKey) { db := dbm.NewMemDB() ms := store.NewCommitMultiStore(db) - ms.MountStoreWithDB(keyWasm, sdk.StoreTypeIAVL, db) - ms.MountStoreWithDB(keyParams, sdk.StoreTypeIAVL, db) - ms.MountStoreWithDB(tkeyParams, sdk.StoreTypeTransient, db) + ms.MountStoreWithDB(keyWasm, storetypes.StoreTypeIAVL, db) + ms.MountStoreWithDB(keyParams, storetypes.StoreTypeIAVL, db) + ms.MountStoreWithDB(tkeyParams, storetypes.StoreTypeTransient, db) require.NoError(t, ms.LoadLatestVersion()) ctx := sdk.NewContext(ms, tmproto.Header{ @@ -661,10 +662,10 @@ func setupKeeper(t *testing.T) (*Keeper, sdk.Context, []storetypes.StoreKey) { // register an example extension. must be protobuf encodingConfig.InterfaceRegistry.RegisterImplementations( (*types.ContractInfoExtension)(nil), - &govtypes.Proposal{}, + &govtypesv1beta1.Proposal{}, ) // also registering gov interfaces for nested Any type - govtypes.RegisterInterfaces(encodingConfig.InterfaceRegistry) + govtypesv1beta1.RegisterInterfaces(encodingConfig.InterfaceRegistry) wasmConfig := wasmTypes.DefaultWasmConfig() pk := paramskeeper.NewKeeper(encodingConfig.Marshaler, encodingConfig.Amino, keyParams, tkeyParams) diff --git a/x/wasm/keeper/snapshotter.go b/x/wasm/keeper/snapshotter.go index 5235876bd6..8eef1bd19f 100644 --- a/x/wasm/keeper/snapshotter.go +++ b/x/wasm/keeper/snapshotter.go @@ -103,7 +103,7 @@ func (ws *WasmSnapshotter) PruneSnapshotHeight(height int64) { } func (ws *WasmSnapshotter) SetSnapshotInterval(snapshotInterval uint64) { - return bapp.snapshotInterval() + // } func restoreV1(ctx sdk.Context, k *Keeper, compressedCode []byte) error { diff --git a/x/wasm/keeper/test_common.go b/x/wasm/keeper/test_common.go index ce12ddd981..21077346f4 100644 --- a/x/wasm/keeper/test_common.go +++ b/x/wasm/keeper/test_common.go @@ -4,7 +4,7 @@ import ( "encoding/binary" "encoding/json" "fmt" - "io/ioutil" + "os" "testing" "time" @@ -568,7 +568,7 @@ func StoreExampleContract(t testing.TB, ctx sdk.Context, keepers TestKeepers, wa creator, _, creatorAddr := keyPubAddr() fundAccounts(t, ctx, keepers.AccountKeeper, keepers.BankKeeper, creatorAddr, anyAmount) - wasmCode, err := ioutil.ReadFile(wasmFile) + wasmCode, err := os.ReadFile(wasmFile) require.NoError(t, err) codeID, err := keepers.ContractKeeper.Create(ctx, creatorAddr, wasmCode, nil) diff --git a/x/wasm/simulation/operations.go b/x/wasm/simulation/operations.go index 66635a2b73..41903002a1 100644 --- a/x/wasm/simulation/operations.go +++ b/x/wasm/simulation/operations.go @@ -2,8 +2,8 @@ package simulation import ( "encoding/json" - "io/ioutil" "math/rand" + "os" wasmvmtypes "github.com/CosmWasm/wasmvm/types" "github.com/cosmos/cosmos-sdk/baseapp" @@ -21,6 +21,7 @@ import ( ) // Simulation operation weights constants +// //nolint:gosec const ( OpWeightMsgStoreCode = "op_weight_msg_store_code" @@ -83,7 +84,7 @@ func WeightedOperations( wasmBz = testdata.ReflectContractWasm() } else { var err error - wasmBz, err = ioutil.ReadFile(wasmContractPath) + wasmBz, err = os.ReadFile(wasmContractPath) if err != nil { panic(err) } diff --git a/x/wasm/types/genesis.pb.go b/x/wasm/types/genesis.pb.go index 17970ef90b..0c5096e421 100644 --- a/x/wasm/types/genesis.pb.go +++ b/x/wasm/types/genesis.pb.go @@ -5,21 +5,17 @@ package types import ( fmt "fmt" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" io "io" math "math" math_bits "math/bits" - - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" ) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal - -var ( - _ = fmt.Errorf - _ = math.Inf -) +var _ = fmt.Errorf +var _ = math.Inf // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. @@ -42,11 +38,9 @@ func (*GenesisState) ProtoMessage() {} func (*GenesisState) Descriptor() ([]byte, []int) { return fileDescriptor_2ab3f539b23472a6, []int{0} } - func (m *GenesisState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_GenesisState.Marshal(b, m, deterministic) @@ -59,15 +53,12 @@ func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) return b[:n], nil } } - func (m *GenesisState) XXX_Merge(src proto.Message) { xxx_messageInfo_GenesisState.Merge(m, src) } - func (m *GenesisState) XXX_Size() int { return m.Size() } - func (m *GenesisState) XXX_DiscardUnknown() { xxx_messageInfo_GenesisState.DiscardUnknown(m) } @@ -127,11 +118,9 @@ func (*GenesisState_GenMsgs) ProtoMessage() {} func (*GenesisState_GenMsgs) Descriptor() ([]byte, []int) { return fileDescriptor_2ab3f539b23472a6, []int{0, 0} } - func (m *GenesisState_GenMsgs) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *GenesisState_GenMsgs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_GenesisState_GenMsgs.Marshal(b, m, deterministic) @@ -144,15 +133,12 @@ func (m *GenesisState_GenMsgs) XXX_Marshal(b []byte, deterministic bool) ([]byte return b[:n], nil } } - func (m *GenesisState_GenMsgs) XXX_Merge(src proto.Message) { xxx_messageInfo_GenesisState_GenMsgs.Merge(m, src) } - func (m *GenesisState_GenMsgs) XXX_Size() int { return m.Size() } - func (m *GenesisState_GenMsgs) XXX_DiscardUnknown() { xxx_messageInfo_GenesisState_GenMsgs.DiscardUnknown(m) } @@ -231,11 +217,9 @@ func (*Code) ProtoMessage() {} func (*Code) Descriptor() ([]byte, []int) { return fileDescriptor_2ab3f539b23472a6, []int{1} } - func (m *Code) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *Code) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_Code.Marshal(b, m, deterministic) @@ -248,15 +232,12 @@ func (m *Code) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return b[:n], nil } } - func (m *Code) XXX_Merge(src proto.Message) { xxx_messageInfo_Code.Merge(m, src) } - func (m *Code) XXX_Size() int { return m.Size() } - func (m *Code) XXX_DiscardUnknown() { xxx_messageInfo_Code.DiscardUnknown(m) } @@ -304,11 +285,9 @@ func (*Contract) ProtoMessage() {} func (*Contract) Descriptor() ([]byte, []int) { return fileDescriptor_2ab3f539b23472a6, []int{2} } - func (m *Contract) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *Contract) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_Contract.Marshal(b, m, deterministic) @@ -321,15 +300,12 @@ func (m *Contract) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return b[:n], nil } } - func (m *Contract) XXX_Merge(src proto.Message) { xxx_messageInfo_Contract.Merge(m, src) } - func (m *Contract) XXX_Size() int { return m.Size() } - func (m *Contract) XXX_DiscardUnknown() { xxx_messageInfo_Contract.DiscardUnknown(m) } @@ -369,11 +345,9 @@ func (*Sequence) ProtoMessage() {} func (*Sequence) Descriptor() ([]byte, []int) { return fileDescriptor_2ab3f539b23472a6, []int{3} } - func (m *Sequence) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *Sequence) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_Sequence.Marshal(b, m, deterministic) @@ -386,15 +360,12 @@ func (m *Sequence) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return b[:n], nil } } - func (m *Sequence) XXX_Merge(src proto.Message) { xxx_messageInfo_Sequence.Merge(m, src) } - func (m *Sequence) XXX_Size() int { return m.Size() } - func (m *Sequence) XXX_DiscardUnknown() { xxx_messageInfo_Sequence.DiscardUnknown(m) } @@ -612,7 +583,6 @@ func (m *GenesisState_GenMsgs_StoreCode) MarshalToSizedBuffer(dAtA []byte) (int, } return len(dAtA) - i, nil } - func (m *GenesisState_GenMsgs_InstantiateContract) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) @@ -634,7 +604,6 @@ func (m *GenesisState_GenMsgs_InstantiateContract) MarshalToSizedBuffer(dAtA []b } return len(dAtA) - i, nil } - func (m *GenesisState_GenMsgs_ExecuteContract) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) @@ -656,7 +625,6 @@ func (m *GenesisState_GenMsgs_ExecuteContract) MarshalToSizedBuffer(dAtA []byte) } return len(dAtA) - i, nil } - func (m *Code) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -812,7 +780,6 @@ func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } - func (m *GenesisState) Size() (n int) { if m == nil { return 0 @@ -872,7 +839,6 @@ func (m *GenesisState_GenMsgs_StoreCode) Size() (n int) { } return n } - func (m *GenesisState_GenMsgs_InstantiateContract) Size() (n int) { if m == nil { return 0 @@ -885,7 +851,6 @@ func (m *GenesisState_GenMsgs_InstantiateContract) Size() (n int) { } return n } - func (m *GenesisState_GenMsgs_ExecuteContract) Size() (n int) { if m == nil { return 0 @@ -898,7 +863,6 @@ func (m *GenesisState_GenMsgs_ExecuteContract) Size() (n int) { } return n } - func (m *Code) Size() (n int) { if m == nil { return 0 @@ -960,11 +924,9 @@ func (m *Sequence) Size() (n int) { func sovGenesis(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } - func sozGenesis(x uint64) (n int) { return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } - func (m *GenesisState) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -1184,7 +1146,6 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { } return nil } - func (m *GenesisState_GenMsgs) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -1340,7 +1301,6 @@ func (m *GenesisState_GenMsgs) Unmarshal(dAtA []byte) error { } return nil } - func (m *Code) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -1497,7 +1457,6 @@ func (m *Code) Unmarshal(dAtA []byte) error { } return nil } - func (m *Contract) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -1647,7 +1606,6 @@ func (m *Contract) Unmarshal(dAtA []byte) error { } return nil } - func (m *Sequence) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -1751,7 +1709,6 @@ func (m *Sequence) Unmarshal(dAtA []byte) error { } return nil } - func skipGenesis(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/wasm/types/ibc.pb.go b/x/wasm/types/ibc.pb.go index 64d22ee35b..ac6c9f0060 100644 --- a/x/wasm/types/ibc.pb.go +++ b/x/wasm/types/ibc.pb.go @@ -5,21 +5,17 @@ package types import ( fmt "fmt" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" io "io" math "math" math_bits "math/bits" - - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" ) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal - -var ( - _ = fmt.Errorf - _ = math.Inf -) +var _ = fmt.Errorf +var _ = math.Inf // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. @@ -48,11 +44,9 @@ func (*MsgIBCSend) ProtoMessage() {} func (*MsgIBCSend) Descriptor() ([]byte, []int) { return fileDescriptor_af0d1c43ea53c4b9, []int{0} } - func (m *MsgIBCSend) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *MsgIBCSend) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_MsgIBCSend.Marshal(b, m, deterministic) @@ -65,15 +59,12 @@ func (m *MsgIBCSend) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return b[:n], nil } } - func (m *MsgIBCSend) XXX_Merge(src proto.Message) { xxx_messageInfo_MsgIBCSend.Merge(m, src) } - func (m *MsgIBCSend) XXX_Size() int { return m.Size() } - func (m *MsgIBCSend) XXX_DiscardUnknown() { xxx_messageInfo_MsgIBCSend.DiscardUnknown(m) } @@ -91,11 +82,9 @@ func (*MsgIBCCloseChannel) ProtoMessage() {} func (*MsgIBCCloseChannel) Descriptor() ([]byte, []int) { return fileDescriptor_af0d1c43ea53c4b9, []int{1} } - func (m *MsgIBCCloseChannel) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *MsgIBCCloseChannel) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_MsgIBCCloseChannel.Marshal(b, m, deterministic) @@ -108,15 +97,12 @@ func (m *MsgIBCCloseChannel) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } - func (m *MsgIBCCloseChannel) XXX_Merge(src proto.Message) { xxx_messageInfo_MsgIBCCloseChannel.Merge(m, src) } - func (m *MsgIBCCloseChannel) XXX_Size() int { return m.Size() } - func (m *MsgIBCCloseChannel) XXX_DiscardUnknown() { xxx_messageInfo_MsgIBCCloseChannel.DiscardUnknown(m) } @@ -241,7 +227,6 @@ func encodeVarintIbc(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } - func (m *MsgIBCSend) Size() (n int) { if m == nil { return 0 @@ -281,11 +266,9 @@ func (m *MsgIBCCloseChannel) Size() (n int) { func sovIbc(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } - func sozIbc(x uint64) (n int) { return sovIbc(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } - func (m *MsgIBCSend) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -440,7 +423,6 @@ func (m *MsgIBCSend) Unmarshal(dAtA []byte) error { } return nil } - func (m *MsgIBCCloseChannel) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -523,7 +505,6 @@ func (m *MsgIBCCloseChannel) Unmarshal(dAtA []byte) error { } return nil } - func skipIbc(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/wasm/types/proposal.pb.go b/x/wasm/types/proposal.pb.go index c4b1d977a8..b5d81d833d 100644 --- a/x/wasm/types/proposal.pb.go +++ b/x/wasm/types/proposal.pb.go @@ -6,23 +6,19 @@ package types import ( bytes "bytes" fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" ) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal - -var ( - _ = fmt.Errorf - _ = math.Inf -) +var _ = fmt.Errorf +var _ = math.Inf // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. @@ -49,11 +45,9 @@ func (*StoreCodeProposal) ProtoMessage() {} func (*StoreCodeProposal) Descriptor() ([]byte, []int) { return fileDescriptor_be6422d717c730cb, []int{0} } - func (m *StoreCodeProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *StoreCodeProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_StoreCodeProposal.Marshal(b, m, deterministic) @@ -66,15 +60,12 @@ func (m *StoreCodeProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, e return b[:n], nil } } - func (m *StoreCodeProposal) XXX_Merge(src proto.Message) { xxx_messageInfo_StoreCodeProposal.Merge(m, src) } - func (m *StoreCodeProposal) XXX_Size() int { return m.Size() } - func (m *StoreCodeProposal) XXX_DiscardUnknown() { xxx_messageInfo_StoreCodeProposal.DiscardUnknown(m) } @@ -107,11 +98,9 @@ func (*InstantiateContractProposal) ProtoMessage() {} func (*InstantiateContractProposal) Descriptor() ([]byte, []int) { return fileDescriptor_be6422d717c730cb, []int{1} } - func (m *InstantiateContractProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *InstantiateContractProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_InstantiateContractProposal.Marshal(b, m, deterministic) @@ -124,15 +113,12 @@ func (m *InstantiateContractProposal) XXX_Marshal(b []byte, deterministic bool) return b[:n], nil } } - func (m *InstantiateContractProposal) XXX_Merge(src proto.Message) { xxx_messageInfo_InstantiateContractProposal.Merge(m, src) } - func (m *InstantiateContractProposal) XXX_Size() int { return m.Size() } - func (m *InstantiateContractProposal) XXX_DiscardUnknown() { xxx_messageInfo_InstantiateContractProposal.DiscardUnknown(m) } @@ -158,11 +144,9 @@ func (*MigrateContractProposal) ProtoMessage() {} func (*MigrateContractProposal) Descriptor() ([]byte, []int) { return fileDescriptor_be6422d717c730cb, []int{2} } - func (m *MigrateContractProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *MigrateContractProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_MigrateContractProposal.Marshal(b, m, deterministic) @@ -175,15 +159,12 @@ func (m *MigrateContractProposal) XXX_Marshal(b []byte, deterministic bool) ([]b return b[:n], nil } } - func (m *MigrateContractProposal) XXX_Merge(src proto.Message) { xxx_messageInfo_MigrateContractProposal.Merge(m, src) } - func (m *MigrateContractProposal) XXX_Size() int { return m.Size() } - func (m *MigrateContractProposal) XXX_DiscardUnknown() { xxx_messageInfo_MigrateContractProposal.DiscardUnknown(m) } @@ -207,11 +188,9 @@ func (*SudoContractProposal) ProtoMessage() {} func (*SudoContractProposal) Descriptor() ([]byte, []int) { return fileDescriptor_be6422d717c730cb, []int{3} } - func (m *SudoContractProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *SudoContractProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_SudoContractProposal.Marshal(b, m, deterministic) @@ -224,15 +203,12 @@ func (m *SudoContractProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte return b[:n], nil } } - func (m *SudoContractProposal) XXX_Merge(src proto.Message) { xxx_messageInfo_SudoContractProposal.Merge(m, src) } - func (m *SudoContractProposal) XXX_Size() int { return m.Size() } - func (m *SudoContractProposal) XXX_DiscardUnknown() { xxx_messageInfo_SudoContractProposal.DiscardUnknown(m) } @@ -261,11 +237,9 @@ func (*ExecuteContractProposal) ProtoMessage() {} func (*ExecuteContractProposal) Descriptor() ([]byte, []int) { return fileDescriptor_be6422d717c730cb, []int{4} } - func (m *ExecuteContractProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *ExecuteContractProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_ExecuteContractProposal.Marshal(b, m, deterministic) @@ -278,15 +252,12 @@ func (m *ExecuteContractProposal) XXX_Marshal(b []byte, deterministic bool) ([]b return b[:n], nil } } - func (m *ExecuteContractProposal) XXX_Merge(src proto.Message) { xxx_messageInfo_ExecuteContractProposal.Merge(m, src) } - func (m *ExecuteContractProposal) XXX_Size() int { return m.Size() } - func (m *ExecuteContractProposal) XXX_DiscardUnknown() { xxx_messageInfo_ExecuteContractProposal.DiscardUnknown(m) } @@ -310,11 +281,9 @@ func (*UpdateAdminProposal) ProtoMessage() {} func (*UpdateAdminProposal) Descriptor() ([]byte, []int) { return fileDescriptor_be6422d717c730cb, []int{5} } - func (m *UpdateAdminProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *UpdateAdminProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_UpdateAdminProposal.Marshal(b, m, deterministic) @@ -327,15 +296,12 @@ func (m *UpdateAdminProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } - func (m *UpdateAdminProposal) XXX_Merge(src proto.Message) { xxx_messageInfo_UpdateAdminProposal.Merge(m, src) } - func (m *UpdateAdminProposal) XXX_Size() int { return m.Size() } - func (m *UpdateAdminProposal) XXX_DiscardUnknown() { xxx_messageInfo_UpdateAdminProposal.DiscardUnknown(m) } @@ -358,11 +324,9 @@ func (*ClearAdminProposal) ProtoMessage() {} func (*ClearAdminProposal) Descriptor() ([]byte, []int) { return fileDescriptor_be6422d717c730cb, []int{6} } - func (m *ClearAdminProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *ClearAdminProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_ClearAdminProposal.Marshal(b, m, deterministic) @@ -375,15 +339,12 @@ func (m *ClearAdminProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } - func (m *ClearAdminProposal) XXX_Merge(src proto.Message) { xxx_messageInfo_ClearAdminProposal.Merge(m, src) } - func (m *ClearAdminProposal) XXX_Size() int { return m.Size() } - func (m *ClearAdminProposal) XXX_DiscardUnknown() { xxx_messageInfo_ClearAdminProposal.DiscardUnknown(m) } @@ -406,11 +367,9 @@ func (*PinCodesProposal) ProtoMessage() {} func (*PinCodesProposal) Descriptor() ([]byte, []int) { return fileDescriptor_be6422d717c730cb, []int{7} } - func (m *PinCodesProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *PinCodesProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_PinCodesProposal.Marshal(b, m, deterministic) @@ -423,15 +382,12 @@ func (m *PinCodesProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, er return b[:n], nil } } - func (m *PinCodesProposal) XXX_Merge(src proto.Message) { xxx_messageInfo_PinCodesProposal.Merge(m, src) } - func (m *PinCodesProposal) XXX_Size() int { return m.Size() } - func (m *PinCodesProposal) XXX_DiscardUnknown() { xxx_messageInfo_PinCodesProposal.DiscardUnknown(m) } @@ -454,11 +410,9 @@ func (*UnpinCodesProposal) ProtoMessage() {} func (*UnpinCodesProposal) Descriptor() ([]byte, []int) { return fileDescriptor_be6422d717c730cb, []int{8} } - func (m *UnpinCodesProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *UnpinCodesProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_UnpinCodesProposal.Marshal(b, m, deterministic) @@ -471,15 +425,12 @@ func (m *UnpinCodesProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } - func (m *UnpinCodesProposal) XXX_Merge(src proto.Message) { xxx_messageInfo_UnpinCodesProposal.Merge(m, src) } - func (m *UnpinCodesProposal) XXX_Size() int { return m.Size() } - func (m *UnpinCodesProposal) XXX_DiscardUnknown() { xxx_messageInfo_UnpinCodesProposal.DiscardUnknown(m) } @@ -500,11 +451,9 @@ func (*AccessConfigUpdate) ProtoMessage() {} func (*AccessConfigUpdate) Descriptor() ([]byte, []int) { return fileDescriptor_be6422d717c730cb, []int{9} } - func (m *AccessConfigUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *AccessConfigUpdate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_AccessConfigUpdate.Marshal(b, m, deterministic) @@ -517,15 +466,12 @@ func (m *AccessConfigUpdate) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } - func (m *AccessConfigUpdate) XXX_Merge(src proto.Message) { xxx_messageInfo_AccessConfigUpdate.Merge(m, src) } - func (m *AccessConfigUpdate) XXX_Size() int { return m.Size() } - func (m *AccessConfigUpdate) XXX_DiscardUnknown() { xxx_messageInfo_AccessConfigUpdate.DiscardUnknown(m) } @@ -549,11 +495,9 @@ func (*UpdateInstantiateConfigProposal) ProtoMessage() {} func (*UpdateInstantiateConfigProposal) Descriptor() ([]byte, []int) { return fileDescriptor_be6422d717c730cb, []int{10} } - func (m *UpdateInstantiateConfigProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *UpdateInstantiateConfigProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_UpdateInstantiateConfigProposal.Marshal(b, m, deterministic) @@ -566,15 +510,12 @@ func (m *UpdateInstantiateConfigProposal) XXX_Marshal(b []byte, deterministic bo return b[:n], nil } } - func (m *UpdateInstantiateConfigProposal) XXX_Merge(src proto.Message) { xxx_messageInfo_UpdateInstantiateConfigProposal.Merge(m, src) } - func (m *UpdateInstantiateConfigProposal) XXX_Size() int { return m.Size() } - func (m *UpdateInstantiateConfigProposal) XXX_DiscardUnknown() { xxx_messageInfo_UpdateInstantiateConfigProposal.DiscardUnknown(m) } @@ -689,7 +630,6 @@ func (this *StoreCodeProposal) Equal(that interface{}) bool { } return true } - func (this *InstantiateContractProposal) Equal(that interface{}) bool { if that == nil { return this == nil @@ -740,7 +680,6 @@ func (this *InstantiateContractProposal) Equal(that interface{}) bool { } return true } - func (this *MigrateContractProposal) Equal(that interface{}) bool { if that == nil { return this == nil @@ -777,7 +716,6 @@ func (this *MigrateContractProposal) Equal(that interface{}) bool { } return true } - func (this *SudoContractProposal) Equal(that interface{}) bool { if that == nil { return this == nil @@ -811,7 +749,6 @@ func (this *SudoContractProposal) Equal(that interface{}) bool { } return true } - func (this *ExecuteContractProposal) Equal(that interface{}) bool { if that == nil { return this == nil @@ -856,7 +793,6 @@ func (this *ExecuteContractProposal) Equal(that interface{}) bool { } return true } - func (this *UpdateAdminProposal) Equal(that interface{}) bool { if that == nil { return this == nil @@ -890,7 +826,6 @@ func (this *UpdateAdminProposal) Equal(that interface{}) bool { } return true } - func (this *ClearAdminProposal) Equal(that interface{}) bool { if that == nil { return this == nil @@ -921,7 +856,6 @@ func (this *ClearAdminProposal) Equal(that interface{}) bool { } return true } - func (this *PinCodesProposal) Equal(that interface{}) bool { if that == nil { return this == nil @@ -957,7 +891,6 @@ func (this *PinCodesProposal) Equal(that interface{}) bool { } return true } - func (this *UnpinCodesProposal) Equal(that interface{}) bool { if that == nil { return this == nil @@ -993,7 +926,6 @@ func (this *UnpinCodesProposal) Equal(that interface{}) bool { } return true } - func (this *AccessConfigUpdate) Equal(that interface{}) bool { if that == nil { return this == nil @@ -1021,7 +953,6 @@ func (this *AccessConfigUpdate) Equal(that interface{}) bool { } return true } - func (this *UpdateInstantiateConfigProposal) Equal(that interface{}) bool { if that == nil { return this == nil @@ -1057,7 +988,6 @@ func (this *UpdateInstantiateConfigProposal) Equal(that interface{}) bool { } return true } - func (m *StoreCodeProposal) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1689,7 +1619,6 @@ func encodeVarintProposal(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } - func (m *StoreCodeProposal) Size() (n int) { if m == nil { return 0 @@ -1983,11 +1912,9 @@ func (m *UpdateInstantiateConfigProposal) Size() (n int) { func sovProposal(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } - func sozProposal(x uint64) (n int) { return sovProposal(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } - func (m *StoreCodeProposal) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2204,7 +2131,6 @@ func (m *StoreCodeProposal) Unmarshal(dAtA []byte) error { } return nil } - func (m *InstantiateContractProposal) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2502,7 +2428,6 @@ func (m *InstantiateContractProposal) Unmarshal(dAtA []byte) error { } return nil } - func (m *MigrateContractProposal) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2702,7 +2627,6 @@ func (m *MigrateContractProposal) Unmarshal(dAtA []byte) error { } return nil } - func (m *SudoContractProposal) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2883,7 +2807,6 @@ func (m *SudoContractProposal) Unmarshal(dAtA []byte) error { } return nil } - func (m *ExecuteContractProposal) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3130,7 +3053,6 @@ func (m *ExecuteContractProposal) Unmarshal(dAtA []byte) error { } return nil } - func (m *UpdateAdminProposal) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3309,7 +3231,6 @@ func (m *UpdateAdminProposal) Unmarshal(dAtA []byte) error { } return nil } - func (m *ClearAdminProposal) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3456,7 +3377,6 @@ func (m *ClearAdminProposal) Unmarshal(dAtA []byte) error { } return nil } - func (m *PinCodesProposal) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3647,7 +3567,6 @@ func (m *PinCodesProposal) Unmarshal(dAtA []byte) error { } return nil } - func (m *UnpinCodesProposal) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3838,7 +3757,6 @@ func (m *UnpinCodesProposal) Unmarshal(dAtA []byte) error { } return nil } - func (m *AccessConfigUpdate) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3941,7 +3859,6 @@ func (m *AccessConfigUpdate) Unmarshal(dAtA []byte) error { } return nil } - func (m *UpdateInstantiateConfigProposal) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -4090,7 +4007,6 @@ func (m *UpdateInstantiateConfigProposal) Unmarshal(dAtA []byte) error { } return nil } - func skipProposal(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/wasm/types/query.pb.go b/x/wasm/types/query.pb.go index 51aead5aa1..c3a8afa77d 100644 --- a/x/wasm/types/query.pb.go +++ b/x/wasm/types/query.pb.go @@ -7,10 +7,6 @@ import ( bytes "bytes" context "context" fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" @@ -20,15 +16,15 @@ import ( grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" ) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal - -var ( - _ = fmt.Errorf - _ = math.Inf -) +var _ = fmt.Errorf +var _ = math.Inf // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. @@ -49,11 +45,9 @@ func (*QueryContractInfoRequest) ProtoMessage() {} func (*QueryContractInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor_9677c207036b9f2b, []int{0} } - func (m *QueryContractInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryContractInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryContractInfoRequest.Marshal(b, m, deterministic) @@ -66,15 +60,12 @@ func (m *QueryContractInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([] return b[:n], nil } } - func (m *QueryContractInfoRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryContractInfoRequest.Merge(m, src) } - func (m *QueryContractInfoRequest) XXX_Size() int { return m.Size() } - func (m *QueryContractInfoRequest) XXX_DiscardUnknown() { xxx_messageInfo_QueryContractInfoRequest.DiscardUnknown(m) } @@ -95,11 +86,9 @@ func (*QueryContractInfoResponse) ProtoMessage() {} func (*QueryContractInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptor_9677c207036b9f2b, []int{1} } - func (m *QueryContractInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryContractInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryContractInfoResponse.Marshal(b, m, deterministic) @@ -112,15 +101,12 @@ func (m *QueryContractInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([ return b[:n], nil } } - func (m *QueryContractInfoResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryContractInfoResponse.Merge(m, src) } - func (m *QueryContractInfoResponse) XXX_Size() int { return m.Size() } - func (m *QueryContractInfoResponse) XXX_DiscardUnknown() { xxx_messageInfo_QueryContractInfoResponse.DiscardUnknown(m) } @@ -142,11 +128,9 @@ func (*QueryContractHistoryRequest) ProtoMessage() {} func (*QueryContractHistoryRequest) Descriptor() ([]byte, []int) { return fileDescriptor_9677c207036b9f2b, []int{2} } - func (m *QueryContractHistoryRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryContractHistoryRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryContractHistoryRequest.Marshal(b, m, deterministic) @@ -159,15 +143,12 @@ func (m *QueryContractHistoryRequest) XXX_Marshal(b []byte, deterministic bool) return b[:n], nil } } - func (m *QueryContractHistoryRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryContractHistoryRequest.Merge(m, src) } - func (m *QueryContractHistoryRequest) XXX_Size() int { return m.Size() } - func (m *QueryContractHistoryRequest) XXX_DiscardUnknown() { xxx_messageInfo_QueryContractHistoryRequest.DiscardUnknown(m) } @@ -188,11 +169,9 @@ func (*QueryContractHistoryResponse) ProtoMessage() {} func (*QueryContractHistoryResponse) Descriptor() ([]byte, []int) { return fileDescriptor_9677c207036b9f2b, []int{3} } - func (m *QueryContractHistoryResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryContractHistoryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryContractHistoryResponse.Marshal(b, m, deterministic) @@ -205,15 +184,12 @@ func (m *QueryContractHistoryResponse) XXX_Marshal(b []byte, deterministic bool) return b[:n], nil } } - func (m *QueryContractHistoryResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryContractHistoryResponse.Merge(m, src) } - func (m *QueryContractHistoryResponse) XXX_Size() int { return m.Size() } - func (m *QueryContractHistoryResponse) XXX_DiscardUnknown() { xxx_messageInfo_QueryContractHistoryResponse.DiscardUnknown(m) } @@ -234,11 +210,9 @@ func (*QueryContractsByCodeRequest) ProtoMessage() {} func (*QueryContractsByCodeRequest) Descriptor() ([]byte, []int) { return fileDescriptor_9677c207036b9f2b, []int{4} } - func (m *QueryContractsByCodeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryContractsByCodeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryContractsByCodeRequest.Marshal(b, m, deterministic) @@ -251,15 +225,12 @@ func (m *QueryContractsByCodeRequest) XXX_Marshal(b []byte, deterministic bool) return b[:n], nil } } - func (m *QueryContractsByCodeRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryContractsByCodeRequest.Merge(m, src) } - func (m *QueryContractsByCodeRequest) XXX_Size() int { return m.Size() } - func (m *QueryContractsByCodeRequest) XXX_DiscardUnknown() { xxx_messageInfo_QueryContractsByCodeRequest.DiscardUnknown(m) } @@ -281,11 +252,9 @@ func (*QueryContractsByCodeResponse) ProtoMessage() {} func (*QueryContractsByCodeResponse) Descriptor() ([]byte, []int) { return fileDescriptor_9677c207036b9f2b, []int{5} } - func (m *QueryContractsByCodeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryContractsByCodeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryContractsByCodeResponse.Marshal(b, m, deterministic) @@ -298,15 +267,12 @@ func (m *QueryContractsByCodeResponse) XXX_Marshal(b []byte, deterministic bool) return b[:n], nil } } - func (m *QueryContractsByCodeResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryContractsByCodeResponse.Merge(m, src) } - func (m *QueryContractsByCodeResponse) XXX_Size() int { return m.Size() } - func (m *QueryContractsByCodeResponse) XXX_DiscardUnknown() { xxx_messageInfo_QueryContractsByCodeResponse.DiscardUnknown(m) } @@ -328,11 +294,9 @@ func (*QueryAllContractStateRequest) ProtoMessage() {} func (*QueryAllContractStateRequest) Descriptor() ([]byte, []int) { return fileDescriptor_9677c207036b9f2b, []int{6} } - func (m *QueryAllContractStateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryAllContractStateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryAllContractStateRequest.Marshal(b, m, deterministic) @@ -345,15 +309,12 @@ func (m *QueryAllContractStateRequest) XXX_Marshal(b []byte, deterministic bool) return b[:n], nil } } - func (m *QueryAllContractStateRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryAllContractStateRequest.Merge(m, src) } - func (m *QueryAllContractStateRequest) XXX_Size() int { return m.Size() } - func (m *QueryAllContractStateRequest) XXX_DiscardUnknown() { xxx_messageInfo_QueryAllContractStateRequest.DiscardUnknown(m) } @@ -374,11 +335,9 @@ func (*QueryAllContractStateResponse) ProtoMessage() {} func (*QueryAllContractStateResponse) Descriptor() ([]byte, []int) { return fileDescriptor_9677c207036b9f2b, []int{7} } - func (m *QueryAllContractStateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryAllContractStateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryAllContractStateResponse.Marshal(b, m, deterministic) @@ -391,15 +350,12 @@ func (m *QueryAllContractStateResponse) XXX_Marshal(b []byte, deterministic bool return b[:n], nil } } - func (m *QueryAllContractStateResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryAllContractStateResponse.Merge(m, src) } - func (m *QueryAllContractStateResponse) XXX_Size() int { return m.Size() } - func (m *QueryAllContractStateResponse) XXX_DiscardUnknown() { xxx_messageInfo_QueryAllContractStateResponse.DiscardUnknown(m) } @@ -420,11 +376,9 @@ func (*QueryRawContractStateRequest) ProtoMessage() {} func (*QueryRawContractStateRequest) Descriptor() ([]byte, []int) { return fileDescriptor_9677c207036b9f2b, []int{8} } - func (m *QueryRawContractStateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryRawContractStateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryRawContractStateRequest.Marshal(b, m, deterministic) @@ -437,15 +391,12 @@ func (m *QueryRawContractStateRequest) XXX_Marshal(b []byte, deterministic bool) return b[:n], nil } } - func (m *QueryRawContractStateRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryRawContractStateRequest.Merge(m, src) } - func (m *QueryRawContractStateRequest) XXX_Size() int { return m.Size() } - func (m *QueryRawContractStateRequest) XXX_DiscardUnknown() { xxx_messageInfo_QueryRawContractStateRequest.DiscardUnknown(m) } @@ -465,11 +416,9 @@ func (*QueryRawContractStateResponse) ProtoMessage() {} func (*QueryRawContractStateResponse) Descriptor() ([]byte, []int) { return fileDescriptor_9677c207036b9f2b, []int{9} } - func (m *QueryRawContractStateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryRawContractStateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryRawContractStateResponse.Marshal(b, m, deterministic) @@ -482,15 +431,12 @@ func (m *QueryRawContractStateResponse) XXX_Marshal(b []byte, deterministic bool return b[:n], nil } } - func (m *QueryRawContractStateResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryRawContractStateResponse.Merge(m, src) } - func (m *QueryRawContractStateResponse) XXX_Size() int { return m.Size() } - func (m *QueryRawContractStateResponse) XXX_DiscardUnknown() { xxx_messageInfo_QueryRawContractStateResponse.DiscardUnknown(m) } @@ -512,11 +458,9 @@ func (*QuerySmartContractStateRequest) ProtoMessage() {} func (*QuerySmartContractStateRequest) Descriptor() ([]byte, []int) { return fileDescriptor_9677c207036b9f2b, []int{10} } - func (m *QuerySmartContractStateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QuerySmartContractStateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QuerySmartContractStateRequest.Marshal(b, m, deterministic) @@ -529,15 +473,12 @@ func (m *QuerySmartContractStateRequest) XXX_Marshal(b []byte, deterministic boo return b[:n], nil } } - func (m *QuerySmartContractStateRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_QuerySmartContractStateRequest.Merge(m, src) } - func (m *QuerySmartContractStateRequest) XXX_Size() int { return m.Size() } - func (m *QuerySmartContractStateRequest) XXX_DiscardUnknown() { xxx_messageInfo_QuerySmartContractStateRequest.DiscardUnknown(m) } @@ -557,11 +498,9 @@ func (*QuerySmartContractStateResponse) ProtoMessage() {} func (*QuerySmartContractStateResponse) Descriptor() ([]byte, []int) { return fileDescriptor_9677c207036b9f2b, []int{11} } - func (m *QuerySmartContractStateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QuerySmartContractStateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QuerySmartContractStateResponse.Marshal(b, m, deterministic) @@ -574,15 +513,12 @@ func (m *QuerySmartContractStateResponse) XXX_Marshal(b []byte, deterministic bo return b[:n], nil } } - func (m *QuerySmartContractStateResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_QuerySmartContractStateResponse.Merge(m, src) } - func (m *QuerySmartContractStateResponse) XXX_Size() int { return m.Size() } - func (m *QuerySmartContractStateResponse) XXX_DiscardUnknown() { xxx_messageInfo_QuerySmartContractStateResponse.DiscardUnknown(m) } @@ -600,11 +536,9 @@ func (*QueryCodeRequest) ProtoMessage() {} func (*QueryCodeRequest) Descriptor() ([]byte, []int) { return fileDescriptor_9677c207036b9f2b, []int{12} } - func (m *QueryCodeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryCodeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryCodeRequest.Marshal(b, m, deterministic) @@ -617,15 +551,12 @@ func (m *QueryCodeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, er return b[:n], nil } } - func (m *QueryCodeRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryCodeRequest.Merge(m, src) } - func (m *QueryCodeRequest) XXX_Size() int { return m.Size() } - func (m *QueryCodeRequest) XXX_DiscardUnknown() { xxx_messageInfo_QueryCodeRequest.DiscardUnknown(m) } @@ -646,11 +577,9 @@ func (*CodeInfoResponse) ProtoMessage() {} func (*CodeInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptor_9677c207036b9f2b, []int{13} } - func (m *CodeInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *CodeInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_CodeInfoResponse.Marshal(b, m, deterministic) @@ -663,15 +592,12 @@ func (m *CodeInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, er return b[:n], nil } } - func (m *CodeInfoResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_CodeInfoResponse.Merge(m, src) } - func (m *CodeInfoResponse) XXX_Size() int { return m.Size() } - func (m *CodeInfoResponse) XXX_DiscardUnknown() { xxx_messageInfo_CodeInfoResponse.DiscardUnknown(m) } @@ -690,11 +616,9 @@ func (*QueryCodeResponse) ProtoMessage() {} func (*QueryCodeResponse) Descriptor() ([]byte, []int) { return fileDescriptor_9677c207036b9f2b, []int{14} } - func (m *QueryCodeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryCodeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryCodeResponse.Marshal(b, m, deterministic) @@ -707,15 +631,12 @@ func (m *QueryCodeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, e return b[:n], nil } } - func (m *QueryCodeResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryCodeResponse.Merge(m, src) } - func (m *QueryCodeResponse) XXX_Size() int { return m.Size() } - func (m *QueryCodeResponse) XXX_DiscardUnknown() { xxx_messageInfo_QueryCodeResponse.DiscardUnknown(m) } @@ -734,11 +655,9 @@ func (*QueryCodesRequest) ProtoMessage() {} func (*QueryCodesRequest) Descriptor() ([]byte, []int) { return fileDescriptor_9677c207036b9f2b, []int{15} } - func (m *QueryCodesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryCodesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryCodesRequest.Marshal(b, m, deterministic) @@ -751,15 +670,12 @@ func (m *QueryCodesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, e return b[:n], nil } } - func (m *QueryCodesRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryCodesRequest.Merge(m, src) } - func (m *QueryCodesRequest) XXX_Size() int { return m.Size() } - func (m *QueryCodesRequest) XXX_DiscardUnknown() { xxx_messageInfo_QueryCodesRequest.DiscardUnknown(m) } @@ -779,11 +695,9 @@ func (*QueryCodesResponse) ProtoMessage() {} func (*QueryCodesResponse) Descriptor() ([]byte, []int) { return fileDescriptor_9677c207036b9f2b, []int{16} } - func (m *QueryCodesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryCodesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryCodesResponse.Marshal(b, m, deterministic) @@ -796,15 +710,12 @@ func (m *QueryCodesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } - func (m *QueryCodesResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryCodesResponse.Merge(m, src) } - func (m *QueryCodesResponse) XXX_Size() int { return m.Size() } - func (m *QueryCodesResponse) XXX_DiscardUnknown() { xxx_messageInfo_QueryCodesResponse.DiscardUnknown(m) } @@ -824,11 +735,9 @@ func (*QueryPinnedCodesRequest) ProtoMessage() {} func (*QueryPinnedCodesRequest) Descriptor() ([]byte, []int) { return fileDescriptor_9677c207036b9f2b, []int{17} } - func (m *QueryPinnedCodesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryPinnedCodesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryPinnedCodesRequest.Marshal(b, m, deterministic) @@ -841,15 +750,12 @@ func (m *QueryPinnedCodesRequest) XXX_Marshal(b []byte, deterministic bool) ([]b return b[:n], nil } } - func (m *QueryPinnedCodesRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryPinnedCodesRequest.Merge(m, src) } - func (m *QueryPinnedCodesRequest) XXX_Size() int { return m.Size() } - func (m *QueryPinnedCodesRequest) XXX_DiscardUnknown() { xxx_messageInfo_QueryPinnedCodesRequest.DiscardUnknown(m) } @@ -870,11 +776,9 @@ func (*QueryPinnedCodesResponse) ProtoMessage() {} func (*QueryPinnedCodesResponse) Descriptor() ([]byte, []int) { return fileDescriptor_9677c207036b9f2b, []int{18} } - func (m *QueryPinnedCodesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryPinnedCodesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryPinnedCodesResponse.Marshal(b, m, deterministic) @@ -887,15 +791,12 @@ func (m *QueryPinnedCodesResponse) XXX_Marshal(b []byte, deterministic bool) ([] return b[:n], nil } } - func (m *QueryPinnedCodesResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryPinnedCodesResponse.Merge(m, src) } - func (m *QueryPinnedCodesResponse) XXX_Size() int { return m.Size() } - func (m *QueryPinnedCodesResponse) XXX_DiscardUnknown() { xxx_messageInfo_QueryPinnedCodesResponse.DiscardUnknown(m) } @@ -1032,7 +933,6 @@ func (this *QueryContractInfoResponse) Equal(that interface{}) bool { } return true } - func (this *CodeInfoResponse) Equal(that interface{}) bool { if that == nil { return this == nil @@ -1066,7 +966,6 @@ func (this *CodeInfoResponse) Equal(that interface{}) bool { } return true } - func (this *QueryCodeResponse) Equal(that interface{}) bool { if that == nil { return this == nil @@ -1239,40 +1138,33 @@ type QueryServer interface { } // UnimplementedQueryServer can be embedded to have forward compatible implementations. -type UnimplementedQueryServer struct{} +type UnimplementedQueryServer struct { +} func (*UnimplementedQueryServer) ContractInfo(ctx context.Context, req *QueryContractInfoRequest) (*QueryContractInfoResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ContractInfo not implemented") } - func (*UnimplementedQueryServer) ContractHistory(ctx context.Context, req *QueryContractHistoryRequest) (*QueryContractHistoryResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ContractHistory not implemented") } - func (*UnimplementedQueryServer) ContractsByCode(ctx context.Context, req *QueryContractsByCodeRequest) (*QueryContractsByCodeResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ContractsByCode not implemented") } - func (*UnimplementedQueryServer) AllContractState(ctx context.Context, req *QueryAllContractStateRequest) (*QueryAllContractStateResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AllContractState not implemented") } - func (*UnimplementedQueryServer) RawContractState(ctx context.Context, req *QueryRawContractStateRequest) (*QueryRawContractStateResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method RawContractState not implemented") } - func (*UnimplementedQueryServer) SmartContractState(ctx context.Context, req *QuerySmartContractStateRequest) (*QuerySmartContractStateResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SmartContractState not implemented") } - func (*UnimplementedQueryServer) Code(ctx context.Context, req *QueryCodeRequest) (*QueryCodeResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Code not implemented") } - func (*UnimplementedQueryServer) Codes(ctx context.Context, req *QueryCodesRequest) (*QueryCodesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Codes not implemented") } - func (*UnimplementedQueryServer) PinnedCodes(ctx context.Context, req *QueryPinnedCodesRequest) (*QueryPinnedCodesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method PinnedCodes not implemented") } @@ -2263,7 +2155,6 @@ func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } - func (m *QueryContractInfoRequest) Size() (n int) { if m == nil { return 0 @@ -2578,11 +2469,9 @@ func (m *QueryPinnedCodesResponse) Size() (n int) { func sovQuery(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } - func sozQuery(x uint64) (n int) { return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } - func (m *QueryContractInfoRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2665,7 +2554,6 @@ func (m *QueryContractInfoRequest) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryContractInfoResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2781,7 +2669,6 @@ func (m *QueryContractInfoResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryContractHistoryRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2900,7 +2787,6 @@ func (m *QueryContractHistoryRequest) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryContractHistoryResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3021,7 +2907,6 @@ func (m *QueryContractHistoryResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryContractsByCodeRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3127,7 +3012,6 @@ func (m *QueryContractsByCodeRequest) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryContractsByCodeResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3246,7 +3130,6 @@ func (m *QueryContractsByCodeResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryAllContractStateRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3365,7 +3248,6 @@ func (m *QueryAllContractStateRequest) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryAllContractStateResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3486,7 +3368,6 @@ func (m *QueryAllContractStateResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryRawContractStateRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3603,7 +3484,6 @@ func (m *QueryRawContractStateRequest) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryRawContractStateResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3688,7 +3568,6 @@ func (m *QueryRawContractStateResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *QuerySmartContractStateRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3805,7 +3684,6 @@ func (m *QuerySmartContractStateRequest) Unmarshal(dAtA []byte) error { } return nil } - func (m *QuerySmartContractStateResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3890,7 +3768,6 @@ func (m *QuerySmartContractStateResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryCodeRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3960,7 +3837,6 @@ func (m *QueryCodeRequest) Unmarshal(dAtA []byte) error { } return nil } - func (m *CodeInfoResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -4129,7 +4005,6 @@ func (m *CodeInfoResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryCodeResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -4250,7 +4125,6 @@ func (m *QueryCodeResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryCodesRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -4337,7 +4211,6 @@ func (m *QueryCodesRequest) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryCodesResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -4458,7 +4331,6 @@ func (m *QueryCodesResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryPinnedCodesRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -4545,7 +4417,6 @@ func (m *QueryPinnedCodesRequest) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryPinnedCodesResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -4708,7 +4579,6 @@ func (m *QueryPinnedCodesResponse) Unmarshal(dAtA []byte) error { } return nil } - func skipQuery(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/wasm/types/query.pb.gw.go b/x/wasm/types/query.pb.gw.go index b382baf774..f91f21ccf6 100644 --- a/x/wasm/types/query.pb.gw.go +++ b/x/wasm/types/query.pb.gw.go @@ -25,14 +25,11 @@ import ( // Suppress "imported and not used" errors var _ codes.Code - -var ( - _ io.Reader - _ status.Status - _ = runtime.String - _ = utilities.NewDoubleArray - _ = descriptor.ForMessage -) +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage func request_Query_ContractInfo_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryContractInfoRequest @@ -58,6 +55,7 @@ func request_Query_ContractInfo_0(ctx context.Context, marshaler runtime.Marshal msg, err := client.ContractInfo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err + } func local_request_Query_ContractInfo_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -84,9 +82,12 @@ func local_request_Query_ContractInfo_0(ctx context.Context, marshaler runtime.M msg, err := server.ContractInfo(ctx, &protoReq) return msg, metadata, err + } -var filter_Query_ContractHistory_0 = &utilities.DoubleArray{Encoding: map[string]int{"address": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +var ( + filter_Query_ContractHistory_0 = &utilities.DoubleArray{Encoding: map[string]int{"address": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) func request_Query_ContractHistory_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryContractHistoryRequest @@ -119,6 +120,7 @@ func request_Query_ContractHistory_0(ctx context.Context, marshaler runtime.Mars msg, err := client.ContractHistory(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err + } func local_request_Query_ContractHistory_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -152,9 +154,12 @@ func local_request_Query_ContractHistory_0(ctx context.Context, marshaler runtim msg, err := server.ContractHistory(ctx, &protoReq) return msg, metadata, err + } -var filter_Query_ContractsByCode_0 = &utilities.DoubleArray{Encoding: map[string]int{"code_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +var ( + filter_Query_ContractsByCode_0 = &utilities.DoubleArray{Encoding: map[string]int{"code_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) func request_Query_ContractsByCode_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryContractsByCodeRequest @@ -187,6 +192,7 @@ func request_Query_ContractsByCode_0(ctx context.Context, marshaler runtime.Mars msg, err := client.ContractsByCode(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err + } func local_request_Query_ContractsByCode_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -220,9 +226,12 @@ func local_request_Query_ContractsByCode_0(ctx context.Context, marshaler runtim msg, err := server.ContractsByCode(ctx, &protoReq) return msg, metadata, err + } -var filter_Query_AllContractState_0 = &utilities.DoubleArray{Encoding: map[string]int{"address": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +var ( + filter_Query_AllContractState_0 = &utilities.DoubleArray{Encoding: map[string]int{"address": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) func request_Query_AllContractState_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllContractStateRequest @@ -255,6 +264,7 @@ func request_Query_AllContractState_0(ctx context.Context, marshaler runtime.Mar msg, err := client.AllContractState(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err + } func local_request_Query_AllContractState_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -288,6 +298,7 @@ func local_request_Query_AllContractState_0(ctx context.Context, marshaler runti msg, err := server.AllContractState(ctx, &protoReq) return msg, metadata, err + } func request_Query_RawContractState_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -325,6 +336,7 @@ func request_Query_RawContractState_0(ctx context.Context, marshaler runtime.Mar msg, err := client.RawContractState(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err + } func local_request_Query_RawContractState_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -362,6 +374,7 @@ func local_request_Query_RawContractState_0(ctx context.Context, marshaler runti msg, err := server.RawContractState(ctx, &protoReq) return msg, metadata, err + } func request_Query_SmartContractState_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -399,6 +412,7 @@ func request_Query_SmartContractState_0(ctx context.Context, marshaler runtime.M msg, err := client.SmartContractState(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err + } func local_request_Query_SmartContractState_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -436,6 +450,7 @@ func local_request_Query_SmartContractState_0(ctx context.Context, marshaler run msg, err := server.SmartContractState(ctx, &protoReq) return msg, metadata, err + } func request_Query_Code_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -462,6 +477,7 @@ func request_Query_Code_0(ctx context.Context, marshaler runtime.Marshaler, clie msg, err := client.Code(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err + } func local_request_Query_Code_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -488,9 +504,12 @@ func local_request_Query_Code_0(ctx context.Context, marshaler runtime.Marshaler msg, err := server.Code(ctx, &protoReq) return msg, metadata, err + } -var filter_Query_Codes_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +var ( + filter_Query_Codes_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) func request_Query_Codes_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryCodesRequest @@ -505,6 +524,7 @@ func request_Query_Codes_0(ctx context.Context, marshaler runtime.Marshaler, cli msg, err := client.Codes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err + } func local_request_Query_Codes_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -520,9 +540,12 @@ func local_request_Query_Codes_0(ctx context.Context, marshaler runtime.Marshale msg, err := server.Codes(ctx, &protoReq) return msg, metadata, err + } -var filter_Query_PinnedCodes_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +var ( + filter_Query_PinnedCodes_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) func request_Query_PinnedCodes_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryPinnedCodesRequest @@ -537,6 +560,7 @@ func request_Query_PinnedCodes_0(ctx context.Context, marshaler runtime.Marshale msg, err := client.PinnedCodes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err + } func local_request_Query_PinnedCodes_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -552,6 +576,7 @@ func local_request_Query_PinnedCodes_0(ctx context.Context, marshaler runtime.Ma msg, err := server.PinnedCodes(ctx, &protoReq) return msg, metadata, err + } // RegisterQueryHandlerServer registers the http handlers for service Query to "mux". @@ -559,6 +584,7 @@ func local_request_Query_PinnedCodes_0(ctx context.Context, marshaler runtime.Ma // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. // Note that using this registration option will cause many gRPC library features (such as grpc.SendHeader, etc) to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + mux.Handle("GET", pattern_Query_ContractInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -576,6 +602,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv } forward_Query_ContractInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_ContractHistory_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -595,6 +622,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv } forward_Query_ContractHistory_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_ContractsByCode_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -614,6 +642,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv } forward_Query_ContractsByCode_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_AllContractState_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -633,6 +662,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv } forward_Query_AllContractState_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_RawContractState_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -652,6 +682,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv } forward_Query_RawContractState_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_SmartContractState_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -671,6 +702,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv } forward_Query_SmartContractState_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_Code_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -690,6 +722,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv } forward_Query_Code_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_Codes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -709,6 +742,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv } forward_Query_Codes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_PinnedCodes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -728,6 +762,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv } forward_Query_PinnedCodes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) return nil @@ -770,6 +805,7 @@ func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in // "QueryClient" to call the correct interceptors. func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + mux.Handle("GET", pattern_Query_ContractInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -787,6 +823,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } forward_Query_ContractInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_ContractHistory_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -806,6 +843,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } forward_Query_ContractHistory_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_ContractsByCode_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -825,6 +863,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } forward_Query_ContractsByCode_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_AllContractState_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -844,6 +883,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } forward_Query_AllContractState_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_RawContractState_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -863,6 +903,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } forward_Query_RawContractState_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_SmartContractState_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -882,6 +923,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } forward_Query_SmartContractState_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_Code_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -901,6 +943,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } forward_Query_Code_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_Codes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -920,6 +963,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } forward_Query_Codes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_PinnedCodes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -939,6 +983,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } forward_Query_PinnedCodes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) return nil diff --git a/x/wasm/types/tx.pb.go b/x/wasm/types/tx.pb.go index 7976d9e8f0..dd82a4ae1b 100644 --- a/x/wasm/types/tx.pb.go +++ b/x/wasm/types/tx.pb.go @@ -6,10 +6,6 @@ package types import ( context "context" fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" @@ -18,15 +14,15 @@ import ( grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" ) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal - -var ( - _ = fmt.Errorf - _ = math.Inf -) +var _ = fmt.Errorf +var _ = math.Inf // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. @@ -51,11 +47,9 @@ func (*MsgStoreCode) ProtoMessage() {} func (*MsgStoreCode) Descriptor() ([]byte, []int) { return fileDescriptor_4f74d82755520264, []int{0} } - func (m *MsgStoreCode) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *MsgStoreCode) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_MsgStoreCode.Marshal(b, m, deterministic) @@ -68,15 +62,12 @@ func (m *MsgStoreCode) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) return b[:n], nil } } - func (m *MsgStoreCode) XXX_Merge(src proto.Message) { xxx_messageInfo_MsgStoreCode.Merge(m, src) } - func (m *MsgStoreCode) XXX_Size() int { return m.Size() } - func (m *MsgStoreCode) XXX_DiscardUnknown() { xxx_messageInfo_MsgStoreCode.DiscardUnknown(m) } @@ -95,11 +86,9 @@ func (*MsgStoreCodeResponse) ProtoMessage() {} func (*MsgStoreCodeResponse) Descriptor() ([]byte, []int) { return fileDescriptor_4f74d82755520264, []int{1} } - func (m *MsgStoreCodeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *MsgStoreCodeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_MsgStoreCodeResponse.Marshal(b, m, deterministic) @@ -112,15 +101,12 @@ func (m *MsgStoreCodeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte return b[:n], nil } } - func (m *MsgStoreCodeResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_MsgStoreCodeResponse.Merge(m, src) } - func (m *MsgStoreCodeResponse) XXX_Size() int { return m.Size() } - func (m *MsgStoreCodeResponse) XXX_DiscardUnknown() { xxx_messageInfo_MsgStoreCodeResponse.DiscardUnknown(m) } @@ -150,11 +136,9 @@ func (*MsgInstantiateContract) ProtoMessage() {} func (*MsgInstantiateContract) Descriptor() ([]byte, []int) { return fileDescriptor_4f74d82755520264, []int{2} } - func (m *MsgInstantiateContract) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *MsgInstantiateContract) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_MsgInstantiateContract.Marshal(b, m, deterministic) @@ -167,15 +151,12 @@ func (m *MsgInstantiateContract) XXX_Marshal(b []byte, deterministic bool) ([]by return b[:n], nil } } - func (m *MsgInstantiateContract) XXX_Merge(src proto.Message) { xxx_messageInfo_MsgInstantiateContract.Merge(m, src) } - func (m *MsgInstantiateContract) XXX_Size() int { return m.Size() } - func (m *MsgInstantiateContract) XXX_DiscardUnknown() { xxx_messageInfo_MsgInstantiateContract.DiscardUnknown(m) } @@ -196,11 +177,9 @@ func (*MsgInstantiateContractResponse) ProtoMessage() {} func (*MsgInstantiateContractResponse) Descriptor() ([]byte, []int) { return fileDescriptor_4f74d82755520264, []int{3} } - func (m *MsgInstantiateContractResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *MsgInstantiateContractResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_MsgInstantiateContractResponse.Marshal(b, m, deterministic) @@ -213,15 +192,12 @@ func (m *MsgInstantiateContractResponse) XXX_Marshal(b []byte, deterministic boo return b[:n], nil } } - func (m *MsgInstantiateContractResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_MsgInstantiateContractResponse.Merge(m, src) } - func (m *MsgInstantiateContractResponse) XXX_Size() int { return m.Size() } - func (m *MsgInstantiateContractResponse) XXX_DiscardUnknown() { xxx_messageInfo_MsgInstantiateContractResponse.DiscardUnknown(m) } @@ -246,11 +222,9 @@ func (*MsgExecuteContract) ProtoMessage() {} func (*MsgExecuteContract) Descriptor() ([]byte, []int) { return fileDescriptor_4f74d82755520264, []int{4} } - func (m *MsgExecuteContract) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *MsgExecuteContract) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_MsgExecuteContract.Marshal(b, m, deterministic) @@ -263,15 +237,12 @@ func (m *MsgExecuteContract) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } - func (m *MsgExecuteContract) XXX_Merge(src proto.Message) { xxx_messageInfo_MsgExecuteContract.Merge(m, src) } - func (m *MsgExecuteContract) XXX_Size() int { return m.Size() } - func (m *MsgExecuteContract) XXX_DiscardUnknown() { xxx_messageInfo_MsgExecuteContract.DiscardUnknown(m) } @@ -290,11 +261,9 @@ func (*MsgExecuteContractResponse) ProtoMessage() {} func (*MsgExecuteContractResponse) Descriptor() ([]byte, []int) { return fileDescriptor_4f74d82755520264, []int{5} } - func (m *MsgExecuteContractResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *MsgExecuteContractResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_MsgExecuteContractResponse.Marshal(b, m, deterministic) @@ -307,15 +276,12 @@ func (m *MsgExecuteContractResponse) XXX_Marshal(b []byte, deterministic bool) ( return b[:n], nil } } - func (m *MsgExecuteContractResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_MsgExecuteContractResponse.Merge(m, src) } - func (m *MsgExecuteContractResponse) XXX_Size() int { return m.Size() } - func (m *MsgExecuteContractResponse) XXX_DiscardUnknown() { xxx_messageInfo_MsgExecuteContractResponse.DiscardUnknown(m) } @@ -340,11 +306,9 @@ func (*MsgMigrateContract) ProtoMessage() {} func (*MsgMigrateContract) Descriptor() ([]byte, []int) { return fileDescriptor_4f74d82755520264, []int{6} } - func (m *MsgMigrateContract) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *MsgMigrateContract) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_MsgMigrateContract.Marshal(b, m, deterministic) @@ -357,15 +321,12 @@ func (m *MsgMigrateContract) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } - func (m *MsgMigrateContract) XXX_Merge(src proto.Message) { xxx_messageInfo_MsgMigrateContract.Merge(m, src) } - func (m *MsgMigrateContract) XXX_Size() int { return m.Size() } - func (m *MsgMigrateContract) XXX_DiscardUnknown() { xxx_messageInfo_MsgMigrateContract.DiscardUnknown(m) } @@ -385,11 +346,9 @@ func (*MsgMigrateContractResponse) ProtoMessage() {} func (*MsgMigrateContractResponse) Descriptor() ([]byte, []int) { return fileDescriptor_4f74d82755520264, []int{7} } - func (m *MsgMigrateContractResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *MsgMigrateContractResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_MsgMigrateContractResponse.Marshal(b, m, deterministic) @@ -402,15 +361,12 @@ func (m *MsgMigrateContractResponse) XXX_Marshal(b []byte, deterministic bool) ( return b[:n], nil } } - func (m *MsgMigrateContractResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_MsgMigrateContractResponse.Merge(m, src) } - func (m *MsgMigrateContractResponse) XXX_Size() int { return m.Size() } - func (m *MsgMigrateContractResponse) XXX_DiscardUnknown() { xxx_messageInfo_MsgMigrateContractResponse.DiscardUnknown(m) } @@ -433,11 +389,9 @@ func (*MsgUpdateAdmin) ProtoMessage() {} func (*MsgUpdateAdmin) Descriptor() ([]byte, []int) { return fileDescriptor_4f74d82755520264, []int{8} } - func (m *MsgUpdateAdmin) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *MsgUpdateAdmin) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_MsgUpdateAdmin.Marshal(b, m, deterministic) @@ -450,15 +404,12 @@ func (m *MsgUpdateAdmin) XXX_Marshal(b []byte, deterministic bool) ([]byte, erro return b[:n], nil } } - func (m *MsgUpdateAdmin) XXX_Merge(src proto.Message) { xxx_messageInfo_MsgUpdateAdmin.Merge(m, src) } - func (m *MsgUpdateAdmin) XXX_Size() int { return m.Size() } - func (m *MsgUpdateAdmin) XXX_DiscardUnknown() { xxx_messageInfo_MsgUpdateAdmin.DiscardUnknown(m) } @@ -466,7 +417,8 @@ func (m *MsgUpdateAdmin) XXX_DiscardUnknown() { var xxx_messageInfo_MsgUpdateAdmin proto.InternalMessageInfo // MsgUpdateAdminResponse returns empty data -type MsgUpdateAdminResponse struct{} +type MsgUpdateAdminResponse struct { +} func (m *MsgUpdateAdminResponse) Reset() { *m = MsgUpdateAdminResponse{} } func (m *MsgUpdateAdminResponse) String() string { return proto.CompactTextString(m) } @@ -474,11 +426,9 @@ func (*MsgUpdateAdminResponse) ProtoMessage() {} func (*MsgUpdateAdminResponse) Descriptor() ([]byte, []int) { return fileDescriptor_4f74d82755520264, []int{9} } - func (m *MsgUpdateAdminResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *MsgUpdateAdminResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_MsgUpdateAdminResponse.Marshal(b, m, deterministic) @@ -491,15 +441,12 @@ func (m *MsgUpdateAdminResponse) XXX_Marshal(b []byte, deterministic bool) ([]by return b[:n], nil } } - func (m *MsgUpdateAdminResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_MsgUpdateAdminResponse.Merge(m, src) } - func (m *MsgUpdateAdminResponse) XXX_Size() int { return m.Size() } - func (m *MsgUpdateAdminResponse) XXX_DiscardUnknown() { xxx_messageInfo_MsgUpdateAdminResponse.DiscardUnknown(m) } @@ -520,11 +467,9 @@ func (*MsgClearAdmin) ProtoMessage() {} func (*MsgClearAdmin) Descriptor() ([]byte, []int) { return fileDescriptor_4f74d82755520264, []int{10} } - func (m *MsgClearAdmin) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *MsgClearAdmin) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_MsgClearAdmin.Marshal(b, m, deterministic) @@ -537,15 +482,12 @@ func (m *MsgClearAdmin) XXX_Marshal(b []byte, deterministic bool) ([]byte, error return b[:n], nil } } - func (m *MsgClearAdmin) XXX_Merge(src proto.Message) { xxx_messageInfo_MsgClearAdmin.Merge(m, src) } - func (m *MsgClearAdmin) XXX_Size() int { return m.Size() } - func (m *MsgClearAdmin) XXX_DiscardUnknown() { xxx_messageInfo_MsgClearAdmin.DiscardUnknown(m) } @@ -553,7 +495,8 @@ func (m *MsgClearAdmin) XXX_DiscardUnknown() { var xxx_messageInfo_MsgClearAdmin proto.InternalMessageInfo // MsgClearAdminResponse returns empty data -type MsgClearAdminResponse struct{} +type MsgClearAdminResponse struct { +} func (m *MsgClearAdminResponse) Reset() { *m = MsgClearAdminResponse{} } func (m *MsgClearAdminResponse) String() string { return proto.CompactTextString(m) } @@ -561,11 +504,9 @@ func (*MsgClearAdminResponse) ProtoMessage() {} func (*MsgClearAdminResponse) Descriptor() ([]byte, []int) { return fileDescriptor_4f74d82755520264, []int{11} } - func (m *MsgClearAdminResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *MsgClearAdminResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_MsgClearAdminResponse.Marshal(b, m, deterministic) @@ -578,15 +519,12 @@ func (m *MsgClearAdminResponse) XXX_Marshal(b []byte, deterministic bool) ([]byt return b[:n], nil } } - func (m *MsgClearAdminResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_MsgClearAdminResponse.Merge(m, src) } - func (m *MsgClearAdminResponse) XXX_Size() int { return m.Size() } - func (m *MsgClearAdminResponse) XXX_DiscardUnknown() { xxx_messageInfo_MsgClearAdminResponse.DiscardUnknown(m) } @@ -767,28 +705,24 @@ type MsgServer interface { } // UnimplementedMsgServer can be embedded to have forward compatible implementations. -type UnimplementedMsgServer struct{} +type UnimplementedMsgServer struct { +} func (*UnimplementedMsgServer) StoreCode(ctx context.Context, req *MsgStoreCode) (*MsgStoreCodeResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method StoreCode not implemented") } - func (*UnimplementedMsgServer) InstantiateContract(ctx context.Context, req *MsgInstantiateContract) (*MsgInstantiateContractResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method InstantiateContract not implemented") } - func (*UnimplementedMsgServer) ExecuteContract(ctx context.Context, req *MsgExecuteContract) (*MsgExecuteContractResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ExecuteContract not implemented") } - func (*UnimplementedMsgServer) MigrateContract(ctx context.Context, req *MsgMigrateContract) (*MsgMigrateContractResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method MigrateContract not implemented") } - func (*UnimplementedMsgServer) UpdateAdmin(ctx context.Context, req *MsgUpdateAdmin) (*MsgUpdateAdminResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateAdmin not implemented") } - func (*UnimplementedMsgServer) ClearAdmin(ctx context.Context, req *MsgClearAdmin) (*MsgClearAdminResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ClearAdmin not implemented") } @@ -1427,7 +1361,6 @@ func encodeVarintTx(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } - func (m *MsgStoreCode) Size() (n int) { if m == nil { return 0 @@ -1648,11 +1581,9 @@ func (m *MsgClearAdminResponse) Size() (n int) { func sovTx(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } - func sozTx(x uint64) (n int) { return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } - func (m *MsgStoreCode) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -1805,7 +1736,6 @@ func (m *MsgStoreCode) Unmarshal(dAtA []byte) error { } return nil } - func (m *MsgStoreCodeResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -1875,7 +1805,6 @@ func (m *MsgStoreCodeResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *MsgInstantiateContract) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2109,7 +2038,6 @@ func (m *MsgInstantiateContract) Unmarshal(dAtA []byte) error { } return nil } - func (m *MsgInstantiateContractResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2226,7 +2154,6 @@ func (m *MsgInstantiateContractResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *MsgExecuteContract) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2409,7 +2336,6 @@ func (m *MsgExecuteContract) Unmarshal(dAtA []byte) error { } return nil } - func (m *MsgExecuteContractResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2494,7 +2420,6 @@ func (m *MsgExecuteContractResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *MsgMigrateContract) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2662,7 +2587,6 @@ func (m *MsgMigrateContract) Unmarshal(dAtA []byte) error { } return nil } - func (m *MsgMigrateContractResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2747,7 +2671,6 @@ func (m *MsgMigrateContractResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *MsgUpdateAdmin) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2894,7 +2817,6 @@ func (m *MsgUpdateAdmin) Unmarshal(dAtA []byte) error { } return nil } - func (m *MsgUpdateAdminResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2945,7 +2867,6 @@ func (m *MsgUpdateAdminResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *MsgClearAdmin) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3060,7 +2981,6 @@ func (m *MsgClearAdmin) Unmarshal(dAtA []byte) error { } return nil } - func (m *MsgClearAdminResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3111,7 +3031,6 @@ func (m *MsgClearAdminResponse) Unmarshal(dAtA []byte) error { } return nil } - func skipTx(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/wasm/types/types.go b/x/wasm/types/types.go index 7c9e14e64e..887e895b29 100644 --- a/x/wasm/types/types.go +++ b/x/wasm/types/types.go @@ -128,10 +128,11 @@ func (c *ContractInfo) SetExtension(ext ContractInfoExtension) error { // ReadExtension copies the extension value to the pointer passed as argument so that there is no need to cast // For example with a custom extension of type `MyContractDetails` it will look as following: -// var d MyContractDetails -// if err := info.ReadExtension(&d); err != nil { -// return nil, sdkerrors.Wrap(err, "extension") -// } +// +// var d MyContractDetails +// if err := info.ReadExtension(&d); err != nil { +// return nil, sdkerrors.Wrap(err, "extension") +// } func (c *ContractInfo) ReadExtension(e ContractInfoExtension) error { rv := reflect.ValueOf(e) if rv.Kind() != reflect.Ptr || rv.IsNil() { diff --git a/x/wasm/types/types.pb.go b/x/wasm/types/types.pb.go index 05ff057a0d..e29889b509 100644 --- a/x/wasm/types/types.pb.go +++ b/x/wasm/types/types.pb.go @@ -6,24 +6,20 @@ package types import ( bytes "bytes" fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - types "github.com/cosmos/cosmos-sdk/codec/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" _ "github.com/regen-network/cosmos-proto" github_com_tendermint_tendermint_libs_bytes "github.com/tendermint/tendermint/libs/bytes" + io "io" + math "math" + math_bits "math/bits" ) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal - -var ( - _ = fmt.Errorf - _ = math.Inf -) +var _ = fmt.Errorf +var _ = math.Inf // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. @@ -110,11 +106,9 @@ func (*AccessTypeParam) ProtoMessage() {} func (*AccessTypeParam) Descriptor() ([]byte, []int) { return fileDescriptor_e6155d98fa173e02, []int{0} } - func (m *AccessTypeParam) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *AccessTypeParam) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_AccessTypeParam.Marshal(b, m, deterministic) @@ -127,15 +121,12 @@ func (m *AccessTypeParam) XXX_Marshal(b []byte, deterministic bool) ([]byte, err return b[:n], nil } } - func (m *AccessTypeParam) XXX_Merge(src proto.Message) { xxx_messageInfo_AccessTypeParam.Merge(m, src) } - func (m *AccessTypeParam) XXX_Size() int { return m.Size() } - func (m *AccessTypeParam) XXX_DiscardUnknown() { xxx_messageInfo_AccessTypeParam.DiscardUnknown(m) } @@ -154,11 +145,9 @@ func (*AccessConfig) ProtoMessage() {} func (*AccessConfig) Descriptor() ([]byte, []int) { return fileDescriptor_e6155d98fa173e02, []int{1} } - func (m *AccessConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *AccessConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_AccessConfig.Marshal(b, m, deterministic) @@ -171,15 +160,12 @@ func (m *AccessConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) return b[:n], nil } } - func (m *AccessConfig) XXX_Merge(src proto.Message) { xxx_messageInfo_AccessConfig.Merge(m, src) } - func (m *AccessConfig) XXX_Size() int { return m.Size() } - func (m *AccessConfig) XXX_DiscardUnknown() { xxx_messageInfo_AccessConfig.DiscardUnknown(m) } @@ -197,11 +183,9 @@ func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { return fileDescriptor_e6155d98fa173e02, []int{2} } - func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_Params.Marshal(b, m, deterministic) @@ -214,15 +198,12 @@ func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return b[:n], nil } } - func (m *Params) XXX_Merge(src proto.Message) { xxx_messageInfo_Params.Merge(m, src) } - func (m *Params) XXX_Size() int { return m.Size() } - func (m *Params) XXX_DiscardUnknown() { xxx_messageInfo_Params.DiscardUnknown(m) } @@ -245,11 +226,9 @@ func (*CodeInfo) ProtoMessage() {} func (*CodeInfo) Descriptor() ([]byte, []int) { return fileDescriptor_e6155d98fa173e02, []int{3} } - func (m *CodeInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *CodeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_CodeInfo.Marshal(b, m, deterministic) @@ -262,15 +241,12 @@ func (m *CodeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return b[:n], nil } } - func (m *CodeInfo) XXX_Merge(src proto.Message) { xxx_messageInfo_CodeInfo.Merge(m, src) } - func (m *CodeInfo) XXX_Size() int { return m.Size() } - func (m *CodeInfo) XXX_DiscardUnknown() { xxx_messageInfo_CodeInfo.DiscardUnknown(m) } @@ -303,11 +279,9 @@ func (*ContractInfo) ProtoMessage() {} func (*ContractInfo) Descriptor() ([]byte, []int) { return fileDescriptor_e6155d98fa173e02, []int{4} } - func (m *ContractInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *ContractInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_ContractInfo.Marshal(b, m, deterministic) @@ -320,15 +294,12 @@ func (m *ContractInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) return b[:n], nil } } - func (m *ContractInfo) XXX_Merge(src proto.Message) { xxx_messageInfo_ContractInfo.Merge(m, src) } - func (m *ContractInfo) XXX_Size() int { return m.Size() } - func (m *ContractInfo) XXX_DiscardUnknown() { xxx_messageInfo_ContractInfo.DiscardUnknown(m) } @@ -351,11 +322,9 @@ func (*ContractCodeHistoryEntry) ProtoMessage() {} func (*ContractCodeHistoryEntry) Descriptor() ([]byte, []int) { return fileDescriptor_e6155d98fa173e02, []int{5} } - func (m *ContractCodeHistoryEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *ContractCodeHistoryEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_ContractCodeHistoryEntry.Marshal(b, m, deterministic) @@ -368,15 +337,12 @@ func (m *ContractCodeHistoryEntry) XXX_Marshal(b []byte, deterministic bool) ([] return b[:n], nil } } - func (m *ContractCodeHistoryEntry) XXX_Merge(src proto.Message) { xxx_messageInfo_ContractCodeHistoryEntry.Merge(m, src) } - func (m *ContractCodeHistoryEntry) XXX_Size() int { return m.Size() } - func (m *ContractCodeHistoryEntry) XXX_DiscardUnknown() { xxx_messageInfo_ContractCodeHistoryEntry.DiscardUnknown(m) } @@ -399,11 +365,9 @@ func (*AbsoluteTxPosition) ProtoMessage() {} func (*AbsoluteTxPosition) Descriptor() ([]byte, []int) { return fileDescriptor_e6155d98fa173e02, []int{6} } - func (m *AbsoluteTxPosition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *AbsoluteTxPosition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_AbsoluteTxPosition.Marshal(b, m, deterministic) @@ -416,15 +380,12 @@ func (m *AbsoluteTxPosition) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } - func (m *AbsoluteTxPosition) XXX_Merge(src proto.Message) { xxx_messageInfo_AbsoluteTxPosition.Merge(m, src) } - func (m *AbsoluteTxPosition) XXX_Size() int { return m.Size() } - func (m *AbsoluteTxPosition) XXX_DiscardUnknown() { xxx_messageInfo_AbsoluteTxPosition.DiscardUnknown(m) } @@ -445,11 +406,9 @@ func (*Model) ProtoMessage() {} func (*Model) Descriptor() ([]byte, []int) { return fileDescriptor_e6155d98fa173e02, []int{7} } - func (m *Model) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *Model) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_Model.Marshal(b, m, deterministic) @@ -462,15 +421,12 @@ func (m *Model) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return b[:n], nil } } - func (m *Model) XXX_Merge(src proto.Message) { xxx_messageInfo_Model.Merge(m, src) } - func (m *Model) XXX_Size() int { return m.Size() } - func (m *Model) XXX_DiscardUnknown() { xxx_messageInfo_Model.DiscardUnknown(m) } @@ -591,7 +547,6 @@ func (this *AccessTypeParam) Equal(that interface{}) bool { } return true } - func (this *AccessConfig) Equal(that interface{}) bool { if that == nil { return this == nil @@ -619,7 +574,6 @@ func (this *AccessConfig) Equal(that interface{}) bool { } return true } - func (this *Params) Equal(that interface{}) bool { if that == nil { return this == nil @@ -647,7 +601,6 @@ func (this *Params) Equal(that interface{}) bool { } return true } - func (this *CodeInfo) Equal(that interface{}) bool { if that == nil { return this == nil @@ -678,7 +631,6 @@ func (this *CodeInfo) Equal(that interface{}) bool { } return true } - func (this *ContractInfo) Equal(that interface{}) bool { if that == nil { return this == nil @@ -721,7 +673,6 @@ func (this *ContractInfo) Equal(that interface{}) bool { } return true } - func (this *ContractCodeHistoryEntry) Equal(that interface{}) bool { if that == nil { return this == nil @@ -755,7 +706,6 @@ func (this *ContractCodeHistoryEntry) Equal(that interface{}) bool { } return true } - func (this *AbsoluteTxPosition) Equal(that interface{}) bool { if that == nil { return this == nil @@ -783,7 +733,6 @@ func (this *AbsoluteTxPosition) Equal(that interface{}) bool { } return true } - func (this *Model) Equal(that interface{}) bool { if that == nil { return this == nil @@ -811,7 +760,6 @@ func (this *Model) Equal(that interface{}) bool { } return true } - func (m *AccessTypeParam) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1173,7 +1121,6 @@ func encodeVarintTypes(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } - func (m *AccessTypeParam) Size() (n int) { if m == nil { return 0 @@ -1329,11 +1276,9 @@ func (m *Model) Size() (n int) { func sovTypes(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } - func sozTypes(x uint64) (n int) { return sovTypes(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } - func (m *AccessTypeParam) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -1403,7 +1348,6 @@ func (m *AccessTypeParam) Unmarshal(dAtA []byte) error { } return nil } - func (m *AccessConfig) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -1505,7 +1449,6 @@ func (m *AccessConfig) Unmarshal(dAtA []byte) error { } return nil } - func (m *Params) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -1608,7 +1551,6 @@ func (m *Params) Unmarshal(dAtA []byte) error { } return nil } - func (m *CodeInfo) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -1758,7 +1700,6 @@ func (m *CodeInfo) Unmarshal(dAtA []byte) error { } return nil } - func (m *ContractInfo) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2028,7 +1969,6 @@ func (m *ContractInfo) Unmarshal(dAtA []byte) error { } return nil } - func (m *ContractCodeHistoryEntry) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2187,7 +2127,6 @@ func (m *ContractCodeHistoryEntry) Unmarshal(dAtA []byte) error { } return nil } - func (m *AbsoluteTxPosition) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2276,7 +2215,6 @@ func (m *AbsoluteTxPosition) Unmarshal(dAtA []byte) error { } return nil } - func (m *Model) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2395,7 +2333,6 @@ func (m *Model) Unmarshal(dAtA []byte) error { } return nil } - func skipTypes(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 From b12a8e6d952e86d9d2d6b3a7d48c1f0950a1a6f8 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 13 Aug 2022 23:02:31 +0700 Subject: [PATCH 028/120] use gofumpt --- .golangci.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 17d5384ea3..35800440d0 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -11,8 +11,7 @@ linters: - errcheck - goconst - gocritic - - gofmt - - goimports + - gofumpt - revive - gosec - gosimple From 6c3bf4df2f4cb68bdac910110801de943e9cef53 Mon Sep 17 00:00:00 2001 From: vuong Date: Sat, 13 Aug 2022 23:22:17 +0700 Subject: [PATCH 029/120] some minor fix --- app/app.go | 1 - x/wasm/keeper/test_common.go | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/app/app.go b/app/app.go index 96af061145..cc3367904a 100644 --- a/app/app.go +++ b/app/app.go @@ -440,7 +440,6 @@ func NewWasmApp( // See: https://github.com/cosmos/cosmos-sdk/blob/release/v0.46.x/x/gov/spec/01_concepts.md#proposal-messages govRouter := govv1beta1.NewRouter() govRouter.AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler). - AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler). AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.paramsKeeper)). AddRoute(distrtypes.RouterKey, distr.NewCommunityPoolSpendProposalHandler(app.distrKeeper)). AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(app.upgradeKeeper)). diff --git a/x/wasm/keeper/test_common.go b/x/wasm/keeper/test_common.go index 21077346f4..a99a739066 100644 --- a/x/wasm/keeper/test_common.go +++ b/x/wasm/keeper/test_common.go @@ -124,6 +124,7 @@ var TestingStakeParams = stakingtypes.Params{ MaxEntries: 10, HistoricalEntries: 10, BondDenom: "stake", + MinCommissionRate: sdk.NewDecWithPrec(10, 2), } type TestFaucet struct { From 6222f2be3eed5b90f30786842f52dd93e8c8c9cd Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 13 Aug 2022 23:30:23 +0700 Subject: [PATCH 030/120] Update config.yml --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index dfd118d667..f0767528e5 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ version: 2.1 executors: golang: docker: - - image: cimg/go:1.19 + - image: cimg/go:1.18 commands: make: From e54fdb16493ca8471f0f1c2868488d53901f38f0 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 13 Aug 2022 23:41:42 +0700 Subject: [PATCH 031/120] linting --- app/export.go | 15 ++++++++++++--- app/test_helpers.go | 2 +- cmd/wasmd/root.go | 2 +- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/app/export.go b/app/export.go index ce09220931..184d3048b6 100644 --- a/app/export.go +++ b/app/export.go @@ -110,7 +110,10 @@ func (app *WasmApp) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs [ feePool.CommunityPool = feePool.CommunityPool.Add(scraps...) app.distrKeeper.SetFeePool(ctx, feePool) - app.distrKeeper.Hooks().AfterValidatorCreated(ctx, val.GetOperator()) + err := app.distrKeeper.Hooks().AfterValidatorCreated(ctx, val.GetOperator()) + if err != nil { + panic(err) + } return false }) @@ -124,8 +127,14 @@ func (app *WasmApp) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs [ if err != nil { panic(err) } - app.distrKeeper.Hooks().BeforeDelegationCreated(ctx, delAddr, valAddr) - app.distrKeeper.Hooks().AfterDelegationModified(ctx, delAddr, valAddr) + err = app.distrKeeper.Hooks().BeforeDelegationCreated(ctx, delAddr, valAddr) + if err != nil { + panic(err) + } + err = app.distrKeeper.Hooks().AfterDelegationModified(ctx, delAddr, valAddr) + if err != nil { + panic(err) + } } // reset context height diff --git a/app/test_helpers.go b/app/test_helpers.go index 8c81c16f18..c20b5a9b7b 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -60,7 +60,7 @@ var DefaultConsensusParams = &abci.ConsensusParams{ func setup(t testing.TB, withGenesis bool, invCheckPeriod uint, opts ...wasm.Option) (*WasmApp, GenesisState) { nodeHome := t.TempDir() snapshotDir := filepath.Join(nodeHome, "data", "snapshots") - snapshotDB, err := sdk.NewLevelDB("metadata", snapshotDir) + snapshotDB, err := sdk.NewLevelDB("metadata", snapshotDir) //nolint:staticcheck require.NoError(t, err) snapshotStore, err := snapshots.NewStore(snapshotDB, snapshotDir) require.NoError(t, err) diff --git a/cmd/wasmd/root.go b/cmd/wasmd/root.go index 9451fd3c78..5a6e6accf1 100644 --- a/cmd/wasmd/root.go +++ b/cmd/wasmd/root.go @@ -205,7 +205,7 @@ func (ac appCreator) newApp( } snapshotDir := filepath.Join(cast.ToString(appOpts.Get(flags.FlagHome)), "data", "snapshots") - snapshotDB, err := sdk.NewLevelDB("metadata", snapshotDir) + snapshotDB, err := sdk.NewLevelDB("metadata", snapshotDir) //nolint:staticcheck if err != nil { panic(err) } From a5b94066632680315cd5189c25a8247f5c5c7da3 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sun, 14 Aug 2022 01:02:44 +0700 Subject: [PATCH 032/120] Setifexists --- x/wasm/keeper/keeper.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index a5fce2ace6..d6cc73729e 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -154,7 +154,7 @@ func (k Keeper) getInstantiateAccessConfig(ctx sdk.Context) types.AccessType { // GetParams returns the total set of wasm parameters. func (k Keeper) GetParams(ctx sdk.Context) types.Params { var params types.Params - k.paramSpace.GetParamSet(ctx, ¶ms) + k.paramSpace.GetParamSetIfExists(ctx, ¶ms) return params } From 85d69f06788ed5b20b7931d26009e123954e8d0f Mon Sep 17 00:00:00 2001 From: vuong Date: Sun, 14 Aug 2022 01:28:26 +0700 Subject: [PATCH 033/120] fix wasm export --- app/app_test.go | 91 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 89 insertions(+), 2 deletions(-) diff --git a/app/app_test.go b/app/app_test.go index a3bd66ab6f..4cc081d4a2 100644 --- a/app/app_test.go +++ b/app/app_test.go @@ -4,10 +4,20 @@ import ( "encoding/json" "os" "testing" - + "time" + + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/cosmos/ibc-go/v5/testing/mock" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/libs/log" + tmtypes "github.com/tendermint/tendermint/types" db "github.com/tendermint/tm-db" abci "github.com/tendermint/tendermint/abci/types" @@ -20,8 +30,27 @@ var emptyWasmOpts []wasm.Option = nil func TestWasmdExport(t *testing.T) { db := db.NewMemDB() gapp := NewWasmApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, MakeEncodingConfig(), wasm.EnableAllProposals, EmptyBaseAppOptions{}, emptyWasmOpts) + // generate validator private/public key + privVal := mock.NewPV() + pubKey, err := privVal.GetPubKey() + require.NoError(t, err) - genesisState := NewDefaultGenesisState() + // create validator set with single validator + validator := tmtypes.NewValidator(pubKey, 1) + valSet := tmtypes.NewValidatorSet([]*tmtypes.Validator{validator}) + + // generate genesis account + senderPrivKey := secp256k1.GenPrivKey() + acc := authtypes.NewBaseAccount(senderPrivKey.PubKey().Address().Bytes(), senderPrivKey.PubKey(), 0, 0) + amount, ok := sdk.NewIntFromString("10000000000000000000") + require.True(t, ok) + + balance := banktypes.Balance{ + Address: acc.GetAddress().String(), + Coins: sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, amount)), + } + + genesisState := SetupGenesisValSet(t, valSet, []authtypes.GenesisAccount{acc}, nil, gapp, balance) stateBytes, err := json.MarshalIndent(genesisState, "", " ") require.NoError(t, err) @@ -108,3 +137,61 @@ func setGenesis(gapp *WasmApp) error { gapp.Commit() return nil } + +func SetupGenesisValSet(t *testing.T, valSet *tmtypes.ValidatorSet, genAccs []authtypes.GenesisAccount, opts []wasm.Option, app *WasmApp, balances ...banktypes.Balance) GenesisState { + + genesisState := NewDefaultGenesisState() + // set genesis accounts + authGenesis := authtypes.NewGenesisState(authtypes.DefaultParams(), genAccs) + genesisState[authtypes.ModuleName] = app.appCodec.MustMarshalJSON(authGenesis) + + validators := make([]stakingtypes.Validator, 0, len(valSet.Validators)) + delegations := make([]stakingtypes.Delegation, 0, len(valSet.Validators)) + + bondAmt := sdk.NewInt(1000000) + + for _, val := range valSet.Validators { + pk, err := cryptocodec.FromTmPubKeyInterface(val.PubKey) + require.NoError(t, err) + pkAny, err := codectypes.NewAnyWithValue(pk) + require.NoError(t, err) + validator := stakingtypes.Validator{ + OperatorAddress: sdk.ValAddress(val.Address).String(), + ConsensusPubkey: pkAny, + Jailed: false, + Status: stakingtypes.Bonded, + Tokens: bondAmt, + DelegatorShares: sdk.OneDec(), + Description: stakingtypes.Description{}, + UnbondingHeight: int64(0), + UnbondingTime: time.Unix(0, 0).UTC(), + Commission: stakingtypes.NewCommission(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()), + MinSelfDelegation: sdk.ZeroInt(), + } + validators = append(validators, validator) + delegations = append(delegations, stakingtypes.NewDelegation(genAccs[0].GetAddress(), val.Address.Bytes(), sdk.OneDec())) + + } + + // set validators and delegations + stakingGenesis := stakingtypes.NewGenesisState(stakingtypes.DefaultParams(), validators, delegations) + genesisState[stakingtypes.ModuleName] = app.appCodec.MustMarshalJSON(stakingGenesis) + + totalSupply := sdk.NewCoins() + for _, b := range balances { + // add genesis acc tokens and delegated tokens to total supply + totalSupply = totalSupply.Add(b.Coins.Add(sdk.NewCoin(sdk.DefaultBondDenom, bondAmt))...) + } + + // add bonded amount to bonded pool module account + balances = append(balances, banktypes.Balance{ + Address: authtypes.NewModuleAddress(stakingtypes.BondedPoolName).String(), + Coins: sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, bondAmt)}, + }) + + // update total supply + bankGenesis := banktypes.NewGenesisState(banktypes.DefaultGenesisState().Params, balances, totalSupply, []banktypes.Metadata{}) + genesisState[banktypes.ModuleName] = app.appCodec.MustMarshalJSON(bankGenesis) + + return genesisState +} From d6d7c8f2767f14e990dfe0e72aae983372747b82 Mon Sep 17 00:00:00 2001 From: vuong Date: Mon, 15 Aug 2022 23:35:27 +0700 Subject: [PATCH 034/120] SetInterfaceRegistry --- x/wasm/keeper/test_common.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/x/wasm/keeper/test_common.go b/x/wasm/keeper/test_common.go index a99a739066..494a60dd5a 100644 --- a/x/wasm/keeper/test_common.go +++ b/x/wasm/keeper/test_common.go @@ -361,6 +361,8 @@ func createTestInput( ) router := baseapp.NewMsgServiceRouter() + router.SetInterfaceRegistry(encodingConfig.InterfaceRegistry) + banktypes.RegisterMsgServer(router, bankkeeper.NewMsgServerImpl(bankKeeper)) stakingtypes.RegisterMsgServer(router, stakingkeeper.NewMsgServerImpl(stakingKeeper)) distributiontypes.RegisterMsgServer(router, distributionkeeper.NewMsgServerImpl(distKeeper)) From 960f7dae519589bc0456be86f8fc93b9adb6f4c2 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Tue, 16 Aug 2022 00:59:58 +0700 Subject: [PATCH 035/120] Update dependabot.yml --- .github/dependabot.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 1c9557cc89..376c012334 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,5 +1,10 @@ version: 2 -updates: +updates: +- package-ecosystem: github-actions + directory: "/" + schedule: + interval: daily + open-pull-requests-limit: 10 - package-ecosystem: gomod directory: "/" schedule: From 1ef57322a610eebe81d3e8961e80a21d59271c06 Mon Sep 17 00:00:00 2001 From: vuong Date: Tue, 16 Aug 2022 02:29:18 +0700 Subject: [PATCH 036/120] fix gas limit --- x/wasm/keeper/keeper.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index d6cc73729e..87848b7f91 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -926,9 +926,10 @@ func (k Keeper) runtimeGasForContract(ctx sdk.Context) uint64 { if meter.IsOutOfGas() { return 0 } - if meter.Limit() == 0 { // infinite gas meter with limit=0 and not out of gas + if meter.Limit() == math.MaxUint64 { // infinite gas meter with limit=math.MaxUint64 and not out of gas return math.MaxUint64 } + return k.gasRegister.ToWasmVMGas(meter.Limit() - meter.GasConsumedToLimit()) } From b152460688dc6631c94224d082c5fc8428fcce69 Mon Sep 17 00:00:00 2001 From: vuong Date: Tue, 16 Aug 2022 16:17:00 +0700 Subject: [PATCH 037/120] nil srcExp --- x/wasm/keeper/keeper_test.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index bb20a39267..123fab230a 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -520,7 +520,9 @@ func TestInstantiateWithPermissions(t *testing.T) { t.Run(msg, func(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, bankKeeper, keeper := keepers.AccountKeeper, keepers.BankKeeper, keepers.ContractKeeper - fundAccounts(t, ctx, accKeeper, bankKeeper, spec.srcActor, deposit) + if spec.srcActor != nil { + fundAccounts(t, ctx, accKeeper, bankKeeper, spec.srcActor, deposit) + } contractID, err := keeper.Create(ctx, myAddr, hackatomWasm, &spec.srcPermission) require.NoError(t, err) From e181321d4ea07188aa4a986d97af0cc58025e51a Mon Sep 17 00:00:00 2001 From: vuong Date: Tue, 16 Aug 2022 23:51:42 +0700 Subject: [PATCH 038/120] govv1 --- x/wasm/keeper/keeper.go | 2 +- x/wasm/keeper/test_common.go | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index 87848b7f91..8d48d9bd21 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -154,7 +154,7 @@ func (k Keeper) getInstantiateAccessConfig(ctx sdk.Context) types.AccessType { // GetParams returns the total set of wasm parameters. func (k Keeper) GetParams(ctx sdk.Context) types.Params { var params types.Params - k.paramSpace.GetParamSetIfExists(ctx, ¶ms) + k.paramSpace.GetParamSet(ctx, ¶ms) return params } diff --git a/x/wasm/keeper/test_common.go b/x/wasm/keeper/test_common.go index 494a60dd5a..de60ed6fa7 100644 --- a/x/wasm/keeper/test_common.go +++ b/x/wasm/keeper/test_common.go @@ -42,6 +42,7 @@ import ( govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/cosmos/cosmos-sdk/x/mint" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" @@ -114,6 +115,7 @@ func MakeEncodingConfig(_ testing.TB) wasmappparams.EncodingConfig { // add wasmd types types.RegisterInterfaces(interfaceRegistry) types.RegisterLegacyAminoCodec(amino) + govv1beta1.RegisterInterfaces(interfaceRegistry) return encodingConfig } @@ -413,7 +415,6 @@ func createTestInput( AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(paramsKeeper)). AddRoute(distributiontypes.RouterKey, distribution.NewCommunityPoolSpendProposalHandler(distKeeper)). AddRoute(types.RouterKey, NewWasmProposalHandler(&keeper, types.EnableAllProposals)) - govConfig := govtypes.DefaultConfig() /* Example of setting gov params: @@ -428,10 +429,13 @@ func createTestInput( bankKeeper, stakingKeeper, govRouter, - baseapp.NewMsgServiceRouter(), + router, govConfig, ) + govv1.RegisterMsgServer(router, govkeeper.NewMsgServerImpl(govKeeper)) + v1beta1.RegisterQueryServer(querier, govkeeper.NewLegacyQueryServer(govKeeper)) + govKeeper.SetProposalID(ctx, govv1beta1.DefaultStartingProposalID) govKeeper.SetDepositParams(ctx, govv1.DefaultDepositParams()) govKeeper.SetVotingParams(ctx, govv1.DefaultVotingParams()) From ac263a1519b9258bec311f156906091d59b9897d Mon Sep 17 00:00:00 2001 From: vuong Date: Wed, 17 Aug 2022 01:19:50 +0700 Subject: [PATCH 039/120] govv1 in TestQueryContractInfo --- go.mod | 2 +- go.sum | 4 ++-- x/wasm/keeper/querier_test.go | 5 ++--- x/wasm/keeper/test_common.go | 4 +--- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 2fb2bf551e..4bec73e86e 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( cosmossdk.io/errors v1.0.0-beta.7 cosmossdk.io/math v1.0.0-beta.3 github.com/CosmWasm/wasmvm v1.0.0 - github.com/cosmos/cosmos-sdk v0.46.1-0.20220811143248-629b3b9df8de + github.com/cosmos/cosmos-sdk v0.46.0 github.com/cosmos/iavl v0.19.1 github.com/cosmos/ibc-go/v5 v5.0.0-beta1.0.20220812090728-e1f7e89dc1e2 github.com/cosmos/interchain-accounts v0.3.1-0.20220812171121-8d8742554e53 diff --git a/go.sum b/go.sum index 7d07a6ac54..6d4040b462 100644 --- a/go.sum +++ b/go.sum @@ -296,8 +296,8 @@ github.com/cosmos/btcutil v1.0.4 h1:n7C2ngKXo7UC9gNyMNLbzqz7Asuf+7Qv4gnX/rOdQ44= github.com/cosmos/btcutil v1.0.4/go.mod h1:Ffqc8Hn6TJUdDgHBwIZLtrLQC1KdJ9jGJl/TvgUaxbU= github.com/cosmos/cosmos-proto v1.0.0-alpha7 h1:yqYUOHF2jopwZh4dVQp3xgqwftE5/2hkrwIV6vkUbO0= github.com/cosmos/cosmos-proto v1.0.0-alpha7/go.mod h1:dosO4pSAbJF8zWCzCoTWP7nNsjcvSUBQmniFxDg5daw= -github.com/cosmos/cosmos-sdk v0.46.1-0.20220811143248-629b3b9df8de h1:UQRRKRi4tcjNAeGspjOkMoNrv4WVfbfD+27gAYVVzAM= -github.com/cosmos/cosmos-sdk v0.46.1-0.20220811143248-629b3b9df8de/go.mod h1:RUBAvwuY1wWQNMiNK3n1xA/xKw6JNfw5AVsKfU3lS3o= +github.com/cosmos/cosmos-sdk v0.46.0 h1:TwifvVmAmqUNB70tN1clrqExryWyBU3RxbI2QZEJUJY= +github.com/cosmos/cosmos-sdk v0.46.0/go.mod h1:u6Ci6+V+srijJhzctEEPYBygUz3O2YXP5ZijPnV6mt0= 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= diff --git a/x/wasm/keeper/querier_test.go b/x/wasm/keeper/querier_test.go index ebf2a371be..58323fffa2 100644 --- a/x/wasm/keeper/querier_test.go +++ b/x/wasm/keeper/querier_test.go @@ -9,6 +9,7 @@ import ( "testing" "time" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -17,8 +18,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkErrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/query" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1" - govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/libs/log" @@ -546,7 +545,7 @@ func TestQueryContractInfo(t *testing.T) { querier := NewGrpcQuerier(k.cdc, k.storeKey, k, k.queryGasLimit) myExtension := func(info *types.ContractInfo) { // abuse gov proposal as a random protobuf extension with an Any type - myExt, err := govv1beta1.NewProposal(&govv1beta1.TextProposal{Title: "foo", Description: "bar"}, 1, anyDate, anyDate) + myExt, err := govtypes.NewProposal(&govtypes.TextProposal{Title: "foo", Description: "bar"}, 1, anyDate, anyDate) require.NoError(t, err) myExt.TotalDeposit = nil info.SetExtension(&myExt) diff --git a/x/wasm/keeper/test_common.go b/x/wasm/keeper/test_common.go index de60ed6fa7..b1d6edcb40 100644 --- a/x/wasm/keeper/test_common.go +++ b/x/wasm/keeper/test_common.go @@ -42,7 +42,6 @@ import ( govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" - "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/cosmos/cosmos-sdk/x/mint" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" @@ -115,7 +114,6 @@ func MakeEncodingConfig(_ testing.TB) wasmappparams.EncodingConfig { // add wasmd types types.RegisterInterfaces(interfaceRegistry) types.RegisterLegacyAminoCodec(amino) - govv1beta1.RegisterInterfaces(interfaceRegistry) return encodingConfig } @@ -434,7 +432,7 @@ func createTestInput( ) govv1.RegisterMsgServer(router, govkeeper.NewMsgServerImpl(govKeeper)) - v1beta1.RegisterQueryServer(querier, govkeeper.NewLegacyQueryServer(govKeeper)) + govv1beta1.RegisterQueryServer(querier, govkeeper.NewLegacyQueryServer(govKeeper)) govKeeper.SetProposalID(ctx, govv1beta1.DefaultStartingProposalID) govKeeper.SetDepositParams(ctx, govv1.DefaultDepositParams()) From 212d8379e9f42de4aa3aa1c0a378545bc73c7583 Mon Sep 17 00:00:00 2001 From: vuong Date: Wed, 17 Aug 2022 17:59:23 +0700 Subject: [PATCH 040/120] snapshot test --- app/test_helpers.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/test_helpers.go b/app/test_helpers.go index c20b5a9b7b..28ccd0ec99 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -65,7 +65,7 @@ func setup(t testing.TB, withGenesis bool, invCheckPeriod uint, opts ...wasm.Opt snapshotStore, err := snapshots.NewStore(snapshotDB, snapshotDir) require.NoError(t, err) baseAppOpts := []func(*bam.BaseApp){ - bam.SetSnapshot(snapshotStore, snapshottypes.NewSnapshotOptions(0, 2)), + bam.SetSnapshot(snapshotStore, snapshottypes.NewSnapshotOptions(50000, 2)), } db := dbm.NewMemDB() app := NewWasmApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, nodeHome, invCheckPeriod, MakeEncodingConfig(), wasm.EnableAllProposals, EmptyBaseAppOptions{}, opts, baseAppOpts...) From 60e99a9246d69faf1b20b5e1b67d120c004e9a06 Mon Sep 17 00:00:00 2001 From: vuong Date: Wed, 17 Aug 2022 18:01:55 +0700 Subject: [PATCH 041/120] fix gas in test, v1beta -> v1 --- x/wasm/keeper/handler_plugin_encoders_test.go | 2 +- x/wasm/keeper/keeper_test.go | 4 ++-- x/wasm/keeper/submsg_test.go | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/x/wasm/keeper/handler_plugin_encoders_test.go b/x/wasm/keeper/handler_plugin_encoders_test.go index 704221e7e3..715a5d6521 100644 --- a/x/wasm/keeper/handler_plugin_encoders_test.go +++ b/x/wasm/keeper/handler_plugin_encoders_test.go @@ -4,7 +4,7 @@ import ( "testing" codectypes "github.com/cosmos/cosmos-sdk/codec/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1" ibctransfertypes "github.com/cosmos/ibc-go/v5/modules/apps/transfer/types" clienttypes "github.com/cosmos/ibc-go/v5/modules/core/02-client/types" channeltypes "github.com/cosmos/ibc-go/v5/modules/core/04-channel/types" diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index 123fab230a..304fde77cf 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -390,7 +390,7 @@ func TestInstantiate(t *testing.T) { gasAfter := ctx.GasMeter().GasConsumed() if types.EnableGasVerification { - require.Equal(t, uint64(0x18db5), gasAfter-gasBefore) + require.Equal(t, uint64(0x19bbb), gasAfter-gasBefore) } // ensure it is stored properly @@ -625,7 +625,7 @@ func TestExecute(t *testing.T) { // make sure gas is properly deducted from ctx gasAfter := ctx.GasMeter().GasConsumed() if types.EnableGasVerification { - require.Equal(t, uint64(0x17cd2), gasAfter-gasBefore) + require.Equal(t, uint64(0x1a1a3), gasAfter-gasBefore) } // ensure bob now exists and got both payments released bobAcct = accKeeper.GetAccount(ctx, bob) diff --git a/x/wasm/keeper/submsg_test.go b/x/wasm/keeper/submsg_test.go index 341816464f..c17f18b6e6 100644 --- a/x/wasm/keeper/submsg_test.go +++ b/x/wasm/keeper/submsg_test.go @@ -236,7 +236,7 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { "send tokens": { submsgID: 5, msg: validBankSend, - resultAssertions: []assertion{assertReturnedEvents(0), assertGasUsed(95000, 96000)}, + resultAssertions: []assertion{assertReturnedEvents(0), assertGasUsed(95000, 104000)}, }, "not enough tokens": { submsgID: 6, @@ -256,7 +256,7 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { msg: validBankSend, gasLimit: &subGasLimit, // uses same gas as call without limit (note we do not charge the 40k on reply) - resultAssertions: []assertion{assertReturnedEvents(0), assertGasUsed(95000, 96000)}, + resultAssertions: []assertion{assertReturnedEvents(0), assertGasUsed(95000, 104000)}, }, "not enough tokens with limit": { submsgID: 16, From 7c4e4123239e8569a0bac987b521308509e2af33 Mon Sep 17 00:00:00 2001 From: vuong Date: Wed, 17 Aug 2022 18:30:49 +0700 Subject: [PATCH 042/120] govv1 in encoding test --- x/wasm/keeper/handler_plugin_encoders_test.go | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/x/wasm/keeper/handler_plugin_encoders_test.go b/x/wasm/keeper/handler_plugin_encoders_test.go index 715a5d6521..cc5ee26e7c 100644 --- a/x/wasm/keeper/handler_plugin_encoders_test.go +++ b/x/wasm/keeper/handler_plugin_encoders_test.go @@ -4,7 +4,9 @@ import ( "testing" codectypes "github.com/cosmos/cosmos-sdk/codec/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" + ibctransfertypes "github.com/cosmos/ibc-go/v5/modules/apps/transfer/types" clienttypes "github.com/cosmos/ibc-go/v5/modules/core/02-client/types" channeltypes "github.com/cosmos/ibc-go/v5/modules/core/04-channel/types" @@ -509,10 +511,10 @@ func TestEncoding(t *testing.T) { }, }, output: []sdk.Msg{ - &govtypes.MsgVote{ + &govv1.MsgVote{ ProposalId: 1, Voter: addr1.String(), - Option: govtypes.OptionYes, + Option: govv1.OptionYes, }, }, }, @@ -525,10 +527,10 @@ func TestEncoding(t *testing.T) { }, }, output: []sdk.Msg{ - &govtypes.MsgVote{ + &govv1.MsgVote{ ProposalId: 1, Voter: addr1.String(), - Option: govtypes.OptionNo, + Option: govv1.OptionNo, }, }, }, @@ -541,10 +543,10 @@ func TestEncoding(t *testing.T) { }, }, output: []sdk.Msg{ - &govtypes.MsgVote{ + &govv1.MsgVote{ ProposalId: 10, Voter: addr1.String(), - Option: govtypes.OptionAbstain, + Option: govv1.OptionAbstain, }, }, }, @@ -557,10 +559,10 @@ func TestEncoding(t *testing.T) { }, }, output: []sdk.Msg{ - &govtypes.MsgVote{ + &govv1.MsgVote{ ProposalId: 1, Voter: addr1.String(), - Option: govtypes.OptionNoWithVeto, + Option: govv1.OptionNoWithVeto, }, }, }, From 63649c248774732550827386bcd6703918daf314 Mon Sep 17 00:00:00 2001 From: vuong Date: Wed, 17 Aug 2022 18:57:33 +0700 Subject: [PATCH 043/120] fix wasm.go --- x/wasm/ibctesting/wasm.go | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/x/wasm/ibctesting/wasm.go b/x/wasm/ibctesting/wasm.go index 29abb654df..c020ac1ff4 100644 --- a/x/wasm/ibctesting/wasm.go +++ b/x/wasm/ibctesting/wasm.go @@ -10,9 +10,8 @@ import ( wasmd "github.com/CosmWasm/wasmd/app" - ibctesting "github.com/cosmos/ibc-go/v5/testing" - sdk "github.com/cosmos/cosmos-sdk/types" + ibctesting "github.com/cosmos/ibc-go/v5/testing" "github.com/golang/protobuf/proto" //nolint "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" @@ -58,11 +57,9 @@ func (chain *TestChain) StoreCode(byteCode []byte) types.MsgStoreCodeResponse { } r, err := chain.SendMsgs(storeMsg) require.NoError(chain.t, err) - protoResult := chain.parseSDKResultData(r) - require.Len(chain.t, protoResult.Data, 1) - // unmarshal protobuf response from data + var pInstResp types.MsgStoreCodeResponse - require.NoError(chain.t, pInstResp.Unmarshal(protoResult.Data[0].Data)) + require.NoError(chain.t, pInstResp.Unmarshal(r.MsgResponses[0].Value)) require.NotEmpty(chain.t, pInstResp.CodeID) return pInstResp } @@ -79,11 +76,9 @@ func (chain *TestChain) InstantiateContract(codeID uint64, initMsg []byte) sdk.A r, err := chain.SendMsgs(instantiateMsg) require.NoError(chain.t, err) - protoResult := chain.parseSDKResultData(r) - require.Len(chain.t, protoResult.Data, 1) var pExecResp types.MsgInstantiateContractResponse - require.NoError(chain.t, pExecResp.Unmarshal(protoResult.Data[0].Data)) + require.NoError(chain.t, pExecResp.Unmarshal(r.MsgResponses[0].Value)) a, err := sdk.AccAddressFromBech32(pExecResp.Address) require.NoError(chain.t, err) return a @@ -127,12 +122,6 @@ func (chain *TestChain) SmartQuery(contractAddr string, queryMsg interface{}, re return json.Unmarshal(resp.Data, response) } -func (chain *TestChain) parseSDKResultData(r *sdk.Result) sdk.TxMsgData { - var protoResult sdk.TxMsgData - require.NoError(chain.t, proto.Unmarshal(r.Data, &protoResult)) - return protoResult -} - // ContractInfo is a helper function to returns the ContractInfo for the given contract address func (chain *TestChain) ContractInfo(contractAddr sdk.AccAddress) *types.ContractInfo { type testSupporter interface { From d1bf255d213aa90df32e669e21fd060f1fd2661b Mon Sep 17 00:00:00 2001 From: vuong Date: Wed, 17 Aug 2022 23:24:58 +0700 Subject: [PATCH 044/120] with valset in bench --- benchmarks/app_test.go | 58 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 54 insertions(+), 4 deletions(-) diff --git a/benchmarks/app_test.go b/benchmarks/app_test.go index 73383c666c..b1a6955a12 100644 --- a/benchmarks/app_test.go +++ b/benchmarks/app_test.go @@ -12,12 +12,13 @@ import ( abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + tmtypes "github.com/tendermint/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" "github.com/cosmos/cosmos-sdk/simapp/helpers" simappparams "github.com/cosmos/cosmos-sdk/simapp/params" + "github.com/cosmos/cosmos-sdk/testutil/mock" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" @@ -25,6 +26,12 @@ import ( "github.com/CosmWasm/wasmd/app" "github.com/CosmWasm/wasmd/x/wasm" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + + cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" ) func setup(db dbm.DB, withGenesis bool, invCheckPeriod uint, opts ...wasm.Option) (*app.WasmApp, app.GenesisState) { @@ -38,18 +45,61 @@ func setup(db dbm.DB, withGenesis bool, invCheckPeriod uint, opts ...wasm.Option // SetupWithGenesisAccounts initializes a new WasmApp with the provided genesis // accounts and possible balances. -func SetupWithGenesisAccounts(b testing.TB, db dbm.DB, genAccs []authtypes.GenesisAccount, balances ...banktypes.Balance) *app.WasmApp { +func SetupWithGenesisAccountsAndValSet(b testing.TB, db dbm.DB, genAccs []authtypes.GenesisAccount, balances ...banktypes.Balance) *app.WasmApp { wasmApp, genesisState := setup(db, true, 0) authGenesis := authtypes.NewGenesisState(authtypes.DefaultParams(), genAccs) appCodec := app.NewTestSupport(b, wasmApp).AppCodec() + privVal := mock.NewPV() + pubKey, err := privVal.GetPubKey() + require.NoError(b, err) + genesisState[authtypes.ModuleName] = appCodec.MustMarshalJSON(authGenesis) + validator := tmtypes.NewValidator(pubKey, 1) + valSet := tmtypes.NewValidatorSet([]*tmtypes.Validator{validator}) + + validators := make([]stakingtypes.Validator, 0, len(valSet.Validators)) + delegations := make([]stakingtypes.Delegation, 0, len(valSet.Validators)) + + bondAmt := sdk.DefaultPowerReduction + + for _, val := range valSet.Validators { + pk, _ := cryptocodec.FromTmPubKeyInterface(val.PubKey) + pkAny, _ := codectypes.NewAnyWithValue(pk) + validator := stakingtypes.Validator{ + OperatorAddress: sdk.ValAddress(val.Address).String(), + ConsensusPubkey: pkAny, + Jailed: false, + Status: stakingtypes.Bonded, + Tokens: bondAmt, + DelegatorShares: sdk.OneDec(), + Description: stakingtypes.Description{}, + UnbondingHeight: int64(0), + UnbondingTime: time.Unix(0, 0).UTC(), + Commission: stakingtypes.NewCommission(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()), + MinSelfDelegation: sdk.ZeroInt(), + } + validators = append(validators, validator) + delegations = append(delegations, stakingtypes.NewDelegation(genAccs[0].GetAddress(), val.Address.Bytes(), sdk.OneDec())) + + } + // set validators and delegations + stakingGenesis := stakingtypes.NewGenesisState(stakingtypes.DefaultParams(), validators, delegations) + genesisState[stakingtypes.ModuleName] = appCodec.MustMarshalJSON(stakingGenesis) + totalSupply := sdk.NewCoins() + + // add bonded amount to bonded pool module account + balances = append(balances, banktypes.Balance{ + Address: authtypes.NewModuleAddress(stakingtypes.BondedPoolName).String(), + Coins: sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, bondAmt)}, + }) + // update total supply for _, b := range balances { + // add genesis acc tokens and delegated tokens to total supply totalSupply = totalSupply.Add(b.Coins...) } - bankGenesis := banktypes.NewGenesisState(banktypes.DefaultGenesisState().Params, balances, totalSupply, []banktypes.Metadata{}) genesisState[banktypes.ModuleName] = appCodec.MustMarshalJSON(bankGenesis) @@ -112,7 +162,7 @@ func InitializeWasmApp(b testing.TB, db dbm.DB, numAccounts int) AppInfo { Coins: sdk.NewCoins(sdk.NewInt64Coin(denom, 100000000000)), } } - wasmApp := SetupWithGenesisAccounts(b, db, genAccs, bals...) + wasmApp := SetupWithGenesisAccountsAndValSet(b, db, genAccs, bals...) // add wasm contract height := int64(2) From 00082a25b84e8e1e4ede623da9ec3a59b786765b Mon Sep 17 00:00:00 2001 From: Alexander Peters Date: Tue, 23 Aug 2022 17:01:04 +0200 Subject: [PATCH 045/120] Make app keepers public (#951) * use ecosystem convention for keeper names in app.go * fix linting * Revert variable renaming * Deprecate attribute access helper * Formatting only * Replace usage of deprecated test helper * Address linter report Co-authored-by: faddat --- app/app.go | 302 ++++++++++++++++---------------- app/app_test.go | 2 +- app/export.go | 51 +++--- app/sim_test.go | 2 +- app/test_access.go | 17 +- app/test_helpers.go | 10 +- x/wasm/client/cli/query.go | 4 +- x/wasm/client/cli/tx.go | 4 +- x/wasm/ibctesting/chain.go | 91 +++------- x/wasm/ibctesting/endpoint.go | 20 +-- x/wasm/ibctesting/path.go | 4 +- x/wasm/ibctesting/wasm.go | 11 +- x/wasm/ioutils/ioutil.go | 3 +- x/wasm/keeper/test_common.go | 4 +- x/wasm/relay_pingpong_test.go | 2 +- x/wasm/relay_test.go | 8 +- x/wasm/simulation/operations.go | 5 +- x/wasm/types/types.go | 9 +- 18 files changed, 253 insertions(+), 296 deletions(-) diff --git a/app/app.go b/app/app.go index 300ef7b150..23259d0d0d 100644 --- a/app/app.go +++ b/app/app.go @@ -243,33 +243,33 @@ type WasmApp struct { memKeys map[string]*sdk.MemoryStoreKey // keepers - accountKeeper authkeeper.AccountKeeper - bankKeeper bankkeeper.Keeper - capabilityKeeper *capabilitykeeper.Keeper - stakingKeeper stakingkeeper.Keeper - slashingKeeper slashingkeeper.Keeper - mintKeeper mintkeeper.Keeper - distrKeeper distrkeeper.Keeper - govKeeper govkeeper.Keeper - crisisKeeper crisiskeeper.Keeper - upgradeKeeper upgradekeeper.Keeper - paramsKeeper paramskeeper.Keeper - evidenceKeeper evidencekeeper.Keeper - ibcKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly - icaControllerKeeper icacontrollerkeeper.Keeper - icaHostKeeper icahostkeeper.Keeper - interTxKeeper intertxkeeper.Keeper - transferKeeper ibctransferkeeper.Keeper - feeGrantKeeper feegrantkeeper.Keeper - authzKeeper authzkeeper.Keeper - wasmKeeper wasm.Keeper - - scopedIBCKeeper capabilitykeeper.ScopedKeeper - scopedICAHostKeeper capabilitykeeper.ScopedKeeper - scopedICAControllerKeeper capabilitykeeper.ScopedKeeper - scopedInterTxKeeper capabilitykeeper.ScopedKeeper - scopedTransferKeeper capabilitykeeper.ScopedKeeper - scopedWasmKeeper capabilitykeeper.ScopedKeeper + AccountKeeper authkeeper.AccountKeeper + BankKeeper bankkeeper.Keeper + CapabilityKeeper *capabilitykeeper.Keeper + StakingKeeper stakingkeeper.Keeper + SlashingKeeper slashingkeeper.Keeper + MintKeeper mintkeeper.Keeper + DistrKeeper distrkeeper.Keeper + GovKeeper govkeeper.Keeper + CrisisKeeper crisiskeeper.Keeper + UpgradeKeeper upgradekeeper.Keeper + ParamsKeeper paramskeeper.Keeper + EvidenceKeeper evidencekeeper.Keeper + IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly + ICAControllerKeeper icacontrollerkeeper.Keeper + ICAHostKeeper icahostkeeper.Keeper + InterTxKeeper intertxkeeper.Keeper + TransferKeeper ibctransferkeeper.Keeper + FeeGrantKeeper feegrantkeeper.Keeper + AuthzKeeper authzkeeper.Keeper + WasmKeeper wasm.Keeper + + ScopedIBCKeeper capabilitykeeper.ScopedKeeper + ScopedICAHostKeeper capabilitykeeper.ScopedKeeper + ScopedICAControllerKeeper capabilitykeeper.ScopedKeeper + ScopedInterTxKeeper capabilitykeeper.ScopedKeeper + ScopedTransferKeeper capabilitykeeper.ScopedKeeper + ScopedWasmKeeper capabilitykeeper.ScopedKeeper // the module manager mm *module.Manager @@ -324,7 +324,7 @@ func NewWasmApp( memKeys: memKeys, } - app.paramsKeeper = initParamsKeeper( + app.ParamsKeeper = initParamsKeeper( appCodec, legacyAmino, keys[paramstypes.StoreKey], @@ -332,86 +332,86 @@ func NewWasmApp( ) // set the BaseApp's parameter store - bApp.SetParamStore(app.paramsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramskeeper.ConsensusParamsKeyTable())) + bApp.SetParamStore(app.ParamsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramskeeper.ConsensusParamsKeyTable())) // add capability keeper and ScopeToModule for ibc module - app.capabilityKeeper = capabilitykeeper.NewKeeper( + app.CapabilityKeeper = capabilitykeeper.NewKeeper( appCodec, keys[capabilitytypes.StoreKey], memKeys[capabilitytypes.MemStoreKey], ) - scopedIBCKeeper := app.capabilityKeeper.ScopeToModule(ibchost.ModuleName) - scopedICAHostKeeper := app.capabilityKeeper.ScopeToModule(icahosttypes.SubModuleName) - scopedICAControllerKeeper := app.capabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName) - scopedInterTxKeeper := app.capabilityKeeper.ScopeToModule(intertxtypes.ModuleName) - scopedTransferKeeper := app.capabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) - scopedWasmKeeper := app.capabilityKeeper.ScopeToModule(wasm.ModuleName) - app.capabilityKeeper.Seal() + scopedIBCKeeper := app.CapabilityKeeper.ScopeToModule(ibchost.ModuleName) + scopedICAHostKeeper := app.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName) + scopedICAControllerKeeper := app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName) + scopedInterTxKeeper := app.CapabilityKeeper.ScopeToModule(intertxtypes.ModuleName) + scopedTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) + scopedWasmKeeper := app.CapabilityKeeper.ScopeToModule(wasm.ModuleName) + app.CapabilityKeeper.Seal() // add keepers - app.accountKeeper = authkeeper.NewAccountKeeper( + app.AccountKeeper = authkeeper.NewAccountKeeper( appCodec, keys[authtypes.StoreKey], app.getSubspace(authtypes.ModuleName), authtypes.ProtoBaseAccount, maccPerms, ) - app.bankKeeper = bankkeeper.NewBaseKeeper( + app.BankKeeper = bankkeeper.NewBaseKeeper( appCodec, keys[banktypes.StoreKey], - app.accountKeeper, + app.AccountKeeper, app.getSubspace(banktypes.ModuleName), app.ModuleAccountAddrs(), ) - app.authzKeeper = authzkeeper.NewKeeper( + app.AuthzKeeper = authzkeeper.NewKeeper( keys[authzkeeper.StoreKey], appCodec, app.BaseApp.MsgServiceRouter(), ) - app.feeGrantKeeper = feegrantkeeper.NewKeeper( + app.FeeGrantKeeper = feegrantkeeper.NewKeeper( appCodec, keys[feegrant.StoreKey], - app.accountKeeper, + app.AccountKeeper, ) stakingKeeper := stakingkeeper.NewKeeper( appCodec, keys[stakingtypes.StoreKey], - app.accountKeeper, - app.bankKeeper, + app.AccountKeeper, + app.BankKeeper, app.getSubspace(stakingtypes.ModuleName), ) - app.mintKeeper = mintkeeper.NewKeeper( + app.MintKeeper = mintkeeper.NewKeeper( appCodec, keys[minttypes.StoreKey], app.getSubspace(minttypes.ModuleName), &stakingKeeper, - app.accountKeeper, - app.bankKeeper, + app.AccountKeeper, + app.BankKeeper, authtypes.FeeCollectorName, ) - app.distrKeeper = distrkeeper.NewKeeper( + app.DistrKeeper = distrkeeper.NewKeeper( appCodec, keys[distrtypes.StoreKey], app.getSubspace(distrtypes.ModuleName), - app.accountKeeper, - app.bankKeeper, + app.AccountKeeper, + app.BankKeeper, &stakingKeeper, authtypes.FeeCollectorName, app.ModuleAccountAddrs(), ) - app.slashingKeeper = slashingkeeper.NewKeeper( + app.SlashingKeeper = slashingkeeper.NewKeeper( appCodec, keys[slashingtypes.StoreKey], &stakingKeeper, app.getSubspace(slashingtypes.ModuleName), ) - app.crisisKeeper = crisiskeeper.NewKeeper( + app.CrisisKeeper = crisiskeeper.NewKeeper( app.getSubspace(crisistypes.ModuleName), invCheckPeriod, - app.bankKeeper, + app.BankKeeper, authtypes.FeeCollectorName, ) - app.upgradeKeeper = upgradekeeper.NewKeeper( + app.UpgradeKeeper = upgradekeeper.NewKeeper( skipUpgradeHeights, keys[upgradetypes.StoreKey], appCodec, @@ -421,16 +421,16 @@ func NewWasmApp( // register the staking hooks // NOTE: stakingKeeper above is passed by reference, so that it will contain these hooks - app.stakingKeeper = *stakingKeeper.SetHooks( - stakingtypes.NewMultiStakingHooks(app.distrKeeper.Hooks(), app.slashingKeeper.Hooks()), + app.StakingKeeper = *stakingKeeper.SetHooks( + stakingtypes.NewMultiStakingHooks(app.DistrKeeper.Hooks(), app.SlashingKeeper.Hooks()), ) - app.ibcKeeper = ibckeeper.NewKeeper( + app.IBCKeeper = ibckeeper.NewKeeper( appCodec, keys[ibchost.StoreKey], app.getSubspace(ibchost.ModuleName), - app.stakingKeeper, - app.upgradeKeeper, + app.StakingKeeper, + app.UpgradeKeeper, scopedIBCKeeper, ) @@ -438,66 +438,66 @@ func NewWasmApp( govRouter := govtypes.NewRouter() govRouter. AddRoute(govtypes.RouterKey, govtypes.ProposalHandler). - AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.paramsKeeper)). - AddRoute(distrtypes.RouterKey, distr.NewCommunityPoolSpendProposalHandler(app.distrKeeper)). - AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(app.upgradeKeeper)). - AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientProposalHandler(app.ibcKeeper.ClientKeeper)) + AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.ParamsKeeper)). + AddRoute(distrtypes.RouterKey, distr.NewCommunityPoolSpendProposalHandler(app.DistrKeeper)). + AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(app.UpgradeKeeper)). + AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientProposalHandler(app.IBCKeeper.ClientKeeper)) // Create Transfer Keepers - app.transferKeeper = ibctransferkeeper.NewKeeper( + app.TransferKeeper = ibctransferkeeper.NewKeeper( appCodec, keys[ibctransfertypes.StoreKey], app.getSubspace(ibctransfertypes.ModuleName), - app.ibcKeeper.ChannelKeeper, - app.ibcKeeper.ChannelKeeper, - &app.ibcKeeper.PortKeeper, - app.accountKeeper, - app.bankKeeper, + app.IBCKeeper.ChannelKeeper, + app.IBCKeeper.ChannelKeeper, + &app.IBCKeeper.PortKeeper, + app.AccountKeeper, + app.BankKeeper, scopedTransferKeeper, ) - transferModule := transfer.NewAppModule(app.transferKeeper) - transferIBCModule := transfer.NewIBCModule(app.transferKeeper) + transferModule := transfer.NewAppModule(app.TransferKeeper) + transferIBCModule := transfer.NewIBCModule(app.TransferKeeper) - app.icaHostKeeper = icahostkeeper.NewKeeper( + app.ICAHostKeeper = icahostkeeper.NewKeeper( appCodec, keys[icahosttypes.StoreKey], app.getSubspace(icahosttypes.SubModuleName), - app.ibcKeeper.ChannelKeeper, - &app.ibcKeeper.PortKeeper, - app.accountKeeper, + app.IBCKeeper.ChannelKeeper, + &app.IBCKeeper.PortKeeper, + app.AccountKeeper, scopedICAHostKeeper, app.MsgServiceRouter(), ) - app.icaControllerKeeper = icacontrollerkeeper.NewKeeper( + app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper( appCodec, keys[icacontrollertypes.StoreKey], app.getSubspace(icacontrollertypes.SubModuleName), - app.ibcKeeper.ChannelKeeper, // may be replaced with middleware such as ics29 fee - app.ibcKeeper.ChannelKeeper, - &app.ibcKeeper.PortKeeper, + app.IBCKeeper.ChannelKeeper, // may be replaced with middleware such as ics29 fee + app.IBCKeeper.ChannelKeeper, + &app.IBCKeeper.PortKeeper, scopedICAControllerKeeper, app.MsgServiceRouter(), ) - icaModule := ica.NewAppModule(&app.icaControllerKeeper, &app.icaHostKeeper) - icaHostIBCModule := icahost.NewIBCModule(app.icaHostKeeper) + icaModule := ica.NewAppModule(&app.ICAControllerKeeper, &app.ICAHostKeeper) + icaHostIBCModule := icahost.NewIBCModule(app.ICAHostKeeper) // For wasmd we use the demo controller from https://github.com/cosmos/interchain-accounts but see notes below - app.interTxKeeper = intertxkeeper.NewKeeper(appCodec, keys[intertxtypes.StoreKey], app.icaControllerKeeper, scopedInterTxKeeper) + app.InterTxKeeper = intertxkeeper.NewKeeper(appCodec, keys[intertxtypes.StoreKey], app.ICAControllerKeeper, scopedInterTxKeeper) // Note: please do your research before using this in production app, this is a demo and not an officially // supported IBC team implementation. Do your own research before using it. - interTxModule := intertx.NewAppModule(appCodec, app.interTxKeeper) - interTxIBCModule := intertx.NewIBCModule(app.interTxKeeper) + interTxModule := intertx.NewAppModule(appCodec, app.InterTxKeeper) + interTxIBCModule := intertx.NewIBCModule(app.InterTxKeeper) // You will likely want to swap out the second argument with your own reviewed and maintained ica auth module - icaControllerIBCModule := icacontroller.NewIBCModule(app.icaControllerKeeper, interTxIBCModule) + icaControllerIBCModule := icacontroller.NewIBCModule(app.ICAControllerKeeper, interTxIBCModule) // create evidence keeper with router evidenceKeeper := evidencekeeper.NewKeeper( appCodec, keys[evidencetypes.StoreKey], - &app.stakingKeeper, - app.slashingKeeper, + &app.StakingKeeper, + app.SlashingKeeper, ) - app.evidenceKeeper = *evidenceKeeper + app.EvidenceKeeper = *evidenceKeeper wasmDir := filepath.Join(homePath, "wasm") wasmConfig, err := wasm.ReadWasmConfig(appOpts) @@ -508,18 +508,18 @@ func NewWasmApp( // The last arguments can contain custom message handlers, and custom query handlers, // if we want to allow any custom callbacks supportedFeatures := "iterator,staking,stargate" - app.wasmKeeper = wasm.NewKeeper( + app.WasmKeeper = wasm.NewKeeper( appCodec, keys[wasm.StoreKey], app.getSubspace(wasm.ModuleName), - app.accountKeeper, - app.bankKeeper, - app.stakingKeeper, - app.distrKeeper, - app.ibcKeeper.ChannelKeeper, - &app.ibcKeeper.PortKeeper, + app.AccountKeeper, + app.BankKeeper, + app.StakingKeeper, + app.DistrKeeper, + app.IBCKeeper.ChannelKeeper, + &app.IBCKeeper.PortKeeper, scopedWasmKeeper, - app.transferKeeper, + app.TransferKeeper, app.MsgServiceRouter(), app.GRPCQueryRouter(), wasmDir, @@ -533,22 +533,22 @@ func NewWasmApp( // The gov proposal types can be individually enabled if len(enabledProposals) != 0 { - govRouter.AddRoute(wasm.RouterKey, wasm.NewWasmProposalHandler(app.wasmKeeper, enabledProposals)) + govRouter.AddRoute(wasm.RouterKey, wasm.NewWasmProposalHandler(app.WasmKeeper, enabledProposals)) } ibcRouter. - AddRoute(wasm.ModuleName, wasm.NewIBCHandler(app.wasmKeeper, app.ibcKeeper.ChannelKeeper)). + AddRoute(wasm.ModuleName, wasm.NewIBCHandler(app.WasmKeeper, app.IBCKeeper.ChannelKeeper)). AddRoute(ibctransfertypes.ModuleName, transferIBCModule). AddRoute(icacontrollertypes.SubModuleName, icaControllerIBCModule). AddRoute(icahosttypes.SubModuleName, icaHostIBCModule). AddRoute(intertxtypes.ModuleName, icaControllerIBCModule) - app.ibcKeeper.SetRouter(ibcRouter) + app.IBCKeeper.SetRouter(ibcRouter) - app.govKeeper = govkeeper.NewKeeper( + app.GovKeeper = govkeeper.NewKeeper( appCodec, keys[govtypes.StoreKey], app.getSubspace(govtypes.ModuleName), - app.accountKeeper, - app.bankKeeper, + app.AccountKeeper, + app.BankKeeper, &stakingKeeper, govRouter, ) @@ -562,31 +562,31 @@ func NewWasmApp( // must be passed by reference here. app.mm = module.NewManager( genutil.NewAppModule( - app.accountKeeper, - app.stakingKeeper, + app.AccountKeeper, + app.StakingKeeper, app.BaseApp.DeliverTx, encodingConfig.TxConfig, ), - auth.NewAppModule(appCodec, app.accountKeeper, nil), - vesting.NewAppModule(app.accountKeeper, app.bankKeeper), - bank.NewAppModule(appCodec, app.bankKeeper, app.accountKeeper), - capability.NewAppModule(appCodec, *app.capabilityKeeper), - gov.NewAppModule(appCodec, app.govKeeper, app.accountKeeper, app.bankKeeper), - mint.NewAppModule(appCodec, app.mintKeeper, app.accountKeeper), - slashing.NewAppModule(appCodec, app.slashingKeeper, app.accountKeeper, app.bankKeeper, app.stakingKeeper), - distr.NewAppModule(appCodec, app.distrKeeper, app.accountKeeper, app.bankKeeper, app.stakingKeeper), - staking.NewAppModule(appCodec, app.stakingKeeper, app.accountKeeper, app.bankKeeper), - upgrade.NewAppModule(app.upgradeKeeper), - wasm.NewAppModule(appCodec, &app.wasmKeeper, app.stakingKeeper, app.accountKeeper, app.bankKeeper), - evidence.NewAppModule(app.evidenceKeeper), - feegrantmodule.NewAppModule(appCodec, app.accountKeeper, app.bankKeeper, app.feeGrantKeeper, app.interfaceRegistry), - authzmodule.NewAppModule(appCodec, app.authzKeeper, app.accountKeeper, app.bankKeeper, app.interfaceRegistry), - ibc.NewAppModule(app.ibcKeeper), - params.NewAppModule(app.paramsKeeper), + auth.NewAppModule(appCodec, app.AccountKeeper, nil), + vesting.NewAppModule(app.AccountKeeper, app.BankKeeper), + bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper), + capability.NewAppModule(appCodec, *app.CapabilityKeeper), + gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper), + mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper), + slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), + distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), + staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), + upgrade.NewAppModule(app.UpgradeKeeper), + wasm.NewAppModule(appCodec, &app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), + evidence.NewAppModule(app.EvidenceKeeper), + feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry), + authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), + ibc.NewAppModule(app.IBCKeeper), + params.NewAppModule(app.ParamsKeeper), transferModule, icaModule, interTxModule, - crisis.NewAppModule(&app.crisisKeeper, skipGenesisInvariants), // always be last to make sure that it checks for all invariants and not only part of them + crisis.NewAppModule(&app.CrisisKeeper, skipGenesisInvariants), // always be last to make sure that it checks for all invariants and not only part of them ) // During begin block slashing happens after distr.BeginBlocker so that @@ -679,7 +679,7 @@ func NewWasmApp( // Uncomment if you want to set a custom migration order here. // app.mm.SetOrderMigrations(custom order) - app.mm.RegisterInvariants(&app.crisisKeeper) + app.mm.RegisterInvariants(&app.CrisisKeeper) app.mm.RegisterRoutes(app.Router(), app.QueryRouter(), encodingConfig.Amino) app.configurator = module.NewConfigurator(app.appCodec, app.MsgServiceRouter(), app.GRPCQueryRouter()) @@ -690,20 +690,20 @@ func NewWasmApp( // NOTE: this is not required apps that don't use the simulator for fuzz testing // transactions app.sm = module.NewSimulationManager( - auth.NewAppModule(appCodec, app.accountKeeper, authsims.RandomGenesisAccounts), - bank.NewAppModule(appCodec, app.bankKeeper, app.accountKeeper), - capability.NewAppModule(appCodec, *app.capabilityKeeper), - feegrantmodule.NewAppModule(appCodec, app.accountKeeper, app.bankKeeper, app.feeGrantKeeper, app.interfaceRegistry), - authzmodule.NewAppModule(appCodec, app.authzKeeper, app.accountKeeper, app.bankKeeper, app.interfaceRegistry), - gov.NewAppModule(appCodec, app.govKeeper, app.accountKeeper, app.bankKeeper), - mint.NewAppModule(appCodec, app.mintKeeper, app.accountKeeper), - staking.NewAppModule(appCodec, app.stakingKeeper, app.accountKeeper, app.bankKeeper), - distr.NewAppModule(appCodec, app.distrKeeper, app.accountKeeper, app.bankKeeper, app.stakingKeeper), - slashing.NewAppModule(appCodec, app.slashingKeeper, app.accountKeeper, app.bankKeeper, app.stakingKeeper), - params.NewAppModule(app.paramsKeeper), - evidence.NewAppModule(app.evidenceKeeper), - wasm.NewAppModule(appCodec, &app.wasmKeeper, app.stakingKeeper, app.accountKeeper, app.bankKeeper), - ibc.NewAppModule(app.ibcKeeper), + auth.NewAppModule(appCodec, app.AccountKeeper, authsims.RandomGenesisAccounts), + bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper), + capability.NewAppModule(appCodec, *app.CapabilityKeeper), + feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry), + authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), + gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper), + mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper), + staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), + distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), + slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), + params.NewAppModule(app.ParamsKeeper), + evidence.NewAppModule(app.EvidenceKeeper), + wasm.NewAppModule(appCodec, &app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), + ibc.NewAppModule(app.IBCKeeper), transferModule, ) @@ -716,13 +716,13 @@ func NewWasmApp( anteHandler, err := NewAnteHandler( HandlerOptions{ HandlerOptions: ante.HandlerOptions{ - AccountKeeper: app.accountKeeper, - BankKeeper: app.bankKeeper, - FeegrantKeeper: app.feeGrantKeeper, + AccountKeeper: app.AccountKeeper, + BankKeeper: app.BankKeeper, + FeegrantKeeper: app.FeeGrantKeeper, SignModeHandler: encodingConfig.TxConfig.SignModeHandler(), SigGasConsumer: ante.DefaultSigVerificationGasConsumer, }, - IBCKeeper: app.ibcKeeper, + IBCKeeper: app.IBCKeeper, WasmConfig: &wasmConfig, TXCounterStoreKey: keys[wasm.StoreKey], }, @@ -741,19 +741,19 @@ func NewWasmApp( // see cmd/wasmd/root.go: 206 - 214 approx if manager := app.SnapshotManager(); manager != nil { err := manager.RegisterExtensions( - wasmkeeper.NewWasmSnapshotter(app.CommitMultiStore(), &app.wasmKeeper), + wasmkeeper.NewWasmSnapshotter(app.CommitMultiStore(), &app.WasmKeeper), ) if err != nil { panic(fmt.Errorf("failed to register snapshot extension: %s", err)) } } - app.scopedIBCKeeper = scopedIBCKeeper - app.scopedTransferKeeper = scopedTransferKeeper - app.scopedWasmKeeper = scopedWasmKeeper - app.scopedICAHostKeeper = scopedICAHostKeeper - app.scopedICAControllerKeeper = scopedICAControllerKeeper - app.scopedInterTxKeeper = scopedInterTxKeeper + app.ScopedIBCKeeper = scopedIBCKeeper + app.ScopedTransferKeeper = scopedTransferKeeper + app.ScopedWasmKeeper = scopedWasmKeeper + app.ScopedICAHostKeeper = scopedICAHostKeeper + app.ScopedICAControllerKeeper = scopedICAControllerKeeper + app.ScopedInterTxKeeper = scopedInterTxKeeper if loadLatest { if err := app.LoadLatestVersion(); err != nil { @@ -762,7 +762,7 @@ func NewWasmApp( ctx := app.BaseApp.NewUncachedContext(true, tmproto.Header{}) // Initialize pinned codes in wasmvm as they are not persisted there - if err := app.wasmKeeper.InitializePinnedCodes(ctx); err != nil { + if err := app.WasmKeeper.InitializePinnedCodes(ctx); err != nil { tmos.Exit(fmt.Sprintf("failed initialize pinned codes %s", err)) } } @@ -790,7 +790,7 @@ func (app *WasmApp) InitChainer(ctx sdk.Context, req abci.RequestInitChain) abci panic(err) } - app.upgradeKeeper.SetModuleVersionMap(ctx, app.mm.GetVersionMap()) + app.UpgradeKeeper.SetModuleVersionMap(ctx, app.mm.GetVersionMap()) return app.mm.InitGenesis(ctx, app.appCodec, genesisState) } @@ -822,7 +822,7 @@ func (app *WasmApp) LegacyAmino() *codec.LegacyAmino { //nolint:staticcheck // // NOTE: This is solely to be used for testing purposes. func (app *WasmApp) getSubspace(moduleName string) paramstypes.Subspace { - subspace, _ := app.paramsKeeper.GetSubspace(moduleName) + subspace, _ := app.ParamsKeeper.GetSubspace(moduleName) return subspace } diff --git a/app/app_test.go b/app/app_test.go index a3bd66ab6f..9a5ec80f88 100644 --- a/app/app_test.go +++ b/app/app_test.go @@ -47,7 +47,7 @@ func TestBlockedAddrs(t *testing.T) { for acc := range maccPerms { t.Run(acc, func(t *testing.T) { - require.True(t, gapp.bankKeeper.BlockedAddr(gapp.accountKeeper.GetModuleAddress(acc)), + require.True(t, gapp.BankKeeper.BlockedAddr(gapp.AccountKeeper.GetModuleAddress(acc)), "ensure that blocked addresses are properly set in bank keeper", ) }) diff --git a/app/export.go b/app/export.go index 4740592806..c494a9b6da 100644 --- a/app/export.go +++ b/app/export.go @@ -35,7 +35,7 @@ func (app *WasmApp) ExportAppStateAndValidators( return servertypes.ExportedApp{}, err } - validators, err := staking.WriteValidators(ctx, app.stakingKeeper) + validators, err := staking.WriteValidators(ctx, app.StakingKeeper) return servertypes.ExportedApp{ AppState: appState, Validators: validators, @@ -46,7 +46,8 @@ func (app *WasmApp) ExportAppStateAndValidators( // prepare for fresh start at zero height // NOTE zero height genesis is a temporary feature which will be deprecated -// in favour of export at a block height +// +// in favour of export at a block height func (app *WasmApp) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []string) { applyAllowedAddrs := false @@ -66,18 +67,18 @@ func (app *WasmApp) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs [ } /* Just to be safe, assert the invariants on current state. */ - app.crisisKeeper.AssertInvariants(ctx) + app.CrisisKeeper.AssertInvariants(ctx) /* Handle fee distribution state. */ // withdraw all validator commission - app.stakingKeeper.IterateValidators(ctx, func(_ int64, val stakingtypes.ValidatorI) (stop bool) { - _, _ = app.distrKeeper.WithdrawValidatorCommission(ctx, val.GetOperator()) //nolint:errcheck + app.StakingKeeper.IterateValidators(ctx, func(_ int64, val stakingtypes.ValidatorI) (stop bool) { + _, _ = app.DistrKeeper.WithdrawValidatorCommission(ctx, val.GetOperator()) //nolint:errcheck return false }) // withdraw all delegator rewards - dels := app.stakingKeeper.GetAllDelegations(ctx) + dels := app.StakingKeeper.GetAllDelegations(ctx) for _, delegation := range dels { valAddr, err := sdk.ValAddressFromBech32(delegation.ValidatorAddress) if err != nil { @@ -88,28 +89,28 @@ func (app *WasmApp) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs [ if err != nil { panic(err) } - _, _ = app.distrKeeper.WithdrawDelegationRewards(ctx, delAddr, valAddr) //nolint:errcheck + _, _ = app.DistrKeeper.WithdrawDelegationRewards(ctx, delAddr, valAddr) //nolint:errcheck } // clear validator slash events - app.distrKeeper.DeleteAllValidatorSlashEvents(ctx) + app.DistrKeeper.DeleteAllValidatorSlashEvents(ctx) // clear validator historical rewards - app.distrKeeper.DeleteAllValidatorHistoricalRewards(ctx) + app.DistrKeeper.DeleteAllValidatorHistoricalRewards(ctx) // set context height to zero height := ctx.BlockHeight() ctx = ctx.WithBlockHeight(0) // reinitialize all validators - app.stakingKeeper.IterateValidators(ctx, func(_ int64, val stakingtypes.ValidatorI) (stop bool) { + app.StakingKeeper.IterateValidators(ctx, func(_ int64, val stakingtypes.ValidatorI) (stop bool) { // donate any unwithdrawn outstanding reward fraction tokens to the community pool - scraps := app.distrKeeper.GetValidatorOutstandingRewardsCoins(ctx, val.GetOperator()) - feePool := app.distrKeeper.GetFeePool(ctx) + scraps := app.DistrKeeper.GetValidatorOutstandingRewardsCoins(ctx, val.GetOperator()) + feePool := app.DistrKeeper.GetFeePool(ctx) feePool.CommunityPool = feePool.CommunityPool.Add(scraps...) - app.distrKeeper.SetFeePool(ctx, feePool) + app.DistrKeeper.SetFeePool(ctx, feePool) - app.distrKeeper.Hooks().AfterValidatorCreated(ctx, val.GetOperator()) + app.DistrKeeper.Hooks().AfterValidatorCreated(ctx, val.GetOperator()) return false }) @@ -123,8 +124,8 @@ func (app *WasmApp) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs [ if err != nil { panic(err) } - app.distrKeeper.Hooks().BeforeDelegationCreated(ctx, delAddr, valAddr) - app.distrKeeper.Hooks().AfterDelegationModified(ctx, delAddr, valAddr) + app.DistrKeeper.Hooks().BeforeDelegationCreated(ctx, delAddr, valAddr) + app.DistrKeeper.Hooks().AfterDelegationModified(ctx, delAddr, valAddr) } // reset context height @@ -133,20 +134,20 @@ func (app *WasmApp) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs [ /* Handle staking state. */ // iterate through redelegations, reset creation height - app.stakingKeeper.IterateRedelegations(ctx, func(_ int64, red stakingtypes.Redelegation) (stop bool) { + app.StakingKeeper.IterateRedelegations(ctx, func(_ int64, red stakingtypes.Redelegation) (stop bool) { for i := range red.Entries { red.Entries[i].CreationHeight = 0 } - app.stakingKeeper.SetRedelegation(ctx, red) + app.StakingKeeper.SetRedelegation(ctx, red) return false }) // iterate through unbonding delegations, reset creation height - app.stakingKeeper.IterateUnbondingDelegations(ctx, func(_ int64, ubd stakingtypes.UnbondingDelegation) (stop bool) { + app.StakingKeeper.IterateUnbondingDelegations(ctx, func(_ int64, ubd stakingtypes.UnbondingDelegation) (stop bool) { for i := range ubd.Entries { ubd.Entries[i].CreationHeight = 0 } - app.stakingKeeper.SetUnbondingDelegation(ctx, ubd) + app.StakingKeeper.SetUnbondingDelegation(ctx, ubd) return false }) @@ -158,7 +159,7 @@ func (app *WasmApp) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs [ for ; iter.Valid(); iter.Next() { addr := sdk.ValAddress(iter.Key()[1:]) - validator, found := app.stakingKeeper.GetValidator(ctx, addr) + validator, found := app.StakingKeeper.GetValidator(ctx, addr) if !found { panic("expected validator, not found") } @@ -168,13 +169,13 @@ func (app *WasmApp) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs [ validator.Jailed = true } - app.stakingKeeper.SetValidator(ctx, validator) + app.StakingKeeper.SetValidator(ctx, validator) counter++ } iter.Close() - _, err := app.stakingKeeper.ApplyAndReturnValidatorSetUpdates(ctx) + _, err := app.StakingKeeper.ApplyAndReturnValidatorSetUpdates(ctx) if err != nil { log.Fatal(err) } @@ -182,11 +183,11 @@ func (app *WasmApp) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs [ /* Handle slashing state. */ // reset start height on signing infos - app.slashingKeeper.IterateValidatorSigningInfos( + app.SlashingKeeper.IterateValidatorSigningInfos( ctx, func(addr sdk.ConsAddress, info slashingtypes.ValidatorSigningInfo) (stop bool) { info.StartHeight = 0 - app.slashingKeeper.SetValidatorSigningInfo(ctx, addr, info) + app.SlashingKeeper.SetValidatorSigningInfo(ctx, addr, info) return false }, ) diff --git a/app/sim_test.go b/app/sim_test.go index d64488de40..41f729099e 100644 --- a/app/sim_test.go +++ b/app/sim_test.go @@ -213,7 +213,7 @@ func TestAppImportExport(t *testing.T) { normalizeContractInfo := func(ctx sdk.Context, app *WasmApp) { var index uint64 - app.wasmKeeper.IterateContractInfo(ctx, func(address sdk.AccAddress, info wasmtypes.ContractInfo) bool { + app.WasmKeeper.IterateContractInfo(ctx, func(address sdk.AccAddress, info wasmtypes.ContractInfo) bool { created := &wasmtypes.AbsoluteTxPosition{ BlockHeight: uint64(0), TxIndex: index, diff --git a/app/test_access.go b/app/test_access.go index 6dadec1e0c..d992a89602 100644 --- a/app/test_access.go +++ b/app/test_access.go @@ -18,6 +18,7 @@ import ( "github.com/CosmWasm/wasmd/x/wasm" ) +// Deprecated: use public app attributes directly type TestSupport struct { t testing.TB app *WasmApp @@ -28,11 +29,11 @@ func NewTestSupport(t testing.TB, app *WasmApp) *TestSupport { } func (s TestSupport) IBCKeeper() *ibckeeper.Keeper { - return s.app.ibcKeeper + return s.app.IBCKeeper } func (s TestSupport) WasmKeeper() wasm.Keeper { - return s.app.wasmKeeper + return s.app.WasmKeeper } func (s TestSupport) AppCodec() codec.Codec { @@ -40,27 +41,27 @@ func (s TestSupport) AppCodec() codec.Codec { } func (s TestSupport) ScopedWasmIBCKeeper() capabilitykeeper.ScopedKeeper { - return s.app.scopedWasmKeeper + return s.app.ScopedWasmKeeper } func (s TestSupport) ScopeIBCKeeper() capabilitykeeper.ScopedKeeper { - return s.app.scopedIBCKeeper + return s.app.ScopedIBCKeeper } func (s TestSupport) ScopedTransferKeeper() capabilitykeeper.ScopedKeeper { - return s.app.scopedTransferKeeper + return s.app.ScopedTransferKeeper } func (s TestSupport) StakingKeeper() stakingkeeper.Keeper { - return s.app.stakingKeeper + return s.app.StakingKeeper } func (s TestSupport) BankKeeper() bankkeeper.Keeper { - return s.app.bankKeeper + return s.app.BankKeeper } func (s TestSupport) TransferKeeper() ibctransferkeeper.Keeper { - return s.app.transferKeeper + return s.app.TransferKeeper } func (s TestSupport) GetBaseApp() *baseapp.BaseApp { diff --git a/app/test_helpers.go b/app/test_helpers.go index 11e72135b3..cf3de89a82 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -201,7 +201,7 @@ func createIncrementalAccounts(accNum int) []sdk.AccAddress { // AddTestAddrsFromPubKeys adds the addresses into the WasmApp providing only the public keys. func AddTestAddrsFromPubKeys(app *WasmApp, ctx sdk.Context, pubKeys []cryptotypes.PubKey, accAmt sdk.Int) { - initCoins := sdk.NewCoins(sdk.NewCoin(app.stakingKeeper.BondDenom(ctx), accAmt)) + initCoins := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), accAmt)) for _, pk := range pubKeys { initAccountWithCoins(app, ctx, sdk.AccAddress(pk.Address()), initCoins) @@ -223,7 +223,7 @@ func AddTestAddrsIncremental(app *WasmApp, ctx sdk.Context, accNum int, accAmt s func addTestAddrs(app *WasmApp, ctx sdk.Context, accNum int, accAmt sdk.Int, strategy GenerateAccountStrategy) []sdk.AccAddress { testAddrs := strategy(accNum) - initCoins := sdk.NewCoins(sdk.NewCoin(app.stakingKeeper.BondDenom(ctx), accAmt)) + initCoins := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), accAmt)) // fill all the addresses with some coins, set the loose pool tokens simultaneously for _, addr := range testAddrs { @@ -234,12 +234,12 @@ func addTestAddrs(app *WasmApp, ctx sdk.Context, accNum int, accAmt sdk.Int, str } func initAccountWithCoins(app *WasmApp, ctx sdk.Context, addr sdk.AccAddress, coins sdk.Coins) { - err := app.bankKeeper.MintCoins(ctx, minttypes.ModuleName, coins) + err := app.BankKeeper.MintCoins(ctx, minttypes.ModuleName, coins) if err != nil { panic(err) } - err = app.bankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, addr, coins) + err = app.BankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, addr, coins) if err != nil { panic(err) } @@ -280,7 +280,7 @@ func TestAddr(addr string, bech string) (sdk.AccAddress, error) { // CheckBalance checks the balance of an account. func CheckBalance(t *testing.T, app *WasmApp, addr sdk.AccAddress, balances sdk.Coins) { ctxCheck := app.BaseApp.NewContext(true, tmproto.Header{}) - require.True(t, balances.IsEqual(app.bankKeeper.GetAllBalances(ctxCheck, addr))) + require.True(t, balances.IsEqual(app.BankKeeper.GetAllBalances(ctxCheck, addr))) } const DefaultGas = 1200000 diff --git a/x/wasm/client/cli/query.go b/x/wasm/client/cli/query.go index 49cea64ea4..e7a21167af 100644 --- a/x/wasm/client/cli/query.go +++ b/x/wasm/client/cli/query.go @@ -7,7 +7,7 @@ import ( "encoding/json" "errors" "fmt" - "io/ioutil" + "os" "strconv" wasmvm "github.com/CosmWasm/wasmvm" @@ -174,7 +174,7 @@ func GetCmdQueryCode() *cobra.Command { } fmt.Printf("Downloading wasm code to %s\n", args[1]) - return ioutil.WriteFile(args[1], res.Data, 0o600) + return os.WriteFile(args[1], res.Data, 0o600) }, } flags.AddQueryFlagsToCmd(cmd) diff --git a/x/wasm/client/cli/tx.go b/x/wasm/client/cli/tx.go index 8f3203ea68..662758abcc 100644 --- a/x/wasm/client/cli/tx.go +++ b/x/wasm/client/cli/tx.go @@ -3,7 +3,7 @@ package cli import ( "errors" "fmt" - "io/ioutil" + "os" "strconv" "github.com/cosmos/cosmos-sdk/client" @@ -81,7 +81,7 @@ func StoreCodeCmd() *cobra.Command { } func parseStoreCodeArgs(file string, sender sdk.AccAddress, flags *flag.FlagSet) (types.MsgStoreCode, error) { - wasm, err := ioutil.ReadFile(file) + wasm, err := os.ReadFile(file) if err != nil { return types.MsgStoreCode{}, err } diff --git a/x/wasm/ibctesting/chain.go b/x/wasm/ibctesting/chain.go index 16f46b7b32..b5e99f962a 100644 --- a/x/wasm/ibctesting/chain.go +++ b/x/wasm/ibctesting/chain.go @@ -6,7 +6,6 @@ import ( "testing" "time" - "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" @@ -17,7 +16,6 @@ import ( banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" "github.com/cosmos/cosmos-sdk/x/staking/teststaking" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" clienttypes "github.com/cosmos/ibc-go/v3/modules/core/02-client/types" @@ -25,10 +23,8 @@ import ( commitmenttypes "github.com/cosmos/ibc-go/v3/modules/core/23-commitment/types" host "github.com/cosmos/ibc-go/v3/modules/core/24-host" "github.com/cosmos/ibc-go/v3/modules/core/exported" - ibckeeper "github.com/cosmos/ibc-go/v3/modules/core/keeper" "github.com/cosmos/ibc-go/v3/modules/core/types" ibctmtypes "github.com/cosmos/ibc-go/v3/modules/light-clients/07-tendermint/types" - ibctesting "github.com/cosmos/ibc-go/v3/testing" "github.com/cosmos/ibc-go/v3/testing/mock" "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" @@ -38,7 +34,9 @@ import ( tmtypes "github.com/tendermint/tendermint/types" tmversion "github.com/tendermint/tendermint/version" - wasmd "github.com/CosmWasm/wasmd/app" + "github.com/CosmWasm/wasmd/app" + "github.com/CosmWasm/wasmd/app/params" + "github.com/CosmWasm/wasmd/x/wasm" ) @@ -51,7 +49,7 @@ type TestChain struct { t *testing.T Coordinator *Coordinator - App ibctesting.TestingApp + App *app.WasmApp ChainID string LastHeader *ibctmtypes.Header // header for last block height committed CurrentHeader tmproto.Header // header for current block height @@ -104,7 +102,7 @@ func NewTestChain(t *testing.T, coord *Coordinator, chainID string, opts ...wasm Coins: sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, amount)), } - app := NewTestingAppDecorator(t, wasmd.SetupWithGenesisValSet(t, valSet, []authtypes.GenesisAccount{acc}, opts, balance)) + wasmApp := app.SetupWithGenesisValSet(t, valSet, []authtypes.GenesisAccount{acc}, opts, balance) // create current header and call begin block header := tmproto.Header{ @@ -113,18 +111,18 @@ func NewTestChain(t *testing.T, coord *Coordinator, chainID string, opts ...wasm Time: coord.CurrentTime.UTC(), } - txConfig := app.GetTxConfig() + txConfig := params.MakeEncodingConfig().TxConfig // create an account to send transactions from chain := &TestChain{ t: t, Coordinator: coord, ChainID: chainID, - App: app, + App: wasmApp, CurrentHeader: header, - QueryServer: app.GetIBCKeeper(), + QueryServer: wasmApp.IBCKeeper, TxConfig: txConfig, - Codec: app.AppCodec(), + Codec: wasmApp.AppCodec(), Vals: valSet, Signers: signers, senderPrivKey: senderPrivKey, @@ -138,7 +136,7 @@ func NewTestChain(t *testing.T, coord *Coordinator, chainID string, opts ...wasm // GetContext returns the current context for the application. func (chain *TestChain) GetContext() sdk.Context { - return chain.App.GetBaseApp().NewContext(false, chain.CurrentHeader) + return chain.App.BaseApp.NewContext(false, chain.CurrentHeader) } // QueryProof performs an abci query with the given key and returns the proto encoded merkle proof @@ -244,10 +242,10 @@ func (chain *TestChain) SendMsgs(msgs ...sdk.Msg) (*sdk.Result, error) { // ensure the chain has the latest time chain.Coordinator.UpdateTimeForChain(chain) - _, r, err := wasmd.SignAndDeliver( + _, r, err := app.SignAndDeliver( chain.t, chain.TxConfig, - chain.App.GetBaseApp(), + chain.App.BaseApp, chain.GetContext().BlockHeader(), msgs, chain.ChainID, @@ -291,7 +289,7 @@ func (chain *TestChain) captureIBCEvents(r *sdk.Result) { // GetClientState retrieves the client state for the provided clientID. The client is // expected to exist otherwise testing will fail. func (chain *TestChain) GetClientState(clientID string) exported.ClientState { - clientState, found := chain.App.GetIBCKeeper().ClientKeeper.GetClientState(chain.GetContext(), clientID) + clientState, found := chain.App.IBCKeeper.ClientKeeper.GetClientState(chain.GetContext(), clientID) require.True(chain.t, found) return clientState @@ -300,13 +298,13 @@ func (chain *TestChain) GetClientState(clientID string) exported.ClientState { // GetConsensusState retrieves the consensus state for the provided clientID and height. // It will return a success boolean depending on if consensus state exists or not. func (chain *TestChain) GetConsensusState(clientID string, height exported.Height) (exported.ConsensusState, bool) { - return chain.App.GetIBCKeeper().ClientKeeper.GetClientConsensusState(chain.GetContext(), clientID, height) + return chain.App.IBCKeeper.ClientKeeper.GetClientConsensusState(chain.GetContext(), clientID, height) } // GetValsAtHeight will return the validator set of the chain at a given height. It will return // a success boolean depending on if the validator set exists or not at that height. func (chain *TestChain) GetValsAtHeight(height int64) (*tmtypes.ValidatorSet, bool) { - histInfo, ok := chain.App.GetStakingKeeper().GetHistoricalInfo(chain.GetContext(), height) + histInfo, ok := chain.App.StakingKeeper.GetHistoricalInfo(chain.GetContext(), height) if !ok { return nil, false } @@ -323,7 +321,7 @@ func (chain *TestChain) GetValsAtHeight(height int64) (*tmtypes.ValidatorSet, bo // GetAcknowledgement retrieves an acknowledgement for the provided packet. If the // acknowledgement does not exist then testing will fail. func (chain *TestChain) GetAcknowledgement(packet exported.PacketI) []byte { - ack, found := chain.App.GetIBCKeeper().ChannelKeeper.GetPacketAcknowledgement(chain.GetContext(), packet.GetDestPort(), packet.GetDestChannel(), packet.GetSequence()) + ack, found := chain.App.IBCKeeper.ChannelKeeper.GetPacketAcknowledgement(chain.GetContext(), packet.GetDestPort(), packet.GetDestChannel(), packet.GetSequence()) require.True(chain.t, found) return ack @@ -331,7 +329,7 @@ func (chain *TestChain) GetAcknowledgement(packet exported.PacketI) []byte { // GetPrefix returns the prefix for used by a chain in connection creation func (chain *TestChain) GetPrefix() commitmenttypes.MerklePrefix { - return commitmenttypes.NewMerklePrefix(chain.App.GetIBCKeeper().ConnectionKeeper.GetCommitmentPrefix().Bytes()) + return commitmenttypes.NewMerklePrefix(chain.App.IBCKeeper.ConnectionKeeper.GetCommitmentPrefix().Bytes()) } // ConstructUpdateTMClientHeader will construct a valid 07-tendermint Header to update the @@ -490,10 +488,10 @@ func CreateSortedSignerArray(altPrivVal, suitePrivVal tmtypes.PrivValidator, // Other applications must bind to the port in InitGenesis or modify this code. func (chain *TestChain) CreatePortCapability(scopedKeeper capabilitykeeper.ScopedKeeper, portID string) { // check if the portId is already binded, if not bind it - _, ok := chain.App.GetScopedIBCKeeper().GetCapability(chain.GetContext(), host.PortPath(portID)) + _, ok := chain.App.ScopedIBCKeeper.GetCapability(chain.GetContext(), host.PortPath(portID)) if !ok { // create capability using the IBC capability keeper - cap, err := chain.App.GetScopedIBCKeeper().NewCapability(chain.GetContext(), host.PortPath(portID)) + cap, err := chain.App.ScopedIBCKeeper.NewCapability(chain.GetContext(), host.PortPath(portID)) require.NoError(chain.t, err) // claim capability using the scopedKeeper @@ -509,7 +507,7 @@ func (chain *TestChain) CreatePortCapability(scopedKeeper capabilitykeeper.Scope // GetPortCapability returns the port capability for the given portID. The capability must // exist, otherwise testing will fail. func (chain *TestChain) GetPortCapability(portID string) *capabilitytypes.Capability { - cap, ok := chain.App.GetScopedIBCKeeper().GetCapability(chain.GetContext(), host.PortPath(portID)) + cap, ok := chain.App.ScopedIBCKeeper.GetCapability(chain.GetContext(), host.PortPath(portID)) require.True(chain.t, ok) return cap @@ -521,9 +519,9 @@ func (chain *TestChain) GetPortCapability(portID string) *capabilitytypes.Capabi func (chain *TestChain) CreateChannelCapability(scopedKeeper capabilitykeeper.ScopedKeeper, portID, channelID string) { capName := host.ChannelCapabilityPath(portID, channelID) // check if the portId is already binded, if not bind it - _, ok := chain.App.GetScopedIBCKeeper().GetCapability(chain.GetContext(), capName) + _, ok := chain.App.ScopedIBCKeeper.GetCapability(chain.GetContext(), capName) if !ok { - cap, err := chain.App.GetScopedIBCKeeper().NewCapability(chain.GetContext(), capName) + cap, err := chain.App.ScopedIBCKeeper.NewCapability(chain.GetContext(), capName) require.NoError(chain.t, err) err = scopedKeeper.ClaimCapability(chain.GetContext(), cap, capName) require.NoError(chain.t, err) @@ -537,55 +535,16 @@ func (chain *TestChain) CreateChannelCapability(scopedKeeper capabilitykeeper.Sc // GetChannelCapability returns the channel capability for the given portID and channelID. // The capability must exist, otherwise testing will fail. func (chain *TestChain) GetChannelCapability(portID, channelID string) *capabilitytypes.Capability { - cap, ok := chain.App.GetScopedIBCKeeper().GetCapability(chain.GetContext(), host.ChannelCapabilityPath(portID, channelID)) + cap, ok := chain.App.ScopedIBCKeeper.GetCapability(chain.GetContext(), host.ChannelCapabilityPath(portID, channelID)) require.True(chain.t, ok) return cap } func (chain *TestChain) Balance(acc sdk.AccAddress, denom string) sdk.Coin { - return chain.GetTestSupport().BankKeeper().GetBalance(chain.GetContext(), acc, denom) + return chain.App.BankKeeper.GetBalance(chain.GetContext(), acc, denom) } func (chain *TestChain) AllBalances(acc sdk.AccAddress) sdk.Coins { - return chain.GetTestSupport().BankKeeper().GetAllBalances(chain.GetContext(), acc) -} - -func (chain TestChain) GetTestSupport() *wasmd.TestSupport { - return chain.App.(*TestingAppDecorator).TestSupport() -} - -var _ ibctesting.TestingApp = TestingAppDecorator{} - -type TestingAppDecorator struct { - *wasmd.WasmApp - t *testing.T -} - -func NewTestingAppDecorator(t *testing.T, wasmApp *wasmd.WasmApp) *TestingAppDecorator { - return &TestingAppDecorator{WasmApp: wasmApp, t: t} -} - -func (a TestingAppDecorator) GetBaseApp() *baseapp.BaseApp { - return a.TestSupport().GetBaseApp() -} - -func (a TestingAppDecorator) GetStakingKeeper() stakingkeeper.Keeper { - return a.TestSupport().StakingKeeper() -} - -func (a TestingAppDecorator) GetIBCKeeper() *ibckeeper.Keeper { - return a.TestSupport().IBCKeeper() -} - -func (a TestingAppDecorator) GetScopedIBCKeeper() capabilitykeeper.ScopedKeeper { - return a.TestSupport().ScopeIBCKeeper() -} - -func (a TestingAppDecorator) GetTxConfig() client.TxConfig { - return a.TestSupport().GetTxConfig() -} - -func (a TestingAppDecorator) TestSupport() *wasmd.TestSupport { - return wasmd.NewTestSupport(a.t, a.WasmApp) + return chain.App.BankKeeper.GetAllBalances(chain.GetContext(), acc) } diff --git a/x/wasm/ibctesting/endpoint.go b/x/wasm/ibctesting/endpoint.go index 9411a79724..9d62ce7f62 100644 --- a/x/wasm/ibctesting/endpoint.go +++ b/x/wasm/ibctesting/endpoint.go @@ -381,7 +381,7 @@ func (endpoint *Endpoint) SendPacket(packet exported.PacketI) error { channelCap := endpoint.Chain.GetChannelCapability(packet.GetSourcePort(), packet.GetSourceChannel()) // no need to send message, acting as a module - err := endpoint.Chain.App.GetIBCKeeper().ChannelKeeper.SendPacket(endpoint.Chain.GetContext(), channelCap, packet) + err := endpoint.Chain.App.IBCKeeper.ChannelKeeper.SendPacket(endpoint.Chain.GetContext(), channelCap, packet) if err != nil { return err } @@ -415,7 +415,7 @@ func (endpoint *Endpoint) WriteAcknowledgement(ack exported.Acknowledgement, pac channelCap := endpoint.Chain.GetChannelCapability(packet.GetDestPort(), packet.GetDestChannel()) // no need to send message, acting as a handler - err := endpoint.Chain.App.GetIBCKeeper().ChannelKeeper.WriteAcknowledgement(endpoint.Chain.GetContext(), channelCap, packet, ack) + err := endpoint.Chain.App.IBCKeeper.ChannelKeeper.WriteAcknowledgement(endpoint.Chain.GetContext(), channelCap, packet, ack) if err != nil { return err } @@ -452,7 +452,7 @@ func (endpoint *Endpoint) TimeoutPacket(packet channeltypes.Packet) error { } proof, proofHeight := endpoint.Counterparty.QueryProof(packetKey) - nextSeqRecv, found := endpoint.Counterparty.Chain.App.GetIBCKeeper().ChannelKeeper.GetNextSequenceRecv(endpoint.Counterparty.Chain.GetContext(), endpoint.ChannelConfig.PortID, endpoint.ChannelID) + nextSeqRecv, found := endpoint.Counterparty.Chain.App.IBCKeeper.ChannelKeeper.GetNextSequenceRecv(endpoint.Counterparty.Chain.GetContext(), endpoint.ChannelConfig.PortID, endpoint.ChannelID) require.True(endpoint.Chain.t, found) timeoutMsg := channeltypes.NewMsgTimeout( @@ -468,7 +468,7 @@ func (endpoint *Endpoint) SetChannelClosed() error { channel := endpoint.GetChannel() channel.State = channeltypes.CLOSED - endpoint.Chain.App.GetIBCKeeper().ChannelKeeper.SetChannel(endpoint.Chain.GetContext(), endpoint.ChannelConfig.PortID, endpoint.ChannelID, channel) + endpoint.Chain.App.IBCKeeper.ChannelKeeper.SetChannel(endpoint.Chain.GetContext(), endpoint.ChannelConfig.PortID, endpoint.ChannelID, channel) endpoint.Chain.Coordinator.CommitBlock(endpoint.Chain) @@ -483,7 +483,7 @@ func (endpoint *Endpoint) GetClientState() exported.ClientState { // SetClientState sets the client state for this endpoint. func (endpoint *Endpoint) SetClientState(clientState exported.ClientState) { - endpoint.Chain.App.GetIBCKeeper().ClientKeeper.SetClientState(endpoint.Chain.GetContext(), endpoint.ClientID, clientState) + endpoint.Chain.App.IBCKeeper.ClientKeeper.SetClientState(endpoint.Chain.GetContext(), endpoint.ClientID, clientState) } // GetConsensusState retrieves the Consensus State for this endpoint at the provided height. @@ -497,13 +497,13 @@ func (endpoint *Endpoint) GetConsensusState(height exported.Height) exported.Con // SetConsensusState sets the consensus state for this endpoint. func (endpoint *Endpoint) SetConsensusState(consensusState exported.ConsensusState, height exported.Height) { - endpoint.Chain.App.GetIBCKeeper().ClientKeeper.SetClientConsensusState(endpoint.Chain.GetContext(), endpoint.ClientID, height, consensusState) + endpoint.Chain.App.IBCKeeper.ClientKeeper.SetClientConsensusState(endpoint.Chain.GetContext(), endpoint.ClientID, height, consensusState) } // GetConnection retrieves an IBC Connection for the endpoint. The // connection is expected to exist otherwise testing will fail. func (endpoint *Endpoint) GetConnection() connectiontypes.ConnectionEnd { - connection, found := endpoint.Chain.App.GetIBCKeeper().ConnectionKeeper.GetConnection(endpoint.Chain.GetContext(), endpoint.ConnectionID) + connection, found := endpoint.Chain.App.IBCKeeper.ConnectionKeeper.GetConnection(endpoint.Chain.GetContext(), endpoint.ConnectionID) require.True(endpoint.Chain.t, found) return connection @@ -511,13 +511,13 @@ func (endpoint *Endpoint) GetConnection() connectiontypes.ConnectionEnd { // SetConnection sets the connection for this endpoint. func (endpoint *Endpoint) SetConnection(connection connectiontypes.ConnectionEnd) { - endpoint.Chain.App.GetIBCKeeper().ConnectionKeeper.SetConnection(endpoint.Chain.GetContext(), endpoint.ConnectionID, connection) + endpoint.Chain.App.IBCKeeper.ConnectionKeeper.SetConnection(endpoint.Chain.GetContext(), endpoint.ConnectionID, connection) } // GetChannel retrieves an IBC Channel for the endpoint. The channel // is expected to exist otherwise testing will fail. func (endpoint *Endpoint) GetChannel() channeltypes.Channel { - channel, found := endpoint.Chain.App.GetIBCKeeper().ChannelKeeper.GetChannel(endpoint.Chain.GetContext(), endpoint.ChannelConfig.PortID, endpoint.ChannelID) + channel, found := endpoint.Chain.App.IBCKeeper.ChannelKeeper.GetChannel(endpoint.Chain.GetContext(), endpoint.ChannelConfig.PortID, endpoint.ChannelID) require.True(endpoint.Chain.t, found) return channel @@ -525,7 +525,7 @@ func (endpoint *Endpoint) GetChannel() channeltypes.Channel { // SetChannel sets the channel for this endpoint. func (endpoint *Endpoint) SetChannel(channel channeltypes.Channel) { - endpoint.Chain.App.GetIBCKeeper().ChannelKeeper.SetChannel(endpoint.Chain.GetContext(), endpoint.ChannelConfig.PortID, endpoint.ChannelID, channel) + endpoint.Chain.App.IBCKeeper.ChannelKeeper.SetChannel(endpoint.Chain.GetContext(), endpoint.ChannelConfig.PortID, endpoint.ChannelID, channel) } // QueryClientStateProof performs and abci query for a client stat associated diff --git a/x/wasm/ibctesting/path.go b/x/wasm/ibctesting/path.go index 2ce5e044a6..15912bd400 100644 --- a/x/wasm/ibctesting/path.go +++ b/x/wasm/ibctesting/path.go @@ -40,7 +40,7 @@ func (path *Path) SetChannelOrdered() { // if EndpointA does not contain a packet commitment for that packet. An error is returned // if a relay step fails or the packet commitment does not exist on either endpoint. func (path *Path) RelayPacket(packet channeltypes.Packet, ack []byte) error { - pc := path.EndpointA.Chain.App.GetIBCKeeper().ChannelKeeper.GetPacketCommitment(path.EndpointA.Chain.GetContext(), packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetSequence()) + pc := path.EndpointA.Chain.App.IBCKeeper.ChannelKeeper.GetPacketCommitment(path.EndpointA.Chain.GetContext(), packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetSequence()) if bytes.Equal(pc, channeltypes.CommitPacket(path.EndpointA.Chain.App.AppCodec(), packet)) { // packet found, relay from A to B @@ -59,7 +59,7 @@ func (path *Path) RelayPacket(packet channeltypes.Packet, ack []byte) error { } - pc = path.EndpointB.Chain.App.GetIBCKeeper().ChannelKeeper.GetPacketCommitment(path.EndpointB.Chain.GetContext(), packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetSequence()) + pc = path.EndpointB.Chain.App.IBCKeeper.ChannelKeeper.GetPacketCommitment(path.EndpointB.Chain.GetContext(), packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetSequence()) if bytes.Equal(pc, channeltypes.CommitPacket(path.EndpointB.Chain.App.AppCodec(), packet)) { // packet found, relay B to A diff --git a/x/wasm/ibctesting/wasm.go b/x/wasm/ibctesting/wasm.go index 6957f63404..4639688f01 100644 --- a/x/wasm/ibctesting/wasm.go +++ b/x/wasm/ibctesting/wasm.go @@ -5,11 +5,9 @@ import ( "compress/gzip" "encoding/json" "fmt" - "io/ioutil" + "os" "strings" - wasmd "github.com/CosmWasm/wasmd/app" - ibctesting "github.com/cosmos/ibc-go/v3/testing" sdk "github.com/cosmos/cosmos-sdk/types" @@ -37,7 +35,7 @@ func (chain *TestChain) SeedNewContractInstance() sdk.AccAddress { } func (chain *TestChain) StoreCodeFile(filename string) types.MsgStoreCodeResponse { - wasmCode, err := ioutil.ReadFile(filename) + wasmCode, err := os.ReadFile(filename) require.NoError(chain.t, err) if strings.HasSuffix(filename, "wasm") { // compress for gas limit var buf bytes.Buffer @@ -135,8 +133,5 @@ func (chain *TestChain) parseSDKResultData(r *sdk.Result) sdk.TxMsgData { // ContractInfo is a helper function to returns the ContractInfo for the given contract address func (chain *TestChain) ContractInfo(contractAddr sdk.AccAddress) *types.ContractInfo { - type testSupporter interface { - TestSupport() *wasmd.TestSupport - } - return chain.App.(testSupporter).TestSupport().WasmKeeper().GetContractInfo(chain.GetContext(), contractAddr) + return chain.App.WasmKeeper.GetContractInfo(chain.GetContext(), contractAddr) } diff --git a/x/wasm/ioutils/ioutil.go b/x/wasm/ioutils/ioutil.go index 9c7bd81f04..5740132342 100644 --- a/x/wasm/ioutils/ioutil.go +++ b/x/wasm/ioutils/ioutil.go @@ -4,7 +4,6 @@ import ( "bytes" "compress/gzip" "io" - "io/ioutil" "github.com/CosmWasm/wasmd/x/wasm/types" ) @@ -26,7 +25,7 @@ func Uncompress(src []byte, limit uint64) ([]byte, error) { } zr.Multistream(false) defer zr.Close() - return ioutil.ReadAll(LimitReader(zr, int64(limit))) + return io.ReadAll(LimitReader(zr, int64(limit))) } // LimitReader returns a Reader that reads from r diff --git a/x/wasm/keeper/test_common.go b/x/wasm/keeper/test_common.go index 717228962d..9fedc3e7f1 100644 --- a/x/wasm/keeper/test_common.go +++ b/x/wasm/keeper/test_common.go @@ -4,7 +4,7 @@ import ( "encoding/binary" "encoding/json" "fmt" - "io/ioutil" + "os" "testing" "time" @@ -558,7 +558,7 @@ func StoreExampleContract(t testing.TB, ctx sdk.Context, keepers TestKeepers, wa creator, _, creatorAddr := keyPubAddr() fundAccounts(t, ctx, keepers.AccountKeeper, keepers.BankKeeper, creatorAddr, anyAmount) - wasmCode, err := ioutil.ReadFile(wasmFile) + wasmCode, err := os.ReadFile(wasmFile) require.NoError(t, err) codeID, err := keepers.ContractKeeper.Create(ctx, creatorAddr, wasmCode, nil) diff --git a/x/wasm/relay_pingpong_test.go b/x/wasm/relay_pingpong_test.go index 46c32497b3..8dfa403e82 100644 --- a/x/wasm/relay_pingpong_test.go +++ b/x/wasm/relay_pingpong_test.go @@ -326,7 +326,7 @@ func (p player) incrementCounter(key []byte, store wasmvm.KVStore) uint64 { } func (p player) QueryState(key []byte) uint64 { - raw := p.chain.GetTestSupport().WasmKeeper().QueryRaw(p.chain.GetContext(), p.contractAddr, key) + raw := p.chain.App.WasmKeeper.QueryRaw(p.chain.GetContext(), p.contractAddr, key) return sdk.BigEndianToUint64(raw) } diff --git a/x/wasm/relay_test.go b/x/wasm/relay_test.go index 5edd182d59..63e4bdc467 100644 --- a/x/wasm/relay_test.go +++ b/x/wasm/relay_test.go @@ -193,7 +193,7 @@ func TestContractCanInitiateIBCTransferMsg(t *testing.T) { require.Equal(t, 0, len(chainB.PendingSendPackets)) // and dest chain balance contains voucher - bankKeeperB := chainB.GetTestSupport().BankKeeper() + bankKeeperB := chainB.App.BankKeeper expBalance := ibctransfertypes.GetTransferCoin(path.EndpointB.ChannelConfig.PortID, path.EndpointB.ChannelID, coinToSendToB.Denom, coinToSendToB.Amount) gotBalance := chainB.Balance(chainB.SenderAccount.GetAddress(), expBalance.Denom) assert.Equal(t, expBalance, gotBalance, "got total balance: %s", bankKeeperB.GetAllBalances(chainB.GetContext(), chainB.SenderAccount.GetAddress())) @@ -268,7 +268,7 @@ func TestContractCanEmulateIBCTransferMessage(t *testing.T) { require.Equal(t, 0, len(chainB.PendingSendPackets)) // and dest chain balance contains voucher - bankKeeperB := chainB.GetTestSupport().BankKeeper() + bankKeeperB := chainB.App.BankKeeper expBalance := ibctransfertypes.GetTransferCoin(path.EndpointB.ChannelConfig.PortID, path.EndpointB.ChannelID, coinToSendToB.Denom, coinToSendToB.Amount) gotBalance := chainB.Balance(chainB.SenderAccount.GetAddress(), expBalance.Denom) assert.Equal(t, expBalance, gotBalance, "got total balance: %s", bankKeeperB.GetAllBalances(chainB.GetContext(), chainB.SenderAccount.GetAddress())) @@ -535,7 +535,7 @@ func (c *ackReceiverContract) IBCPacketReceive(codeID wasmvm.Checksum, env wasmv // call original ibctransfer keeper to not copy all code into this ibcPacket := toIBCPacket(packet) ctx := c.chain.GetContext() // HACK: please note that this is not reverted after checkTX - err := c.chain.GetTestSupport().TransferKeeper().OnRecvPacket(ctx, ibcPacket, src) + err := c.chain.App.TransferKeeper.OnRecvPacket(ctx, ibcPacket, src) if err != nil { return nil, 0, sdkerrors.Wrap(err, "within our smart contract") } @@ -560,7 +560,7 @@ func (c *ackReceiverContract) IBCPacketAck(codeID wasmvm.Checksum, env wasmvmtyp // call original ibctransfer keeper to not copy all code into this ctx := c.chain.GetContext() // HACK: please note that this is not reverted after checkTX ibcPacket := toIBCPacket(msg.OriginalPacket) - err := c.chain.GetTestSupport().TransferKeeper().OnAcknowledgementPacket(ctx, ibcPacket, data, ack) + err := c.chain.App.TransferKeeper.OnAcknowledgementPacket(ctx, ibcPacket, data, ack) if err != nil { return nil, 0, sdkerrors.Wrap(err, "within our smart contract") } diff --git a/x/wasm/simulation/operations.go b/x/wasm/simulation/operations.go index 66635a2b73..41903002a1 100644 --- a/x/wasm/simulation/operations.go +++ b/x/wasm/simulation/operations.go @@ -2,8 +2,8 @@ package simulation import ( "encoding/json" - "io/ioutil" "math/rand" + "os" wasmvmtypes "github.com/CosmWasm/wasmvm/types" "github.com/cosmos/cosmos-sdk/baseapp" @@ -21,6 +21,7 @@ import ( ) // Simulation operation weights constants +// //nolint:gosec const ( OpWeightMsgStoreCode = "op_weight_msg_store_code" @@ -83,7 +84,7 @@ func WeightedOperations( wasmBz = testdata.ReflectContractWasm() } else { var err error - wasmBz, err = ioutil.ReadFile(wasmContractPath) + wasmBz, err = os.ReadFile(wasmContractPath) if err != nil { panic(err) } diff --git a/x/wasm/types/types.go b/x/wasm/types/types.go index 7c9e14e64e..887e895b29 100644 --- a/x/wasm/types/types.go +++ b/x/wasm/types/types.go @@ -128,10 +128,11 @@ func (c *ContractInfo) SetExtension(ext ContractInfoExtension) error { // ReadExtension copies the extension value to the pointer passed as argument so that there is no need to cast // For example with a custom extension of type `MyContractDetails` it will look as following: -// var d MyContractDetails -// if err := info.ReadExtension(&d); err != nil { -// return nil, sdkerrors.Wrap(err, "extension") -// } +// +// var d MyContractDetails +// if err := info.ReadExtension(&d); err != nil { +// return nil, sdkerrors.Wrap(err, "extension") +// } func (c *ContractInfo) ReadExtension(e ContractInfoExtension) error { rv := reflect.ValueOf(e) if rv.Kind() != reflect.Ptr || rv.IsNil() { From 20fb936205e3d60800b711dc538c1d0860d267d3 Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Wed, 24 Aug 2022 08:54:57 +0200 Subject: [PATCH 046/120] Fix keeper test --- x/wasm/keeper/keeper_test.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index 91ebdb4ee7..14ce0d9732 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -875,9 +875,9 @@ func TestMigrate(t *testing.T) { ibcCodeID := StoreIBCReflectContract(t, ctx, keepers).CodeID require.NotEqual(t, originalCodeID, newCodeID) - restrictedCodeID := StoreHackatomExampleContract(t, ctx, keepers).CodeID - keeper.SetAccessConfig(ctx, restrictedCodeID, types.AllowNobody) - require.NotEqual(t, originalCodeID, restrictedCodeID) + restrictedCodeExample := StoreHackatomExampleContract(t, ctx, keepers) + require.NoError(t, keeper.SetAccessConfig(ctx, restrictedCodeExample.CodeID, restrictedCodeExample.CreatorAddr, types.AllowNobody)) + require.NotEqual(t, originalCodeID, restrictedCodeExample.CodeID) anyAddr := RandomAccountAddress(t) newVerifierAddr := RandomAccountAddress(t) @@ -961,7 +961,7 @@ func TestMigrate(t *testing.T) { caller: creator, initMsg: initMsgBz, fromCodeID: originalCodeID, - toCodeID: restrictedCodeID, + toCodeID: restrictedCodeExample.CodeID, migrateMsg: migMsgBz, expErr: sdkerrors.ErrUnauthorized, }, @@ -1836,6 +1836,7 @@ func TestBuildContractAddress(t *testing.T) { }) } } + func TestSetAccessConfig(t *testing.T) { parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures) k := keepers.WasmKeeper @@ -1915,8 +1916,6 @@ func TestSetAccessConfig(t *testing.T) { return } require.NoError(t, gotErr) - }) } - } From c3b0a722ad8248aa70be12569712c779d32b2382 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 Aug 2022 08:17:33 +0000 Subject: [PATCH 047/120] Bump actions/checkout from 2.3.5 to 3.0.2 Bumps [actions/checkout](https://github.com/actions/checkout) from 2.3.5 to 3.0.2. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v2.3.5...v3.0.2) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/codeql-analizer.yml | 2 +- .github/workflows/proto-buf-publisher.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codeql-analizer.yml b/.github/workflows/codeql-analizer.yml index 0232dc356e..919e1603a7 100644 --- a/.github/workflows/codeql-analizer.yml +++ b/.github/workflows/codeql-analizer.yml @@ -19,7 +19,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2.3.5 + uses: actions/checkout@v3.0.2 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/proto-buf-publisher.yml b/.github/workflows/proto-buf-publisher.yml index 7e000bc5b2..445d44498d 100644 --- a/.github/workflows/proto-buf-publisher.yml +++ b/.github/workflows/proto-buf-publisher.yml @@ -16,7 +16,7 @@ jobs: push: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3.0.2 - uses: bufbuild/buf-setup-action@v0.7.0 # lint checks From 4875db205574786f13b9b53a4f751f9f95d79ae9 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Wed, 24 Aug 2022 15:21:16 +0700 Subject: [PATCH 048/120] depracte-ioutil (#934) --- benchmarks/app_test.go | 4 ++-- x/wasm/client/cli/genesis_msg_test.go | 7 +++---- x/wasm/ioutils/ioutil_test.go | 6 +++--- x/wasm/ioutils/utils_test.go | 4 ++-- x/wasm/keeper/bench_test.go | 4 ++-- x/wasm/keeper/genesis_test.go | 11 +++++------ x/wasm/keeper/keeper_test.go | 8 ++++---- x/wasm/keeper/legacy_querier_test.go | 8 ++++---- x/wasm/keeper/proposal_integration_test.go | 12 ++++++------ x/wasm/keeper/querier_test.go | 10 +++++----- x/wasm/keeper/reflect_test.go | 4 ++-- x/wasm/keeper/snapshotter_integration_test.go | 4 ++-- x/wasm/keeper/staking_test.go | 6 +++--- x/wasm/keeper/submsg_test.go | 4 ++-- x/wasm/module_test.go | 4 ++-- 15 files changed, 47 insertions(+), 49 deletions(-) diff --git a/benchmarks/app_test.go b/benchmarks/app_test.go index 1fbfb48663..88773e6b42 100644 --- a/benchmarks/app_test.go +++ b/benchmarks/app_test.go @@ -2,7 +2,7 @@ package benchmarks import ( "encoding/json" - "io/ioutil" + "os" "testing" "time" @@ -119,7 +119,7 @@ func InitializeWasmApp(b testing.TB, db dbm.DB, numAccounts int) AppInfo { wasmApp.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: height, Time: time.Now()}}) // upload the code - cw20Code, err := ioutil.ReadFile("./testdata/cw20_base.wasm") + cw20Code, err := os.ReadFile("./testdata/cw20_base.wasm") require.NoError(b, err) storeMsg := wasmtypes.MsgStoreCode{ Sender: addr.String(), diff --git a/x/wasm/client/cli/genesis_msg_test.go b/x/wasm/client/cli/genesis_msg_test.go index 4de9e7e3d5..78a1c53b58 100644 --- a/x/wasm/client/cli/genesis_msg_test.go +++ b/x/wasm/client/cli/genesis_msg_test.go @@ -3,7 +3,6 @@ package cli import ( "context" "encoding/json" - "io/ioutil" "os" "path" "testing" @@ -42,7 +41,7 @@ func TestGenesisStoreCodeCmd(t *testing.T) { minimalWasmGenesis := types.GenesisState{ Params: types.DefaultParams(), } - anyValidWasmFile, err := ioutil.TempFile(t.TempDir(), "wasm") + anyValidWasmFile, err := os.CreateTemp(t.TempDir(), "wasm") require.NoError(t, err) anyValidWasmFile.Write(wasmIdent) require.NoError(t, anyValidWasmFile.Close()) @@ -109,7 +108,7 @@ func TestInstantiateContractCmd(t *testing.T) { minimalWasmGenesis := types.GenesisState{ Params: types.DefaultParams(), } - anyValidWasmFile, err := ioutil.TempFile(t.TempDir(), "wasm") + anyValidWasmFile, err := os.CreateTemp(t.TempDir(), "wasm") require.NoError(t, err) anyValidWasmFile.Write(wasmIdent) require.NoError(t, anyValidWasmFile.Close()) @@ -368,7 +367,7 @@ func TestExecuteContractCmd(t *testing.T) { minimalWasmGenesis := types.GenesisState{ Params: types.DefaultParams(), } - anyValidWasmFile, err := ioutil.TempFile(t.TempDir(), "wasm") + anyValidWasmFile, err := os.CreateTemp(t.TempDir(), "wasm") require.NoError(t, err) anyValidWasmFile.Write(wasmIdent) require.NoError(t, anyValidWasmFile.Close()) diff --git a/x/wasm/ioutils/ioutil_test.go b/x/wasm/ioutils/ioutil_test.go index 13bbbb110e..93a478ae00 100644 --- a/x/wasm/ioutils/ioutil_test.go +++ b/x/wasm/ioutils/ioutil_test.go @@ -5,7 +5,7 @@ import ( "compress/gzip" "errors" "io" - "io/ioutil" + "os" "strings" "testing" @@ -16,10 +16,10 @@ import ( ) func TestUncompress(t *testing.T) { - wasmRaw, err := ioutil.ReadFile("../keeper/testdata/hackatom.wasm") + wasmRaw, err := os.ReadFile("../keeper/testdata/hackatom.wasm") require.NoError(t, err) - wasmGzipped, err := ioutil.ReadFile("../keeper/testdata/hackatom.wasm.gzip") + wasmGzipped, err := os.ReadFile("../keeper/testdata/hackatom.wasm.gzip") require.NoError(t, err) const maxSize = 400_000 diff --git a/x/wasm/ioutils/utils_test.go b/x/wasm/ioutils/utils_test.go index 0d2c0a130e..cd4846f092 100644 --- a/x/wasm/ioutils/utils_test.go +++ b/x/wasm/ioutils/utils_test.go @@ -1,14 +1,14 @@ package ioutils import ( - "io/ioutil" + "os" "testing" "github.com/stretchr/testify/require" ) func GetTestData() ([]byte, []byte, []byte, error) { - wasmCode, err := ioutil.ReadFile("../keeper/testdata/hackatom.wasm") + wasmCode, err := os.ReadFile("../keeper/testdata/hackatom.wasm") if err != nil { return nil, nil, nil, err } diff --git a/x/wasm/keeper/bench_test.go b/x/wasm/keeper/bench_test.go index ca5489d5bb..1ad1693bb5 100644 --- a/x/wasm/keeper/bench_test.go +++ b/x/wasm/keeper/bench_test.go @@ -1,7 +1,7 @@ package keeper import ( - "io/ioutil" + "os" "testing" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" @@ -89,7 +89,7 @@ func BenchmarkCompilation(b *testing.B) { ctx, keepers := createTestInput(b, false, SupportedFeatures, wasmConfig, db) // print out code size for comparisons - code, err := ioutil.ReadFile(spec.wasmFile) + code, err := os.ReadFile(spec.wasmFile) require.NoError(b, err) b.Logf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b(size: %d) ", len(code)) diff --git a/x/wasm/keeper/genesis_test.go b/x/wasm/keeper/genesis_test.go index ff7c6db53a..f4e5b476aa 100644 --- a/x/wasm/keeper/genesis_test.go +++ b/x/wasm/keeper/genesis_test.go @@ -6,7 +6,6 @@ import ( "encoding/base64" "errors" "fmt" - "io/ioutil" "math/rand" "os" "testing" @@ -40,7 +39,7 @@ func TestGenesisExportImport(t *testing.T) { wasmKeeper, srcCtx, srcStoreKeys := setupKeeper(t) contractKeeper := NewGovPermissionKeeper(wasmKeeper) - wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") + wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) // store some test data @@ -153,7 +152,7 @@ func TestGenesisExportImport(t *testing.T) { } func TestGenesisInit(t *testing.T) { - wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") + wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) myCodeInfo := wasmTypes.CodeInfoFixture(wasmTypes.WithSHA256CodeHash(wasmCode)) @@ -498,7 +497,7 @@ func TestImportContractWithCodeHistoryReset(t *testing.T) { keeper, ctx, _ := setupKeeper(t) contractKeeper := NewGovPermissionKeeper(keeper) - wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") + wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) wasmCodeHash := sha256.Sum256(wasmCode) @@ -564,7 +563,7 @@ func TestImportContractWithCodeHistoryReset(t *testing.T) { } func TestSupportedGenMsgTypes(t *testing.T) { - wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") + wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) var ( myAddress sdk.AccAddress = bytes.Repeat([]byte{1}, types.ContractAddrLen) @@ -636,7 +635,7 @@ func TestSupportedGenMsgTypes(t *testing.T) { func setupKeeper(t *testing.T) (*Keeper, sdk.Context, []sdk.StoreKey) { t.Helper() - tempDir, err := ioutil.TempDir("", "wasm") + tempDir, err := os.MkdirTemp("", "wasm") require.NoError(t, err) t.Cleanup(func() { os.RemoveAll(tempDir) }) var ( diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index 14ce0d9732..ba1ccdc739 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -4,8 +4,8 @@ import ( "bytes" "encoding/json" "errors" - "io/ioutil" "math" + "os" "testing" "time" @@ -31,7 +31,7 @@ import ( // When migrated to go 1.16, embed package should be used instead. func init() { - b, err := ioutil.ReadFile("./testdata/hackatom.wasm") + b, err := os.ReadFile("./testdata/hackatom.wasm") if err != nil { panic(err) } @@ -348,7 +348,7 @@ func TestCreateWithGzippedPayload(t *testing.T) { deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) - wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm.gzip") + wasmCode, err := os.ReadFile("./testdata/hackatom.wasm.gzip") require.NoError(t, err, "reading gzipped WASM code") contractID, err := keeper.Create(ctx, creator, wasmCode, nil) @@ -1097,7 +1097,7 @@ func TestMigrateWithDispatchedMessage(t *testing.T) { creator := keepers.Faucet.NewFundedAccount(ctx, deposit.Add(deposit...)...) fred := keepers.Faucet.NewFundedAccount(ctx, sdk.NewInt64Coin("denom", 5000)) - burnerCode, err := ioutil.ReadFile("./testdata/burner.wasm") + burnerCode, err := os.ReadFile("./testdata/burner.wasm") require.NoError(t, err) originalContractID, err := keeper.Create(ctx, creator, hackatomWasm, nil) diff --git a/x/wasm/keeper/legacy_querier_test.go b/x/wasm/keeper/legacy_querier_test.go index e21dd23536..dac7eaa784 100644 --- a/x/wasm/keeper/legacy_querier_test.go +++ b/x/wasm/keeper/legacy_querier_test.go @@ -5,7 +5,7 @@ import ( "encoding/json" "errors" "fmt" - "io/ioutil" + "os" "testing" sdk "github.com/cosmos/cosmos-sdk/types" @@ -24,7 +24,7 @@ func TestLegacyQueryContractState(t *testing.T) { creator := keepers.Faucet.NewFundedAccount(ctx, deposit.Add(deposit...)...) anyAddr := keepers.Faucet.NewFundedAccount(ctx, sdk.NewInt64Coin("denom", 5000)) - wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") + wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) contractID, err := keepers.ContractKeeper.Create(ctx, creator, wasmCode, nil) @@ -162,7 +162,7 @@ func TestLegacyQueryContractListByCodeOrdering(t *testing.T) { creator := keepers.Faucet.NewFundedAccount(ctx, deposit.Add(deposit...)...) anyAddr := keepers.Faucet.NewFundedAccount(ctx, topUp...) - wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") + wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) codeID, err := keepers.ContractKeeper.Create(ctx, creator, wasmCode, nil) @@ -312,7 +312,7 @@ func TestLegacyQueryContractHistory(t *testing.T) { } func TestLegacyQueryCodeList(t *testing.T) { - wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") + wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) specs := map[string]struct { diff --git a/x/wasm/keeper/proposal_integration_test.go b/x/wasm/keeper/proposal_integration_test.go index 3d5097b501..6d9b765295 100644 --- a/x/wasm/keeper/proposal_integration_test.go +++ b/x/wasm/keeper/proposal_integration_test.go @@ -5,7 +5,7 @@ import ( "encoding/hex" "encoding/json" "errors" - "io/ioutil" + "os" "testing" "github.com/cosmos/cosmos-sdk/x/params/client/utils" @@ -30,7 +30,7 @@ func TestStoreCodeProposal(t *testing.T) { CodeUploadAccess: types.AllowNobody, InstantiateDefaultPermission: types.AccessTypeNobody, }) - wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") + wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) myActorAddress := RandomBech32AccountAddress(t) @@ -68,7 +68,7 @@ func TestInstantiateProposal(t *testing.T) { InstantiateDefaultPermission: types.AccessTypeNobody, }) - wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") + wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) require.NoError(t, wasmKeeper.importCode(ctx, 1, @@ -131,7 +131,7 @@ func TestInstantiateProposal_NoAdmin(t *testing.T) { InstantiateDefaultPermission: types.AccessTypeNobody, }) - wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") + wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) require.NoError(t, wasmKeeper.importCode(ctx, 1, @@ -203,7 +203,7 @@ func TestMigrateProposal(t *testing.T) { InstantiateDefaultPermission: types.AccessTypeNobody, }) - wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") + wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) codeInfoFixture := types.CodeInfoFixture(types.WithSHA256CodeHash(wasmCode)) @@ -394,7 +394,7 @@ func TestAdminProposals(t *testing.T) { otherAddress sdk.AccAddress = bytes.Repeat([]byte{0x2}, types.ContractAddrLen) contractAddr = BuildContractAddress(1, 1) ) - wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") + wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) specs := map[string]struct { diff --git a/x/wasm/keeper/querier_test.go b/x/wasm/keeper/querier_test.go index f473f52fac..d9721f91b4 100644 --- a/x/wasm/keeper/querier_test.go +++ b/x/wasm/keeper/querier_test.go @@ -5,7 +5,7 @@ import ( "encoding/json" "errors" "fmt" - "io/ioutil" + "os" "testing" "time" @@ -265,7 +265,7 @@ func TestQueryContractListByCodeOrdering(t *testing.T) { creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) anyAddr := keepers.Faucet.NewFundedAccount(ctx, topUp...) - wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") + wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) codeID, err := keepers.ContractKeeper.Create(ctx, creator, wasmCode, nil) @@ -454,7 +454,7 @@ func TestQueryContractHistory(t *testing.T) { } func TestQueryCodeList(t *testing.T) { - wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") + wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) ctx, keepers := CreateTestInput(t, false, SupportedFeatures) @@ -656,7 +656,7 @@ func TestQueryPinnedCodes(t *testing.T) { } func TestQueryCodeInfo(t *testing.T) { - wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") + wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) ctx, keepers := CreateTestInput(t, false, SupportedFeatures) @@ -711,7 +711,7 @@ func TestQueryCodeInfo(t *testing.T) { } func TestQueryCodeInfoList(t *testing.T) { - wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") + wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) ctx, keepers := CreateTestInput(t, false, SupportedFeatures) diff --git a/x/wasm/keeper/reflect_test.go b/x/wasm/keeper/reflect_test.go index 2f89a265c4..079324fac5 100644 --- a/x/wasm/keeper/reflect_test.go +++ b/x/wasm/keeper/reflect_test.go @@ -2,7 +2,7 @@ package keeper import ( "encoding/json" - "io/ioutil" + "os" "strings" "testing" @@ -52,7 +52,7 @@ func TestReflectContractSend(t *testing.T) { require.Equal(t, uint64(1), reflectID) // upload hackatom escrow code - escrowCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") + escrowCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) escrowID, err := keeper.Create(ctx, creator, escrowCode, nil) require.NoError(t, err) diff --git a/x/wasm/keeper/snapshotter_integration_test.go b/x/wasm/keeper/snapshotter_integration_test.go index 49f2ca6baf..bef6cf0050 100644 --- a/x/wasm/keeper/snapshotter_integration_test.go +++ b/x/wasm/keeper/snapshotter_integration_test.go @@ -2,7 +2,7 @@ package keeper_test import ( "crypto/sha256" - "io/ioutil" + "os" "testing" "time" @@ -53,7 +53,7 @@ func TestSnapshotter(t *testing.T) { srcCodeIDToChecksum := make(map[uint64][]byte, len(spec.wasmFiles)) for i, v := range spec.wasmFiles { - wasmCode, err := ioutil.ReadFile(v) + wasmCode, err := os.ReadFile(v) require.NoError(t, err) codeID, err := contractKeeper.Create(ctx, genesisAddr, wasmCode, nil) require.NoError(t, err) diff --git a/x/wasm/keeper/staking_test.go b/x/wasm/keeper/staking_test.go index b6d719f135..633cbcf1fa 100644 --- a/x/wasm/keeper/staking_test.go +++ b/x/wasm/keeper/staking_test.go @@ -2,7 +2,7 @@ package keeper import ( "encoding/json" - "io/ioutil" + "os" "testing" wasmvmtypes "github.com/CosmWasm/wasmvm/types" @@ -106,7 +106,7 @@ func TestInitializeStaking(t *testing.T) { creator := k.Faucet.NewFundedAccount(ctx, deposit...) // upload staking derivates code - stakingCode, err := ioutil.ReadFile("./testdata/staking.wasm") + stakingCode, err := os.ReadFile("./testdata/staking.wasm") require.NoError(t, err) stakingID, err := keeper.Create(ctx, creator, stakingCode, nil) require.NoError(t, err) @@ -189,7 +189,7 @@ func initializeStaking(t *testing.T) initInfo { creator := k.Faucet.NewFundedAccount(ctx, deposit...) // upload staking derivates code - stakingCode, err := ioutil.ReadFile("./testdata/staking.wasm") + stakingCode, err := os.ReadFile("./testdata/staking.wasm") require.NoError(t, err) stakingID, err := k.ContractKeeper.Create(ctx, creator, stakingCode, nil) require.NoError(t, err) diff --git a/x/wasm/keeper/submsg_test.go b/x/wasm/keeper/submsg_test.go index 4cf25fc894..d1f1d30cda 100644 --- a/x/wasm/keeper/submsg_test.go +++ b/x/wasm/keeper/submsg_test.go @@ -3,7 +3,7 @@ package keeper import ( "encoding/json" "fmt" - "io/ioutil" + "os" "strconv" "testing" @@ -117,7 +117,7 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { require.NoError(t, err) // create hackatom contract for testing (for infinite loop) - hackatomCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") + hackatomCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) hackatomID, err := keepers.ContractKeeper.Create(ctx, uploader, hackatomCode, nil) require.NoError(t, err) diff --git a/x/wasm/module_test.go b/x/wasm/module_test.go index ab52363b71..f9dde8769e 100644 --- a/x/wasm/module_test.go +++ b/x/wasm/module_test.go @@ -3,7 +3,7 @@ package wasm import ( "encoding/json" "fmt" - "io/ioutil" + "os" "testing" "github.com/CosmWasm/wasmd/x/wasm/keeper/testdata" @@ -57,7 +57,7 @@ func keyPubAddr() (crypto.PrivKey, crypto.PubKey, sdk.AccAddress) { } func mustLoad(path string) []byte { - bz, err := ioutil.ReadFile(path) + bz, err := os.ReadFile(path) if err != nil { panic(err) } From 8631dc32af1107fbc7473468c58fc1343ad2ef46 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 Aug 2022 10:34:20 +0200 Subject: [PATCH 049/120] Bump github/codeql-action from 1 to 2 (#954) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 1 to 2. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/v1...v2) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analizer.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analizer.yml b/.github/workflows/codeql-analizer.yml index 0232dc356e..c1ee968796 100644 --- a/.github/workflows/codeql-analizer.yml +++ b/.github/workflows/codeql-analizer.yml @@ -23,13 +23,13 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v1 + uses: github/codeql-action/init@v2 with: languages: 'go' queries: crypto-com/cosmos-sdk-codeql@main,security-and-quality - name: Autobuild - uses: github/codeql-action/autobuild@v1 + uses: github/codeql-action/autobuild@v2 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + uses: github/codeql-action/analyze@v2 From ef493a3795d9b414d91a3a8c850f279926470200 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 Aug 2022 08:35:30 +0000 Subject: [PATCH 050/120] Bump bufbuild/buf-setup-action from 0.7.0 to 1.7.0 Bumps [bufbuild/buf-setup-action](https://github.com/bufbuild/buf-setup-action) from 0.7.0 to 1.7.0. - [Release notes](https://github.com/bufbuild/buf-setup-action/releases) - [Commits](https://github.com/bufbuild/buf-setup-action/compare/v0.7.0...v1.7.0) --- updated-dependencies: - dependency-name: bufbuild/buf-setup-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/proto-buf-publisher.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/proto-buf-publisher.yml b/.github/workflows/proto-buf-publisher.yml index 445d44498d..454e49dda5 100644 --- a/.github/workflows/proto-buf-publisher.yml +++ b/.github/workflows/proto-buf-publisher.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3.0.2 - - uses: bufbuild/buf-setup-action@v0.7.0 + - uses: bufbuild/buf-setup-action@v1.7.0 # lint checks - uses: bufbuild/buf-lint-action@v1 From 61bda97df2822e7c27071d2c59e43d1ec8e3f916 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Wed, 24 Aug 2022 16:52:55 +0700 Subject: [PATCH 051/120] close 815: upgrade to go 1.18 (#866) * close 815: upgrade to go 1.18 * Update CHANGELOG.md * updater ci and docker to go 1.18 * update image per: https://discuss.circleci.com/t/legacy-convenience-image-deprecation/41034 * Update config.yml * go get -> go install, except dockerfile for protos --- .circleci/config.yml | 3 +- CHANGELOG.md | 3 ++ Dockerfile | 2 +- Makefile | 2 +- README.md | 2 +- contrib/devtools/Makefile | 6 +-- contrib/prototools-docker/Dockerfile | 2 +- go.mod | 2 +- go.sum | 78 +--------------------------- scripts/protocgen.sh | 2 +- 10 files changed, 14 insertions(+), 88 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index b658e762e0..f0767528e5 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,8 +3,7 @@ version: 2.1 executors: golang: docker: - - image: circleci/golang:1.17 - working_directory: /go/src/github.com/cosmwasm/wasmd + - image: cimg/go:1.18 commands: make: diff --git a/CHANGELOG.md b/CHANGELOG.md index a3f7e06fa4..cbba596eda 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ # Changelog ## [Unreleased](https://github.com/CosmWasm/wasmd/tree/HEAD) +- Upgrade go to v1.18 [\#866]https://github.com/CosmWasm/wasmd/pull/866/) ([faddat](https://github.com/faddat)) + + [Full Changelog](https://github.com/CosmWasm/wasmd/compare/v0.28.0...HEAD) diff --git a/Dockerfile b/Dockerfile index 3c0ff55178..ea887a4d31 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # docker build . -t cosmwasm/wasmd:latest # docker run --rm -it cosmwasm/wasmd:latest /bin/sh -FROM golang:1.17-alpine3.15 AS go-builder +FROM golang:1.18-alpine3.15 AS go-builder ARG arch=x86_64 # this comes from standard alpine nightly file diff --git a/Makefile b/Makefile index 4a007fd788..69c1e24699 100644 --- a/Makefile +++ b/Makefile @@ -108,7 +108,7 @@ go.sum: go.mod draw-deps: @# requires brew install graphviz or apt-get install graphviz - go get github.com/RobotsAndPencils/goviz + go install github.com/RobotsAndPencils/goviz @goviz -i ./cmd/wasmd -d 2 | dot -Tpng -o dependency-graph.png clean: diff --git a/README.md b/README.md index 02ced0d3a9..2c4944dd35 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ This code was forked from the `cosmos/gaia` repository as a basis and then we ad many gaia-specific files. However, the `wasmd` binary should function just like `gaiad` except for the addition of the `x/wasm` module. -**Note**: Requires [Go 1.17+](https://golang.org/dl/) +**Note**: Requires [Go 1.18+](https://golang.org/dl/) For critical security issues & disclosure, see [SECURITY.md](SECURITY.md). ## Compatibility with CosmWasm contracts diff --git a/contrib/devtools/Makefile b/contrib/devtools/Makefile index ac05cc6779..b349abd256 100644 --- a/contrib/devtools/Makefile +++ b/contrib/devtools/Makefile @@ -61,7 +61,7 @@ tools-stamp: statik runsim golangci-lint statik: $(STATIK) $(STATIK): @echo "Installing statik..." - @(cd /tmp && go get github.com/rakyll/statik@v0.1.6) + @(cd /tmp && go install github.com/rakyll/statik@v0.1.6) # Install the runsim binary with a temporary workaround of entering an outside # directory as the "go get" command ignores the -mod option and will polute the @@ -71,12 +71,12 @@ $(STATIK): runsim: $(RUNSIM) $(RUNSIM): @echo "Installing runsim..." - @(cd /tmp && go get github.com/cosmos/tools/cmd/runsim@v1.0.0) + @(cd /tmp && go install github.com/cosmos/tools/cmd/runsim@v1.0.0) golangci-lint: $(GOLANGCI_LINT) $(GOLANGCI_LINT): @echo "Installing golangci-lint..." - @(cd /tmp && go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.28.0) + @(cd /tmp && go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.46.2) tools-clean: rm -f $(STATIK) $(GOLANGCI_LINT) $(RUNSIM) diff --git a/contrib/prototools-docker/Dockerfile b/contrib/prototools-docker/Dockerfile index 7d5af0d1fb..3ed6974c24 100644 --- a/contrib/prototools-docker/Dockerfile +++ b/contrib/prototools-docker/Dockerfile @@ -39,7 +39,7 @@ RUN GO111MODULE=on go get \ RUN upx --lzma /usr/local/bin/* -FROM golang:1.17.3-alpine +FROM golang:1.18-alpine ENV LD_LIBRARY_PATH=/lib64:/lib WORKDIR /work diff --git a/go.mod b/go.mod index 9d00684e0d..457017b764 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/CosmWasm/wasmd -go 1.17 +go 1.18 require ( github.com/CosmWasm/wasmvm v1.0.0 diff --git a/go.sum b/go.sum index 1cf0811d1e..fad4ada7b4 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,3 @@ -bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -28,18 +27,13 @@ cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aD cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= -cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= -cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= @@ -151,7 +145,6 @@ github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= @@ -210,7 +203,6 @@ github.com/confio/ics23/go v0.7.0 h1:00d2kukk7sPoHWL4zZBZwzxnpA2pec1NPdwbSokJ5w8 github.com/confio/ics23/go v0.7.0/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= github.com/containerd/continuity v0.0.0-20190827140505-75bee3e2ccb6/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= github.com/containerd/continuity v0.2.1 h1:/EeEo2EtN3umhbbgCveyjifoMYg0pS+nMMEemaYw634= github.com/containerd/continuity v0.2.1/go.mod h1:wCYX+dRqZdImhGucXOqTQn05AhX6EUDaGEMUzTFFpLg= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= @@ -300,12 +292,10 @@ github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E github.com/ethereum/go-ethereum v1.9.25/go.mod h1:vMkFiYLHI4tgPw4k2j4MHKoovchFE8plZ0M9VMk4/oM= github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= @@ -435,7 +425,6 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -470,11 +459,8 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+ 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/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/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= @@ -512,7 +498,6 @@ github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIv github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= -github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= @@ -524,7 +509,6 @@ github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/S github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= @@ -557,7 +541,6 @@ github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOn github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= -github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87 h1:uUjLpLt6bVvZ72SQc/B4dXcPBw4Vgd7soowdRl52qEM= github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87/go.mod h1:XGsKKeXxeRr95aEOgipvluMPlgjr7dGlk9ZTWOjcUcg= github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= @@ -581,7 +564,6 @@ github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1C github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jhump/protoreflect v1.9.0 h1:npqHz788dryJiR/l6K/RUQAyh2SwV91+d1dnh4RjO9w= -github.com/jhump/protoreflect v1.9.0/go.mod h1:7GcYQDdMU/O/BBrl/cX6PNHpXh6cenjd8pneu5yW7Tg= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= @@ -633,7 +615,6 @@ github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+ github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk= github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= @@ -690,7 +671,6 @@ github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0Qu 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.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs= github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= @@ -728,7 +708,6 @@ github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OS github.com/neilotoole/errgroup v0.1.5/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nishanths/predeclared v0.0.0-20200524104333-86fad755b4d3/go.mod h1:nt3d53pc1VYcphSCIaYAJtnPYnr3Zyn8fMq2wvPGPso= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= @@ -744,7 +723,6 @@ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108 github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= @@ -777,11 +755,6 @@ github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/otiai10/copy v1.6.0 h1:IinKAryFFuPONZ7cm6T6E2QX/vcJwSnlaA5lfoaXIiQ= -github.com/otiai10/copy v1.6.0/go.mod h1:XWfuS3CrI0R6IE0FbgHsEazaXO8G0LpMp9o8tos0x4E= -github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= -github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= -github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= -github.com/otiai10/mint v1.3.2/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -789,7 +762,6 @@ github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144T github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml/v2 v2.0.0-beta.8 h1:dy81yyLYJDwMTifq24Oi/IslOslRrDSb3jwDggjz3Z0= @@ -843,7 +815,6 @@ github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB8 github.com/prometheus/common v0.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= @@ -880,18 +851,14 @@ github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= -github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.23.0/go.mod h1:6c7hFfxPOy7TacJc4Fcdi24/J0NKYGzjG8FWRI916Qo= github.com/rs/zerolog v1.26.0 h1:ORM4ibhEZeTeQlCojCK2kPz1ogAY4bGs4tD+SaAdGaE= github.com/rs/zerolog v1.26.0/go.mod h1:yBiM87lvSqX8h0Ww4sdzNSkVYZ8dL2xjZJG1lAuGZEo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= github.com/sagikazarmark/crypt v0.4.0/go.mod h1:ALv2SRj7GxYV4HO9elxH9nS6M9gW+xDNxqmyJ6RfDFM= -github.com/sagikazarmark/crypt v0.5.0/go.mod h1:l+nzl7KWh51rpzp2h7t4MZWyiEWdhNpOAnclKvg+mdA= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa h1:0U2s5loxrTy6/VgfVoLuVLFJcURKLH49ie0zSch7gh4= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= @@ -922,7 +889,7 @@ github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo= github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= @@ -930,8 +897,6 @@ github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3 github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= -github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= -github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q= github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= @@ -945,8 +910,6 @@ github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DM github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= -github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= github.com/spf13/viper v1.10.1/go.mod h1:IGlFPqhNAPKRxohIzWpI5QEy4kuI7tcl5WvR+8qy1rU= github.com/spf13/viper v1.11.0 h1:7OX/1FS6n7jHD1zGrZTM7WtY13ZELRyosK4k93oPr44= github.com/spf13/viper v1.11.0/go.mod h1:djo0X/bA5+tYVoCn+C7cAYJGcVn/qYLFTG8gdUsX7Zk= @@ -1035,13 +998,10 @@ go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/api/v3 v3.5.2/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.2/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= -go.etcd.io/etcd/client/v2 v2.305.2/go.mod h1:2D7ZejHVMIfog1221iLSYlQRzrtECw3kz4I4VAQm3qI= go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -1201,11 +1161,7 @@ golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211208012354-db4efeb81f4b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220412020605-290c469a71a5 h1:bRb386wvrE+oBNdF1d/Xh9mQrfQ4ecYhW5qJ5GvTGT4= golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1219,16 +1175,12 @@ golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ 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-20210402161424-2e8d93401602/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-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1339,17 +1291,11 @@ golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-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-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad h1:ntjMns5wyP/fN65tdBD4g8J5w8n015+iIIs9rtjXkY0= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1412,10 +1358,8 @@ golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWc golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200522201501-cb1345f3a375/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= @@ -1440,7 +1384,6 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f h1:GGU+dLjvlC3qDwqYgL6UgRmHXhOOgns0bZu2Ty5mm6U= -golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= @@ -1467,7 +1410,6 @@ google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34q google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= 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.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= 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= @@ -1478,12 +1420,7 @@ google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqiv google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw= google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= -google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= -google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= -google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= -google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1559,19 +1496,8 @@ google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ6 google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211223182754-3ac035c7e7cb/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac h1:qSNTkEN+L2mvWcLgJOR+8bdHX9rN/IdU3A1Ghpfb1Rg= google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= @@ -1587,7 +1513,6 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.25.1-0.20200805231151-a709e31e5d12/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= @@ -1605,7 +1530,6 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4= gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= diff --git a/scripts/protocgen.sh b/scripts/protocgen.sh index f9d5572f1e..b1e876716c 100755 --- a/scripts/protocgen.sh +++ b/scripts/protocgen.sh @@ -8,7 +8,7 @@ protoc_gen_gocosmos() { return 1 fi - go get github.com/regen-network/cosmos-proto/protoc-gen-gocosmos@latest 2>/dev/null + go install github.com/regen-network/cosmos-proto/protoc-gen-gocosmos@latest 2>/dev/null } protoc_gen_gocosmos From c993eefb1127cc2d9c8ffa671debbdcd87d72bbc Mon Sep 17 00:00:00 2001 From: Alexander Peters Date: Wed, 24 Aug 2022 14:29:27 +0200 Subject: [PATCH 052/120] Revert changes in protogen script (#956) * Revert protocgen changes from #866 * Go mod tidy * Bump proto-gen image one version --- Makefile | 2 +- go.sum | 5 ----- scripts/protocgen.sh | 2 +- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index 69c1e24699..870b97bf81 100644 --- a/Makefile +++ b/Makefile @@ -165,7 +165,7 @@ format: format-tools ############################################################################### ### Protobuf ### ############################################################################### -PROTO_BUILDER_IMAGE=tendermintdev/sdk-proto-gen@sha256:372dce7be2f465123e26459973ca798fc489ff2c75aeecd814c0ca8ced24faca +PROTO_BUILDER_IMAGE=tendermintdev/sdk-proto-gen:v0.2 PROTO_FORMATTER_IMAGE=tendermintdev/docker-build-proto@sha256:aabcfe2fc19c31c0f198d4cd26393f5e5ca9502d7ea3feafbfe972448fee7cae proto-all: proto-format proto-lint proto-gen format diff --git a/go.sum b/go.sum index fad4ada7b4..a001b55bea 100644 --- a/go.sum +++ b/go.sum @@ -218,7 +218,6 @@ github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfc github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.4 h1:n7C2ngKXo7UC9gNyMNLbzqz7Asuf+7Qv4gnX/rOdQ44= github.com/cosmos/btcutil v1.0.4/go.mod h1:Ffqc8Hn6TJUdDgHBwIZLtrLQC1KdJ9jGJl/TvgUaxbU= -github.com/cosmos/cosmos-sdk v0.45.1/go.mod h1:XXS/asyCqWNWkx2rW6pSuen+EVcpAFxq6khrhnZgHaQ= github.com/cosmos/cosmos-sdk v0.45.5 h1:GVrZM+lss6y626Pq6loxh/3KLRgK/J6/alTkcKkYmGU= github.com/cosmos/cosmos-sdk v0.45.5/go.mod h1:WOqtDxN3eCCmnYLVla10xG7lEXkFjpTaqm2a2WasgCc= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= @@ -313,7 +312,6 @@ github.com/franela/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZ github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= -github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= @@ -606,7 +604,6 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -845,7 +842,6 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= @@ -889,7 +885,6 @@ github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo= github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= diff --git a/scripts/protocgen.sh b/scripts/protocgen.sh index b1e876716c..f9d5572f1e 100755 --- a/scripts/protocgen.sh +++ b/scripts/protocgen.sh @@ -8,7 +8,7 @@ protoc_gen_gocosmos() { return 1 fi - go install github.com/regen-network/cosmos-proto/protoc-gen-gocosmos@latest 2>/dev/null + go get github.com/regen-network/cosmos-proto/protoc-gen-gocosmos@latest 2>/dev/null } protoc_gen_gocosmos From a73880a687f4e62658ca49301ff707f53f57d034 Mon Sep 17 00:00:00 2001 From: faddat Date: Thu, 25 Aug 2022 08:36:13 +0000 Subject: [PATCH 053/120] sdk v0.46.1 and tm v0.34.21 --- go.mod | 18 +- go.sum | 638 +++------------------------------------------------------ 2 files changed, 37 insertions(+), 619 deletions(-) diff --git a/go.mod b/go.mod index 4bec73e86e..e504216f35 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( cosmossdk.io/errors v1.0.0-beta.7 cosmossdk.io/math v1.0.0-beta.3 github.com/CosmWasm/wasmvm v1.0.0 - github.com/cosmos/cosmos-sdk v0.46.0 + github.com/cosmos/cosmos-sdk v0.46.1 github.com/cosmos/iavl v0.19.1 github.com/cosmos/ibc-go/v5 v5.0.0-beta1.0.20220812090728-e1f7e89dc1e2 github.com/cosmos/interchain-accounts v0.3.1-0.20220812171121-8d8742554e53 @@ -27,9 +27,9 @@ require ( github.com/spf13/viper v1.12.0 github.com/stretchr/testify v1.8.0 github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 - github.com/tendermint/tendermint v0.34.20 + github.com/tendermint/tendermint v0.34.21 github.com/tendermint/tm-db v0.6.7 - google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd + google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b google.golang.org/grpc v1.48.0 gopkg.in/yaml.v2 v2.4.0 ) @@ -61,6 +61,7 @@ require ( github.com/cosmos/gorocksdb v1.2.0 // indirect github.com/cosmos/ledger-cosmos-go v0.11.1 // indirect github.com/cosmos/ledger-go v0.9.2 // indirect + github.com/creachadair/taskgroup v0.3.2 // indirect github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect @@ -91,7 +92,7 @@ require ( github.com/hashicorp/go-getter v1.6.1 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect - github.com/hashicorp/go-version v1.4.0 // indirect + github.com/hashicorp/go-version v1.6.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 @@ -100,7 +101,7 @@ require ( github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d // indirect - github.com/klauspost/compress v1.15.1 // indirect + github.com/klauspost/compress v1.15.9 // indirect github.com/lib/pq v1.10.6 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/magiconair/properties v1.8.6 // indirect @@ -135,10 +136,11 @@ require ( go.etcd.io/bbolt v1.3.6 // indirect go.opencensus.io v0.23.0 // indirect golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect - golang.org/x/net v0.0.0-20220617184016-355a448f1bc9 // indirect + golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect + golang.org/x/net v0.0.0-20220726230323-06994584191e // indirect golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 // indirect - golang.org/x/sys v0.0.0-20220702020025-31831981b65f // indirect - golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 // indirect + golang.org/x/sys v0.0.0-20220727055044-e65921a090b8 // indirect + golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 // indirect golang.org/x/text v0.3.7 // indirect golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df // indirect google.golang.org/api v0.81.0 // indirect diff --git a/go.sum b/go.sum index 6d4040b462..1cc5ffd3cc 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,3 @@ -4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= -bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -16,7 +14,6 @@ cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6 cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= @@ -32,7 +29,6 @@ cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aD cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= cloud.google.com/go v0.100.2 h1:t9Iw5QH5v4XtlEQaCtUY7x6sCABps8sW0acw7e2WQ6Y= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= @@ -51,15 +47,12 @@ cloud.google.com/go/compute v1.6.1 h1:2sMmt8prCn7DPaG4Pmh0N3Inmc8cT8ae5k1M6VJ9Wq cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= cloud.google.com/go/iam v0.3.0 h1:exkAomrVUuzx9kWFI1wm3KI0uoDeUFPB4kKGzx6x+Gc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w= -cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= @@ -68,7 +61,6 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 cloud.google.com/go/storage v1.14.0 h1:6RRlFMv1omScs6iq2hfE3IvgE+l6RfJPampq8UZc5TU= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= -contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= 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.3 h1:TbZxSopz2LqjJ7aXYfn7nJSb8vNaBklW6BLpcei1qwM= @@ -78,47 +70,24 @@ filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmG filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= git.sr.ht/~sircmpwn/getopt v0.0.0-20191230200459-23622cc906b3/go.mod h1:wMEGFFFNuPos7vHmWXfszqImLppbc0wEhh6JBfJIUgw= git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9/go.mod h1:BVJwbDfVjCjoFiKrhkei6NdGcZYpkDkdyCdg1ukytRA= -github.com/Antonboom/errname v0.1.6/go.mod h1:7lz79JAnuoMNDAWE9MeeIr1/c/VpSUWatBv2FH9NYpI= -github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= -github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw= github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0= -github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8= github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= github.com/CosmWasm/wasmvm v1.0.0 h1:NRmnHe3xXsKn2uEcB1F5Ha323JVAhON+BI6L177dlKc= github.com/CosmWasm/wasmvm v1.0.0/go.mod h1:ei0xpvomwSdONsxDuONzV7bL1jSET1M8brEx0FCXc+A= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= -github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/DataDog/zstd v1.5.0/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= -github.com/GaijinEntertainment/go-exhaustruct/v2 v2.1.0/go.mod h1:LGOGuvEgCfCQsy3JF2tRmpGDpzA53iZfyGEWSPwQ6/4= -github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= -github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= -github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= -github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OpenPeeDeeP/depguard v1.1.0/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= @@ -129,7 +98,6 @@ github.com/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSa github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1:eSYp2T6f0apnuW8TzhV3f6Aff2SE8Dwio++U4ha4yEM= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= -github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= @@ -138,52 +106,34 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= -github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= -github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-metrics v0.4.0 h1:yCQqn7dwca4ITXb+CbubHmedzaQYHhNhrEXLYUeEe8Q= github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= -github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= -github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.40.45 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-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= -github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= -github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -192,13 +142,8 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1U github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= -github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= -github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= -github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= -github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= @@ -223,36 +168,27 @@ github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/bufbuild/buf v1.4.0/go.mod h1:mwHG7klTHnX+rM/ym8LXGl7vYpVmnwT96xWoRB4H5QI= -github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= 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/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= -github.com/chavacava/garif v0.0.0-20220316182200-5cad0b5181d4/go.mod h1:W8EnPSQ8Nv4fUjc/v1/8tHFqhuOJXnRub0dTfuAQktU= -github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= 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/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= @@ -265,7 +201,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH 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= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= @@ -279,25 +214,19 @@ github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/ github.com/consensys/bavard v0.1.8-0.20210915155054-088da2f7f54a/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= github.com/consensys/gnark-crypto v0.5.3/go.mod h1:hOdPlWQV1gDLp7faZVeg8Y0iEPFaOUnCc4XeCCk96p0= -github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= -github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190620071333-e64a0ec8b42a/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/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/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.4 h1:n7C2ngKXo7UC9gNyMNLbzqz7Asuf+7Qv4gnX/rOdQ44= github.com/cosmos/btcutil v1.0.4/go.mod h1:Ffqc8Hn6TJUdDgHBwIZLtrLQC1KdJ9jGJl/TvgUaxbU= github.com/cosmos/cosmos-proto v1.0.0-alpha7 h1:yqYUOHF2jopwZh4dVQp3xgqwftE5/2hkrwIV6vkUbO0= github.com/cosmos/cosmos-proto v1.0.0-alpha7/go.mod h1:dosO4pSAbJF8zWCzCoTWP7nNsjcvSUBQmniFxDg5daw= -github.com/cosmos/cosmos-sdk v0.46.0 h1:TwifvVmAmqUNB70tN1clrqExryWyBU3RxbI2QZEJUJY= -github.com/cosmos/cosmos-sdk v0.46.0/go.mod h1:u6Ci6+V+srijJhzctEEPYBygUz3O2YXP5ZijPnV6mt0= +github.com/cosmos/cosmos-sdk v0.46.1 h1:7vUZXMyrmEb4xtBYpz1TobtrcnpgiZTi+tVjc0XWB4o= +github.com/cosmos/cosmos-sdk v0.46.1/go.mod h1:2+o8Qw8qnE02V+lQVZDJFQ8tri/hsiA5GmWaPERqVa0= 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= @@ -317,20 +246,16 @@ github.com/cosmos/ledger-go v0.9.2 h1:Nnao/dLwaVTk1Q5U9THldpUMMXU94BOTWPddSmVB6p github.com/cosmos/ledger-go v0.9.2/go.mod h1:oZJ2hHAZROdlHiwTg4t7kP+GKIIkBT+o6c9QWFanOyI= 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.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= 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/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= -github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= -github.com/daixiang0/gci v0.3.3/go.mod h1:1Xr2bxnQbDxCqqulUOv8qpGqkgRw9RSCGGjEC2LjF8o= github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= -github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -341,11 +266,8 @@ github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeC github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= -github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= -github.com/denisenkom/go-mssqldb v0.12.0/go.mod h1:iiK0YP1ZeepvmBQk/QpLEhhTNJgfzrpArPY/aFvc9yU= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= -github.com/dgraph-io/badger/v2 v2.2007.2/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= @@ -361,15 +283,9 @@ github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8 github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/docker/cli v20.10.14+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.17+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/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= @@ -392,47 +308,26 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m 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.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= -github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= -github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= -github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= -github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= -github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= -github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/firefart/nonamedreturns v1.0.1/go.mod h1:D3dpIBojGGNh5UfElmwPu73SwDCm+VKhHYqwlNOk2uQ= github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= -github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= -github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= -github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= -github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= -github.com/fzipp/gocyclo v0.5.1/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= @@ -444,7 +339,6 @@ github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjX github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= -github.com/go-critic/go-critic v0.6.3/go.mod h1:c6b3ZP1MQ7o6lPR7Rv3lEf7pYQUmAcx8ABHgdZCQt/k= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -463,7 +357,6 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG 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-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= @@ -473,26 +366,10 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87 github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= -github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= -github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= -github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= -github.com/go-toolsmith/astequal v1.0.1/go.mod h1:4oGA3EZXTVItV/ipGiOx7NWkY5veFfcsOJVS2YxltLw= -github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= -github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= -github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5/go.mod h1:3NAwwmD4uY/yggRxoEjk/S00MIV3A+H7rrE3i87eYxM= -github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= -github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= -github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= -github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= -github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= @@ -502,17 +379,11 @@ github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/E github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= -github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188/go.mod h1:vXjM/+wXQnTPR4KqTKDgJukSZ6amVRtWMPEjE6sQoK8= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -534,7 +405,6 @@ github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71 github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -555,27 +425,14 @@ github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/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.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= -github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= -github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= -github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= -github.com/golangci/golangci-lint v1.46.2/go.mod h1:3DkdHnxn9eoTTrpT2gB0TEv8KSziuoqe9FitgQLHvAY= github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= -github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= -github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= -github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= -github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= -github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -611,26 +468,20 @@ github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw= -github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= @@ -640,11 +491,7 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0 h1:dS9eYAjhrE2RjmzYw2XAPvcXfmcQLtFEQWn0CR82awk= github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= -github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= -github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= @@ -657,21 +504,7 @@ github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= -github.com/gostaticanalysis/analysisutil v0.4.1/go.mod h1:18U/DLpRgIUd459wGxVHE0fRgmo1UgHDcbw7F5idXu0= -github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= -github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= -github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= -github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= -github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= -github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= -github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= -github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= -github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= -github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= @@ -679,7 +512,6 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= @@ -690,11 +522,7 @@ github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/b github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= -github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= -github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= @@ -703,20 +531,13 @@ github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9n github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-getter v1.6.1 h1:NASsgP4q6tL94WH6nJxKWj8As2H/2kop/bB1d8JMyRY= github.com/hashicorp/go-getter v1.6.1/go.mod h1:IZCrswsZPeWv9IkVnLElzRU/gz/QPi6pZHn4tv6vbwA= -github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= @@ -726,47 +547,29 @@ github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1 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.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.4.0 h1:aAQzgqIrRKRa7w75CKpbBxYsmUoPjzVm1W59ca1L0J4= -github.com/hashicorp/go-version v1.4.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= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= -github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= -github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= -github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 h1:aSVUgRRRtOrZOC1fYmY9gV0e9z/Iu+xNVSASWjsuyGU= github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3/go.mod h1:5PC6ZNPde8bBqU/ewGZig35+UIZtw9Ytxez8/q5ZyFE= -github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= -github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= github.com/huin/goupnp v1.0.3-0.20220313090229-ca81a64b4204/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= -github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= 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 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= @@ -775,7 +578,6 @@ github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7m github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= @@ -785,21 +587,10 @@ github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bS github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= -github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= -github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= -github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= -github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f/go.mod h1:qr2b5kx4HbFS7/g4uYO5qv9ei8303JMsC7ESbYiqr2Q= -github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= -github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= -github.com/jhump/protoreflect v1.12.1-0.20220417024638-438db461d753 h1:uFlcJKZPLQd7rmOY/RrvBuUaYmAFnlFHKLivhO6cOy8= -github.com/jhump/protoreflect v1.12.1-0.20220417024638-438db461d753/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= -github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= -github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= +github.com/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= @@ -808,10 +599,7 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGw github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= -github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= -github.com/josharian/txtarfs v0.0.0-20210218200122-0702f000015a/go.mod h1:izVPOvVRsHiKkeGCT6tYBNWyDVuzj9wAaBb5R9qamfw= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -826,18 +614,14 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d h1:Z+RDyXzjKE0i2sTjZ/b1uxiGtPhFy34Ou/Tk0qwN0kM= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/errcheck v1.6.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= @@ -845,47 +629,29 @@ github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs 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.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.1 h1:y9FcTHGyrebwfP0ZZqFiaxTaiDnUrGkJkI+f583BL1A= -github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY= +github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kulti/thelper v0.6.2/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= -github.com/kunwardeep/paralleltest v1.0.3/go.mod h1:vLydzomDFpk7yu5UX02RmP0H8QfRPOV/oFhWN85Mjb4= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= -github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= -github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= -github.com/lib/pq v0.0.0-20180327071824-d34b9ff171c2/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs= github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= @@ -893,24 +659,15 @@ github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QT github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= -github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= -github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= -github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= -github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= @@ -920,45 +677,27 @@ github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= -github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= -github.com/mgechev/revive v1.2.1/go.mod h1:+Ro3wqY4vakcYNtkBWdZC7dBg1xSB6sp054wWwmeFm0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= -github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= -github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 h1:hLDRPB66XQT/8+wG9WsDpiCvZf1yKO7sz7scAjSlBa0= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= @@ -966,16 +705,10 @@ github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0Qu 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.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= -github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= -github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -984,147 +717,85 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= -github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= -github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= -github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= -github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= -github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= -github.com/mwitkow/go-proto-validators v0.2.0/go.mod h1:ZfA1hW+UH/2ZHOWvQ3HnQaU0DtnpXu850MZiy+YUgcc= github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= -github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/jwt v1.2.2/go.mod h1:/xX356yQA6LuXI9xWW7mZNpxgF2mBmGecH+Fj34sP5Q= -github.com/nats-io/jwt/v2 v2.0.3/go.mod h1:VRP+deawSXyhNjXmxPCHskrR6Mq50BqpEI5SEcNiGlY= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats-server/v2 v2.5.0/go.mod h1:Kj86UtrXAL6LwYRA6H4RqzkHhK0Vcv2ZnKD5WbQ1t3g= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nats.go v1.12.1/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= -github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= github.com/neilotoole/errgroup v0.1.6/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nishanths/exhaustive v0.7.11/go.mod h1:gX+MP7DWMKJmNa1HfMozK+u04hQd3na9i0hyqf3/dOI= -github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= -github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= +github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/oklog/ulid/v2 v2.0.2/go.mod h1:mtBL0Qe/0HAx6/a4Z30qxVIAL1eQDweXq5lxOEiwQ68= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= -github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= -github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= -github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= -github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/runc v1.1.2/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= +github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 h1:rc3tiVYb5z54aKaDfakKn0dDjIyPpTtszkjuMzyt7ec= github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= -github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= -github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= -github.com/ory/dockertest/v3 v3.9.1/go.mod h1:42Ir9hmvaAPm0Mgibk6mBPi7SFvTXxEcnztDYOJ//uM= -github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= -github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= -github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= -github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= -github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= -github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.0-beta.8/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= -github.com/pelletier/go-toml/v2 v2.0.0/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= -github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= github.com/pelletier/go-toml/v2 v2.0.2 h1:+jQXlF3scKIcSEKkdHzXhCTDLPFi5r1wnK6yPS+49Gw= github.com/pelletier/go-toml/v2 v2.0.2/go.mod h1:MovirKjgVRESsAvNZlAjtFwV867yGuwRkXbG66OzopI= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= -github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= -github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/polyfloyd/go-errorlint v1.0.0/go.mod h1:KZy4xxPJyy88/gldCe5OdW6OQRtNO3EZE7hXzmnebgA= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= @@ -1132,7 +803,6 @@ github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeD 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.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34= github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= @@ -1152,7 +822,6 @@ github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8b 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.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.34.0 h1:RBmGO9d/FVjqHT0yUGQwBJhkwKV+wPCn7KGpvfab0uE= github.com/prometheus/common v0.34.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= @@ -1166,18 +835,6 @@ github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1 github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= -github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= -github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= -github.com/quasilyte/go-ruleguard v0.3.16-0.20220213074421-6aa060fab41a/go.mod h1:VMX+OnnSw4LicdiEGtRSD/1X8kW7GuEscjYNr4cOIT4= -github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/dsl v0.3.16/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/dsl v0.3.19/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= -github.com/quasilyte/gogrep v0.0.0-20220120141003-628d8b3623b5/go.mod h1:wSEyW6O61xRV6zb6My3HxrQ5/8ke7NE2OayqCHa3xRM= -github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= -github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -1187,17 +844,12 @@ github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzy github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= -github.com/remyoudompheng/go-dbus v0.0.0-20121104212943-b7232d34b1d5/go.mod h1:+u151txRmLpwxBmpYn9z3d1sdJdjRPQpsXuYeY9jNls= -github.com/remyoudompheng/go-liblzma v0.0.0-20190506200333-81bf2d431b96/go.mod h1:90HvCY7+oHHUKkbeMCiHt1WuFR2/hPJ9QrljDG+v6ls= -github.com/remyoudompheng/go-misc v0.0.0-20190427085024-2d6ac652a50e/go.mod h1:80FQABjoFzZ2M5uEa6FUaJYEmqU2UOKojlFVak1UAwI= github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= -github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= +github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= 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= @@ -1207,63 +859,39 @@ github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Q github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryancurrah/gomodguard v1.2.3/go.mod h1:rYbA/4Tg5c54mV1sv4sQTP5WOPBcoLtnBZ7/TEhXAbg= -github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= -github.com/sagikazarmark/crypt v0.5.0/go.mod h1:l+nzl7KWh51rpzp2h7t4MZWyiEWdhNpOAnclKvg+mdA= -github.com/sagikazarmark/crypt v0.6.0/go.mod h1:U8+INwJo3nBv1m6A/8OBXAq7Jnpspk5AxSgDyEQcea8= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa h1:0U2s5loxrTy6/VgfVoLuVLFJcURKLH49ie0zSch7gh4= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= -github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= -github.com/securego/gosec/v2 v2.11.0/go.mod h1:SX8bptShuG8reGC0XS09+a4H2BoWSJi+fscA+Pulbpo= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shirou/gopsutil/v3 v3.22.4/go.mod h1:D01hZJ4pVHPpCTZ3m3T2+wDF2YAGfd+H4ifUguaQzHM= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= -github.com/sivchari/tenv v1.5.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa h1:YJfZp12Z3AFhSBeXOlv4BO55RMwPn2NoQeDsrdWnBtY= github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo= github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= -github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= github.com/spf13/cobra v1.5.0 h1:X+jTBEBqF0bHN+9cSMgmfuvv2VHJ9ezmFNf9Y/XstYU= github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= @@ -1274,25 +902,17 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= -github.com/spf13/viper v1.11.0/go.mod h1:djo0X/bA5+tYVoCn+C7cAYJGcVn/qYLFTG8gdUsX7Zk= github.com/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ= github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= -github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= -github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -1304,49 +924,30 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= github.com/subosito/gotenv v1.4.0 h1:yAzM1+SmVcz5R4tXGsNMu1jUl2aOJXoiWUCEwwnGrvs= github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo= -github.com/sylvia7788/contextcheck v1.0.4/go.mod h1:vuPKJMQ7MQ91ZTqfdyreNKwZjyUg6KO+IebVyQDedZQ= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s= github.com/tendermint/btcd v0.1.1/go.mod h1:DC6/m53jtQzr/NFmMNEu0rxf18/ktVoVtMrnDD5pN+U= github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RMWx1aInLzndwxKalgi5rTqgfXxOxbEI= github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/tendermint/tendermint v0.34.20 h1:/pmvJhO3IqOxhbi8iRXudTjA2YKpaMqrLwFNkyxDSzw= -github.com/tendermint/tendermint v0.34.20/go.mod h1:KtOwCLYJcsS1ymtAfnjjAtXfXClbqcqjdqzFt2Em1Ac= -github.com/tendermint/tm-db v0.6.6/go.mod h1:wP8d49A85B7/erz/r4YbKssKw6ylsO/hKtFk7E1aWZI= +github.com/tendermint/tendermint v0.34.21 h1:UiGGnBFHVrZhoQVQ7EfwSOLuCtarqCSsRf8VrklqB7s= +github.com/tendermint/tendermint v0.34.21/go.mod h1:XDvfg6U7grcFTDx7VkzxnhazQ/bspGJAn4DZ6DcLLjQ= 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/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= -github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= -github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= github.com/tidwall/gjson v1.12.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/gjson v1.14.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/sjson v1.2.4/go.mod h1:098SZ494YoMWPmMO6ct4dcFnqxwj9r/gF0Etp19pSNM= -github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= -github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= -github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tomarrell/wrapcheck/v2 v2.6.1/go.mod h1:Eo+Opt6pyMW1b6cNllOcDSSoHO0aTJ+iF6BfCUbHltA= -github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= -github.com/tommy-muehle/go-mnd/v2 v2.5.0/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= @@ -1358,72 +959,31 @@ 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/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= -github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/uudashr/gocognit v1.0.5/go.mod h1:wgYz0mitoKOTysqxTDMOUXg+Jb5SvtihkfmugIZYpEA= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/valyala/quicktemplate v1.7.0/go.mod h1:sqKJnoaOF88V07vkO+9FL8fb9uZg/VPSJnLYn+LmLk8= -github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= -github.com/vektra/mockery/v2 v2.14.0/go.mod h1:bnD1T8tExSgPD1ripLkDbr60JA9VtQeu12P3wgLZd7M= -github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= -github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= -github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= -github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE= -github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= github.com/zondax/hid v0.9.1-0.20220302062450-5552068d2266 h1:O9XLFXGkVswDFmH9LaYpqu+r/AAFWqr0DL6V00KEVFg= github.com/zondax/hid v0.9.1-0.20220302062450-5552068d2266/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -gitlab.com/bosi/decorder v0.2.1/go.mod h1:6C/nhLSbF6qZbYD8bRmISBwc6vcWdNsiIBkRvjJFrH0= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= -go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/api/v3 v3.5.2/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= -go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= -go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.2/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= -go.etcd.io/etcd/client/v2 v2.305.2/go.mod h1:2D7ZejHVMIfog1221iLSYlQRzrtECw3kz4I4VAQm3qI= -go.etcd.io/etcd/client/v2 v2.305.4/go.mod h1:Ud+VUwIi9/uQHOMA+4ekToJ12lTxlv0zB/+DHwTGEbU= -go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= -go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= -go.mozilla.org/mozlog v0.0.0-20170222151521-4bb13139d403/go.mod h1:jHoPAGnDrCy6kaI2tAze5Prf0Nr0w/oNkROt2lw3n3o= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -1438,25 +998,13 @@ go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqe go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1465,31 +1013,19 @@ golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8U 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-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 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-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220313003712-b769efc7c000/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1506,7 +1042,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/typeparams v0.0.0-20220218215828-6cf2b201936e/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= +golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -1533,10 +1070,6 @@ 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.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1558,8 +1091,6 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1588,26 +1119,20 @@ golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v 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-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220617184016-355a448f1bc9 h1:Yqz/iviulwKwAREEeUd3nbBFn0XuyJqkoft2IlrvOhc= -golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220726230323-06994584191e h1:wOQNKh1uuDGRnmgF0jDxh7ctgGy/3P4rYWQRVJD4/Yg= +golang.org/x/net v0.0.0-20220726230323-06994584191e/go.mod h1:AaygXjzTFtRAg2ttMY5RMuhpJ3cNnI0XpyFJD1iQRSM= 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= @@ -1623,7 +1148,6 @@ golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ 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-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= @@ -1633,7 +1157,6 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1660,7 +1183,6 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1668,14 +1190,9 @@ golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1685,7 +1202,6 @@ golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1703,27 +1219,22 @@ golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/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-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/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= @@ -1732,7 +1243,6 @@ golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1740,44 +1250,28 @@ golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/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-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211213223007-03aa0b5f6827/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220405210540-1e041c57c461/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220517195934-5e4e11fc645e/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-20220702020025-31831981b65f h1:xdsejrW/0Wf2diT5CPp3XmKUNbr7Xvw8kYilQ+6qjRY= -golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220727055044-e65921a090b8 h1:dyU22nBWzrmTQxtNrr4dzVOvaw35nUYE279vF9UmsI8= +golang.org/x/sys v0.0.0-20220727055044-e65921a090b8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20220411215600-e5f449aeb171/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 h1:CBpWXWQpIRjzmkkA+M7q9Fqnwd2mZr3AFqexg8YTfoM= -golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 h1:Q5284mrmYTpACcm+eAKjKJH48BBwSyfJqmmGDTtT8Vc= +golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1792,54 +1286,39 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190228203856-589c23e65e65/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1849,59 +1328,29 @@ golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= -golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= -golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.9-0.20211228192929-ee1ca4ffc4da/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= -golang.org/x/tools v0.1.11-0.20220316014157-77aa08bb151a/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= -golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= 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= @@ -1912,7 +1361,6 @@ golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNq gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= -gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= @@ -1921,7 +1369,6 @@ google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEt google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -1947,9 +1394,7 @@ google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6 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.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw= google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= @@ -1964,15 +1409,12 @@ google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181107211654-5fc9ac540362/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1982,7 +1424,6 @@ google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= @@ -2005,8 +1446,6 @@ google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -2038,13 +1477,8 @@ google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEc 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-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= @@ -2061,9 +1495,9 @@ google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd h1:e0TwkXOdbnH/1x5rc5MZ/VYyiZ4v+RdVfrGMqEwT68I= google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b h1:SfSkJugek6xm7lWywqth4r2iTrYLpD8lOj1nMIIhMNM= +google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= 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.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -2074,13 +1508,11 @@ google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ij google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= @@ -2099,7 +1531,6 @@ google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD 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.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= 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= @@ -2119,7 +1550,6 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= @@ -2128,18 +1558,14 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI= gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= @@ -2155,19 +1581,15 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.6/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= -gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -2177,11 +1599,6 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -honnef.co/go/tools v0.3.1/go.mod h1:vlRD9XErLMGT+mDuofSr0mMMquscM/1nQqtRSsh6m70= -mvdan.cc/gofumpt v0.3.1/go.mod h1:w3ymliuxvzVx8DAutBnVyDqYb1Niy/yCJt/lk821YCE= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= -mvdan.cc/unparam v0.0.0-20211214103731-d0ef000c54e5/go.mod h1:b8RRCBm0eeiWR8cfN88xeq2G5SG3VKGO+5UPWi5FSOY= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= pgregory.net/rapid v0.4.7 h1:MTNRktPuv5FNqOO151TM9mDTa+XHcX6ypYeISDVD14g= @@ -2192,7 +1609,6 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= From 60da5c03d6f878a67455cd07d40c3d9c49023927 Mon Sep 17 00:00:00 2001 From: Alexander Peters Date: Thu, 25 Aug 2022 10:52:47 +0200 Subject: [PATCH 054/120] Ugrade sdk to v0.45.7 (#959) * 457 * upgrade ci * go get -> go install * change denom to new format * Update config.yml * Revert "change denom to new format" This reverts commit e637cf5aa417f5df9b91c196d97de85dcb70db01. * bump ibc-go to v3.2.x * Update config.yml * ibc-go v3.2.0 * Revert ibc-go version upgrade Co-authored-by: Jacob Gadikian --- Makefile | 2 +- app/test_helpers.go | 6 +- benchmarks/app_test.go | 8 +- contrib/devtools/Makefile | 2 +- go.mod | 51 +-- go.sum | 629 +++++++++++++++++++++++++++------ x/wasm/simulation/sim_utils.go | 1 + 7 files changed, 561 insertions(+), 138 deletions(-) diff --git a/Makefile b/Makefile index 870b97bf81..aea212d4f6 100644 --- a/Makefile +++ b/Makefile @@ -108,7 +108,7 @@ go.sum: go.mod draw-deps: @# requires brew install graphviz or apt-get install graphviz - go install github.com/RobotsAndPencils/goviz + go install github.com/RobotsAndPencils/goviz@latest @goviz -i ./cmd/wasmd -d 2 | dot -Tpng -o dependency-graph.png clean: diff --git a/app/test_helpers.go b/app/test_helpers.go index cf3de89a82..5aec561089 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -5,6 +5,7 @@ import ( "encoding/hex" "encoding/json" "fmt" + "math/rand" "path/filepath" "strconv" "testing" @@ -294,10 +295,11 @@ func SignCheckDeliver( chainID string, accNums, accSeqs []uint64, expSimPass, expPass bool, priv ...cryptotypes.PrivKey, ) (sdk.GasInfo, *sdk.Result, error) { tx, err := helpers.GenTx( + rand.New(rand.NewSource(time.Now().UnixNano())), txCfg, msgs, sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 0)}, - 2*DefaultGas, + helpers.DefaultGenTxGas, chainID, accNums, accSeqs, @@ -343,6 +345,7 @@ func SignAndDeliver( chainID string, accNums, accSeqs []uint64, expSimPass, expPass bool, priv ...cryptotypes.PrivKey, ) (sdk.GasInfo, *sdk.Result, error) { tx, err := helpers.GenTx( + rand.New(rand.NewSource(time.Now().UnixNano())), txCfg, msgs, sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 0)}, @@ -380,6 +383,7 @@ func GenSequenceOfTxs(txGen client.TxConfig, msgs []sdk.Msg, accNums []uint64, i var err error for i := 0; i < numToGenerate; i++ { txs[i], err = helpers.GenTx( + rand.New(rand.NewSource(time.Now().UnixNano())), txGen, msgs, sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 0)}, diff --git a/benchmarks/app_test.go b/benchmarks/app_test.go index 88773e6b42..e1e8954f5c 100644 --- a/benchmarks/app_test.go +++ b/benchmarks/app_test.go @@ -2,6 +2,7 @@ package benchmarks import ( "encoding/json" + "math/rand" "os" "testing" "time" @@ -125,7 +126,8 @@ func InitializeWasmApp(b testing.TB, db dbm.DB, numAccounts int) AppInfo { Sender: addr.String(), WASMByteCode: cw20Code, } - storeTx, err := helpers.GenTx(txGen, []sdk.Msg{&storeMsg}, nil, 55123123, "", []uint64{0}, []uint64{0}, minter) + storeTx, err := helpers.GenTx(rand.New(rand.NewSource(time.Now().UnixNano())), + txGen, []sdk.Msg{&storeMsg}, nil, 55123123, "", []uint64{0}, []uint64{0}, minter) require.NoError(b, err) _, res, err := wasmApp.Deliver(txGen.TxEncoder(), storeTx) require.NoError(b, err) @@ -159,7 +161,8 @@ func InitializeWasmApp(b testing.TB, db dbm.DB, numAccounts int) AppInfo { Msg: initBz, } gasWanted := 500000 + 10000*uint64(numAccounts) - initTx, err := helpers.GenTx(txGen, []sdk.Msg{&initMsg}, nil, gasWanted, "", []uint64{0}, []uint64{1}, minter) + initTx, err := helpers.GenTx(rand.New(rand.NewSource(time.Now().UnixNano())), + txGen, []sdk.Msg{&initMsg}, nil, gasWanted, "", []uint64{0}, []uint64{1}, minter) require.NoError(b, err) _, res, err = wasmApp.Deliver(txGen.TxEncoder(), initTx) require.NoError(b, err) @@ -192,6 +195,7 @@ func GenSequenceOfTxs(b testing.TB, info *AppInfo, msgGen func(*AppInfo) ([]sdk. msgs, err := msgGen(info) require.NoError(b, err) txs[i], err = helpers.GenTx( + rand.New(rand.NewSource(time.Now().UnixNano())), info.TxConfig, msgs, fees, diff --git a/contrib/devtools/Makefile b/contrib/devtools/Makefile index b349abd256..611f0c4d87 100644 --- a/contrib/devtools/Makefile +++ b/contrib/devtools/Makefile @@ -76,7 +76,7 @@ $(RUNSIM): golangci-lint: $(GOLANGCI_LINT) $(GOLANGCI_LINT): @echo "Installing golangci-lint..." - @(cd /tmp && go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.46.2) + @(cd /tmp && go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.47.0) tools-clean: rm -f $(STATIK) $(GOLANGCI_LINT) $(RUNSIM) diff --git a/go.mod b/go.mod index 457017b764..41b41dd53b 100644 --- a/go.mod +++ b/go.mod @@ -4,8 +4,8 @@ go 1.18 require ( github.com/CosmWasm/wasmvm v1.0.0 - github.com/cosmos/cosmos-sdk v0.45.5 - github.com/cosmos/iavl v0.17.3 + github.com/cosmos/cosmos-sdk v0.45.7 + github.com/cosmos/iavl v0.19.1 github.com/cosmos/ibc-go/v3 v3.0.0 github.com/cosmos/interchain-accounts v0.1.0 github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b @@ -20,15 +20,15 @@ require ( github.com/regen-network/cosmos-proto v0.3.1 github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa github.com/spf13/cast v1.5.0 - github.com/spf13/cobra v1.4.0 + github.com/spf13/cobra v1.5.0 github.com/spf13/pflag v1.0.5 - github.com/spf13/viper v1.11.0 + github.com/spf13/viper v1.12.0 github.com/stretchr/testify v1.8.0 github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca - github.com/tendermint/tendermint v0.34.19 + github.com/tendermint/tendermint v0.34.20 github.com/tendermint/tm-db v0.6.7 - google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac - google.golang.org/grpc v1.45.0 + google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd + google.golang.org/grpc v1.48.0 gopkg.in/yaml.v2 v2.4.0 ) @@ -38,10 +38,10 @@ require ( github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect github.com/DataDog/zstd v1.4.5 // indirect github.com/Workiva/go-datastructures v1.0.53 // indirect - github.com/armon/go-metrics v0.3.10 // indirect + github.com/armon/go-metrics v0.4.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/speakeasy v0.1.0 // indirect - github.com/btcsuite/btcd v0.22.0-beta // indirect + github.com/btcsuite/btcd v0.22.1 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/coinbase/rosetta-sdk-go v0.7.0 // indirect @@ -59,9 +59,9 @@ require ( github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/dustin/go-humanize v1.0.0 // indirect github.com/felixge/httpsnoop v1.0.1 // indirect - github.com/fsnotify/fsnotify v1.5.1 // indirect + github.com/fsnotify/fsnotify v1.5.4 // indirect github.com/go-kit/kit v0.12.0 // indirect - github.com/go-kit/log v0.2.0 // indirect + github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/gateway v1.1.0 // indirect @@ -82,42 +82,43 @@ require ( github.com/inconshreveable/mousetrap v1.0.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d // indirect - github.com/klauspost/compress v1.13.6 // indirect - github.com/lib/pq v1.10.4 // indirect - github.com/libp2p/go-buffer-pool v0.0.2 // indirect + github.com/klauspost/compress v1.15.1 // indirect + github.com/lib/pq v1.10.6 // indirect + github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/magiconair/properties v1.8.6 // indirect + github.com/mattn/go-colorable v0.1.12 // indirect github.com/mattn/go-isatty v0.0.14 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/mitchellh/mapstructure v1.4.3 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect - github.com/pelletier/go-toml v1.9.4 // indirect - github.com/pelletier/go-toml/v2 v2.0.0-beta.8 // indirect + github.com/pelletier/go-toml v1.9.5 // indirect + github.com/pelletier/go-toml/v2 v2.0.2 // indirect github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.2.0 // indirect - github.com/prometheus/common v0.32.1 // indirect + github.com/prometheus/common v0.34.0 // indirect github.com/prometheus/procfs v0.7.3 // indirect github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 // indirect github.com/rs/cors v1.8.2 // indirect - github.com/rs/zerolog v1.26.0 // indirect + github.com/rs/zerolog v1.27.0 // indirect github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa // indirect github.com/spf13/afero v1.8.2 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect - github.com/subosito/gotenv v1.2.0 // indirect + github.com/subosito/gotenv v1.4.0 // indirect github.com/tendermint/btcd v0.1.1 // indirect github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/zondax/hid v0.9.0 // indirect go.etcd.io/bbolt v1.3.6 // indirect - golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect - golang.org/x/net v0.0.0-20220412020605-290c469a71a5 // indirect - golang.org/x/sys v0.0.0-20220412211240-33da011f77ad // indirect - golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect + golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect + golang.org/x/net v0.0.0-20220617184016-355a448f1bc9 // indirect + golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c // indirect + golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 // indirect golang.org/x/text v0.3.7 // indirect google.golang.org/protobuf v1.28.0 // indirect - gopkg.in/ini.v1 v1.66.4 // indirect + gopkg.in/ini.v1 v1.66.6 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect nhooyr.io/websocket v1.8.6 // indirect ) diff --git a/go.sum b/go.sum index a001b55bea..7342a2a03b 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,5 @@ -bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= +4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= +bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= @@ -12,6 +13,7 @@ cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6 cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= @@ -27,30 +29,41 @@ cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aD cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w= +cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.0.0-beta.2 h1:/BZRNzm8N4K4eWfK28dL4yescorxtO7YG1yun8fy+pI= filippo.io/edwards25519 v1.0.0-beta.2/go.mod h1:X+pm78QAUPtFLi1z9PYIlS/bdDnvbCOGKtZ+ACWEf7o= +github.com/Antonboom/errname v0.1.6/go.mod h1:7lz79JAnuoMNDAWE9MeeIr1/c/VpSUWatBv2FH9NYpI= +github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw= @@ -71,6 +84,7 @@ github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= @@ -82,30 +96,34 @@ github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3 github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= +github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= +github.com/GaijinEntertainment/go-exhaustruct/v2 v2.1.0/go.mod h1:LGOGuvEgCfCQsy3JF2tRmpGDpzA53iZfyGEWSPwQ6/4= github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.5.1 h1:aPJp2QD7OOrhO5tQXqQoGSJc+DjDtWTGLOmNyAm6FgY= -github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= +github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/OpenPeeDeeP/depguard v1.1.0/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/Workiva/go-datastructures v1.0.52/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA= github.com/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1:eSYp2T6f0apnuW8TzhV3f6Aff2SE8Dwio++U4ha4yEM= -github.com/adlio/schema v1.1.13/go.mod h1:L5Z7tw+7lRK1Fnpi/LT/ooCP1elkXn0krMWBQHUhEDE= -github.com/adlio/schema v1.3.0 h1:eSVYLxYWbm/6ReZBCkLw4Fz7uqC+ZNoPvA39bOwi52A= -github.com/adlio/schema v1.3.0/go.mod h1:51QzxkpeFs6lRY11kPye26IaFPOV+HqEj01t5aXXKfs= +github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= +github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= @@ -114,8 +132,13 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= +github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= +github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= @@ -123,35 +146,47 @@ github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hC github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= -github.com/armon/go-metrics v0.3.10 h1:FR+drcQStOe+32sYyJYyZ7FIdgoGGBnwLl+flodp8Uo= github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= +github.com/armon/go-metrics v0.4.0 h1:yCQqn7dwca4ITXb+CbubHmedzaQYHhNhrEXLYUeEe8Q= +github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= +github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= +github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= +github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= +github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= +github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= -github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo= -github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA= +github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= +github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= @@ -166,11 +201,14 @@ github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/bufbuild/buf v1.4.0/go.mod h1:mwHG7klTHnX+rM/ym8LXGl7vYpVmnwT96xWoRB4H5QI= +github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= @@ -179,11 +217,13 @@ github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghf github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= +github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= +github.com/chavacava/garif v0.0.0-20220316182200-5cad0b5181d4/go.mod h1:W8EnPSQ8Nv4fUjc/v1/8tHFqhuOJXnRub0dTfuAQktU= +github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= +github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= 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/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= @@ -198,35 +238,32 @@ github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:z github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go v0.7.0 h1:lmTO/JEpCvZgpbkOITL95rA80CPKb5CtMzLaqF2mCNg= github.com/coinbase/rosetta-sdk-go v0.7.0/go.mod h1:7nD3oBPIiHqhRprqvMgPoGxe/nyq3yftRmpsy29coWE= -github.com/confio/ics23/go v0.6.6/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= github.com/confio/ics23/go v0.7.0 h1:00d2kukk7sPoHWL4zZBZwzxnpA2pec1NPdwbSokJ5w8= github.com/confio/ics23/go v0.7.0/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= -github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= -github.com/containerd/continuity v0.0.0-20190827140505-75bee3e2ccb6/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.2.1 h1:/EeEo2EtN3umhbbgCveyjifoMYg0pS+nMMEemaYw634= -github.com/containerd/continuity v0.2.1/go.mod h1:wCYX+dRqZdImhGucXOqTQn05AhX6EUDaGEMUzTFFpLg= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= +github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190620071333-e64a0ec8b42a/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/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/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.4 h1:n7C2ngKXo7UC9gNyMNLbzqz7Asuf+7Qv4gnX/rOdQ44= github.com/cosmos/btcutil v1.0.4/go.mod h1:Ffqc8Hn6TJUdDgHBwIZLtrLQC1KdJ9jGJl/TvgUaxbU= -github.com/cosmos/cosmos-sdk v0.45.5 h1:GVrZM+lss6y626Pq6loxh/3KLRgK/J6/alTkcKkYmGU= -github.com/cosmos/cosmos-sdk v0.45.5/go.mod h1:WOqtDxN3eCCmnYLVla10xG7lEXkFjpTaqm2a2WasgCc= +github.com/cosmos/cosmos-sdk v0.45.7 h1:5H9Ov04WIGoQAMJDdcSD4Vp5Lz6I17voHySH+vjJFCc= +github.com/cosmos/cosmos-sdk v0.45.7/go.mod h1:l8DURPoMMkIEe/Gw59g9KIMDjlYyTsKOWdc3iSSBXvw= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= -github.com/cosmos/iavl v0.17.3 h1:s2N819a2olOmiauVa0WAhoIJq9EhSXE9HDBAoR9k+8Y= -github.com/cosmos/iavl v0.17.3/go.mod h1:prJoErZFABYZGDHka1R6Oay4z9PrNeFFiMKHDAMOi4w= +github.com/cosmos/iavl v0.19.1 h1:3gaq9b6SjiB0KBTygRnAvEGml2pQlu1TH8uma5g63Ys= +github.com/cosmos/iavl v0.19.1/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= github.com/cosmos/ibc-go/v3 v3.0.0 h1:XUNplHVS51Q2gMnTFsFsH9QJ7flsovMamnltKbEgPQ4= github.com/cosmos/ibc-go/v3 v3.0.0/go.mod h1:Mb+1NXiPOLd+CPFlOC6BKeAUaxXlhuWenMmRiUiSmwY= github.com/cosmos/interchain-accounts v0.1.0 h1:QmuwNsf1Hxl3P5GSGt7Z+JeuHPiZw4Z34R/038P5T6s= @@ -241,17 +278,22 @@ github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwc github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= +github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/daixiang0/gci v0.3.3/go.mod h1:1Xr2bxnQbDxCqqulUOv8qpGqkgRw9RSCGGjEC2LjF8o= github.com/danieljoos/wincred v1.0.2 h1:zf4bhty2iLuwgjgpraD2E9UbvO+fe54XXGJbOwe23fU= github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= +github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= +github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= github.com/denisenkom/go-mssqldb v0.12.0/go.mod h1:iiK0YP1ZeepvmBQk/QpLEhhTNJgfzrpArPY/aFvc9yU= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= @@ -267,7 +309,11 @@ github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUn github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= +github.com/docker/cli v20.10.14+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.17+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= @@ -286,9 +332,12 @@ github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= +github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= +github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= github.com/ethereum/go-ethereum v1.9.25/go.mod h1:vMkFiYLHI4tgPw4k2j4MHKoovchFE8plZ0M9VMk4/oM= +github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= @@ -301,8 +350,10 @@ github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/firefart/nonamedreturns v1.0.1/go.mod h1:D3dpIBojGGNh5UfElmwPu73SwDCm+VKhHYqwlNOk2uQ= github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= @@ -311,17 +362,23 @@ github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVB github.com/franela/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= +github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= +github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= +github.com/fzipp/gocyclo v0.5.1/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/ghodss/yaml v1.0.0/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.7.0 h1:jGB9xAJQ12AIGNB4HguylppmDK1Am9ppF7XnGXXJuoU= github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= +github.com/go-critic/go-critic v0.6.3/go.mod h1:c6b3ZP1MQ7o6lPR7Rv3lEf7pYQUmAcx8ABHgdZCQt/k= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -331,14 +388,16 @@ github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgO 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 h1:7i2K3eKTos3Vc0enKCfnVcgHh2olr/MyfboYq7cAcFw= 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-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= @@ -346,12 +405,25 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87 github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= +github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= +github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.1/go.mod h1:4oGA3EZXTVItV/ipGiOx7NWkY5veFfcsOJVS2YxltLw= +github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= +github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= +github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5/go.mod h1:3NAwwmD4uY/yggRxoEjk/S00MIV3A+H7rrE3i87eYxM= +github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= @@ -361,6 +433,9 @@ github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/E github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= @@ -369,7 +444,6 @@ github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188/go.mod h1:vXjM/+ github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/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= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -383,6 +457,7 @@ github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71 github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -407,9 +482,21 @@ github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= +github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= +github.com/golangci/golangci-lint v1.46.2/go.mod h1:3DkdHnxn9eoTTrpT2gB0TEv8KSziuoqe9FitgQLHvAY= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= +github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -422,7 +509,9 @@ 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 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -440,25 +529,38 @@ github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= +github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw= +github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= +github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= +github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= @@ -467,23 +569,33 @@ github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= +github.com/gostaticanalysis/analysisutil v0.4.1/go.mod h1:18U/DLpRgIUd459wGxVHE0fRgmo1UgHDcbw7F5idXu0= +github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= +github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= +github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= +github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= +github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= +github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= +github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= +github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= @@ -493,11 +605,10 @@ github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= +github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -507,12 +618,14 @@ github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/S github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= @@ -522,6 +635,8 @@ github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.4.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -539,10 +654,14 @@ github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOn github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87 h1:uUjLpLt6bVvZ72SQc/B4dXcPBw4Vgd7soowdRl52qEM= github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87/go.mod h1:XGsKKeXxeRr95aEOgipvluMPlgjr7dGlk9ZTWOjcUcg= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= +github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= @@ -550,6 +669,10 @@ github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3 github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/improbable-eng/grpc-web v0.14.1 h1:NrN4PY71A6tAz2sKDvC5JCauENWp0ykG8Oq1H3cpFvw= github.com/improbable-eng/grpc-web v0.14.1/go.mod h1:zEjGHa8DAlkoOXmswrNvhUGEYQA9UI7DhrGeHR1DMGU= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= @@ -558,16 +681,30 @@ github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZ github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jhump/protoreflect v1.9.0 h1:npqHz788dryJiR/l6K/RUQAyh2SwV91+d1dnh4RjO9w= +github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= +github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= +github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= +github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= +github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f/go.mod h1:qr2b5kx4HbFS7/g4uYO5qv9ei8303JMsC7ESbYiqr2Q= +github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= +github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= +github.com/jhump/protoreflect v1.12.1-0.20220417024638-438db461d753 h1:uFlcJKZPLQd7rmOY/RrvBuUaYmAFnlFHKLivhO6cOy8= +github.com/jhump/protoreflect v1.12.1-0.20220417024638-438db461d753/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= +github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= +github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= +github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= +github.com/josharian/txtarfs v0.0.0-20210218200122-0702f000015a/go.mod h1:izVPOvVRsHiKkeGCT6tYBNWyDVuzj9wAaBb5R9qamfw= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -581,22 +718,30 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d h1:Z+RDyXzjKE0i2sTjZ/b1uxiGtPhFy34Ou/Tk0qwN0kM= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/errcheck v1.6.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= +github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.1 h1:y9FcTHGyrebwfP0ZZqFiaxTaiDnUrGkJkI+f583BL1A= +github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -604,33 +749,50 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kulti/thelper v0.6.2/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= +github.com/kunwardeep/paralleltest v1.0.3/go.mod h1:vLydzomDFpk7yu5UX02RmP0H8QfRPOV/oFhWN85Mjb4= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= +github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= +github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk= +github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= +github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= +github.com/lib/pq v0.0.0-20180327071824-d34b9ff171c2/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= +github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs= +github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= +github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= +github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= +github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= +github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= @@ -646,13 +808,22 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= +github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= +github.com/mgechev/revive v1.2.1/go.mod h1:+Ro3wqY4vakcYNtkBWdZC7dBg1xSB6sp054wWwmeFm0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= +github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 h1:hLDRPB66XQT/8+wG9WsDpiCvZf1yKO7sz7scAjSlBa0= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= @@ -660,18 +831,26 @@ github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= 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.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs= github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= +github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= +github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -680,13 +859,20 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= +github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= +github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= +github.com/mwitkow/go-proto-validators v0.2.0/go.mod h1:ZfA1hW+UH/2ZHOWvQ3HnQaU0DtnpXu850MZiy+YUgcc= github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= +github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= @@ -702,43 +888,53 @@ github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxzi github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= github.com/neilotoole/errgroup v0.1.5/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nishanths/exhaustive v0.7.11/go.mod h1:gX+MP7DWMKJmNa1HfMozK+u04hQd3na9i0hyqf3/dOI= +github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= +github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/oklog/ulid/v2 v2.0.2/go.mod h1:mtBL0Qe/0HAx6/a4Z30qxVIAL1eQDweXq5lxOEiwQ68= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak= github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= +github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= -github.com/opencontainers/runc v1.0.3 h1:1hbqejyQWCJBvtKAfdO0b1FmaEf2z/bxnjqbARass5k= -github.com/opencontainers/runc v1.0.3/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= +github.com/opencontainers/runc v1.1.2/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= +github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= +github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= +github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -751,47 +947,65 @@ github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnh github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= +github.com/ory/dockertest/v3 v3.9.1/go.mod h1:42Ir9hmvaAPm0Mgibk6mBPi7SFvTXxEcnztDYOJ//uM= +github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= github.com/otiai10/copy v1.6.0 h1:IinKAryFFuPONZ7cm6T6E2QX/vcJwSnlaA5lfoaXIiQ= +github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= +github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= +github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= +github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.0-beta.8 h1:dy81yyLYJDwMTifq24Oi/IslOslRrDSb3jwDggjz3Z0= +github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= +github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml/v2 v2.0.0-beta.8/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pelletier/go-toml/v2 v2.0.0/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pelletier/go-toml/v2 v2.0.2 h1:+jQXlF3scKIcSEKkdHzXhCTDLPFi5r1wnK6yPS+49Gw= +github.com/pelletier/go-toml/v2 v2.0.2/go.mod h1:MovirKjgVRESsAvNZlAjtFwV867yGuwRkXbG66OzopI= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= +github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/polyfloyd/go-errorlint v1.0.0/go.mod h1:KZy4xxPJyy88/gldCe5OdW6OQRtNO3EZE7hXzmnebgA= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.8.0/go.mod h1:O9VU6huf47PktckDQfMTX0Y8tY0/7TSWwj+ITvv0TnM= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34= github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= @@ -804,30 +1018,38 @@ github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2 github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.34.0 h1:RBmGO9d/FVjqHT0yUGQwBJhkwKV+wPCn7KGpvfab0uE= +github.com/prometheus/common v0.34.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= +github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= +github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= +github.com/quasilyte/go-ruleguard v0.3.16-0.20220213074421-6aa060fab41a/go.mod h1:VMX+OnnSw4LicdiEGtRSD/1X8kW7GuEscjYNr4cOIT4= +github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.16/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.19/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= +github.com/quasilyte/gogrep v0.0.0-20220120141003-628d8b3623b5/go.mod h1:wSEyW6O61xRV6zb6My3HxrQ5/8ke7NE2OayqCHa3xRM= +github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= +github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -837,45 +1059,65 @@ github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzy github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= +github.com/remyoudompheng/go-dbus v0.0.0-20121104212943-b7232d34b1d5/go.mod h1:+u151txRmLpwxBmpYn9z3d1sdJdjRPQpsXuYeY9jNls= +github.com/remyoudompheng/go-liblzma v0.0.0-20190506200333-81bf2d431b96/go.mod h1:90HvCY7+oHHUKkbeMCiHt1WuFR2/hPJ9QrljDG+v6ls= +github.com/remyoudompheng/go-misc v0.0.0-20190427085024-2d6ac652a50e/go.mod h1:80FQABjoFzZ2M5uEa6FUaJYEmqU2UOKojlFVak1UAwI= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.26.0 h1:ORM4ibhEZeTeQlCojCK2kPz1ogAY4bGs4tD+SaAdGaE= -github.com/rs/zerolog v1.26.0/go.mod h1:yBiM87lvSqX8h0Ww4sdzNSkVYZ8dL2xjZJG1lAuGZEo= +github.com/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs= +github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryancurrah/gomodguard v1.2.3/go.mod h1:rYbA/4Tg5c54mV1sv4sQTP5WOPBcoLtnBZ7/TEhXAbg= +github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/crypt v0.4.0/go.mod h1:ALv2SRj7GxYV4HO9elxH9nS6M9gW+xDNxqmyJ6RfDFM= +github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= +github.com/sagikazarmark/crypt v0.5.0/go.mod h1:l+nzl7KWh51rpzp2h7t4MZWyiEWdhNpOAnclKvg+mdA= +github.com/sagikazarmark/crypt v0.6.0/go.mod h1:U8+INwJo3nBv1m6A/8OBXAq7Jnpspk5AxSgDyEQcea8= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa h1:0U2s5loxrTy6/VgfVoLuVLFJcURKLH49ie0zSch7gh4= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= +github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= +github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= +github.com/securego/gosec/v2 v2.11.0/go.mod h1:SX8bptShuG8reGC0XS09+a4H2BoWSJi+fscA+Pulbpo= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil/v3 v3.22.4/go.mod h1:D01hZJ4pVHPpCTZ3m3T2+wDF2YAGfd+H4ifUguaQzHM= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= +github.com/sivchari/tenv v1.5.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa h1:YJfZp12Z3AFhSBeXOlv4BO55RMwPn2NoQeDsrdWnBtY= github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -890,10 +1132,10 @@ github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= -github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= -github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q= +github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= +github.com/spf13/cobra v1.5.0 h1:X+jTBEBqF0bHN+9cSMgmfuvv2VHJ9ezmFNf9Y/XstYU= +github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= @@ -902,13 +1144,13 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.10.1/go.mod h1:IGlFPqhNAPKRxohIzWpI5QEy4kuI7tcl5WvR+8qy1rU= -github.com/spf13/viper v1.11.0 h1:7OX/1FS6n7jHD1zGrZTM7WtY13ZELRyosK4k93oPr44= +github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= github.com/spf13/viper v1.11.0/go.mod h1:djo0X/bA5+tYVoCn+C7cAYJGcVn/qYLFTG8gdUsX7Zk= +github.com/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ= +github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= +github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= +github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= @@ -921,6 +1163,8 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -928,13 +1172,18 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= +github.com/subosito/gotenv v1.4.0 h1:yAzM1+SmVcz5R4tXGsNMu1jUl2aOJXoiWUCEwwnGrvs= +github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo= +github.com/sylvia7788/contextcheck v1.0.4/go.mod h1:vuPKJMQ7MQ91ZTqfdyreNKwZjyUg6KO+IebVyQDedZQ= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca h1:Ld/zXl5t4+D69SiV4JoN7kkfvJdOWlPpfxrzxpLMoUk= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= +github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s= github.com/tendermint/btcd v0.1.1/go.mod h1:DC6/m53jtQzr/NFmMNEu0rxf18/ktVoVtMrnDD5pN+U= @@ -942,62 +1191,98 @@ github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RM github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/tendermint/tendermint v0.34.14/go.mod h1:FrwVm3TvsVicI9Z7FlucHV6Znfd5KBc/Lpp69cCwtk0= -github.com/tendermint/tendermint v0.34.19 h1:y0P1qI5wSa9IRuhKnTDA6IUcOrLi1hXJuALR+R7HFEk= -github.com/tendermint/tendermint v0.34.19/go.mod h1:R5+wgIwSxMdKQcmOaeudL0Cjkr3HDkhpcdum6VeU3R4= -github.com/tendermint/tm-db v0.6.4/go.mod h1:dptYhIpJ2M5kUuenLr+Yyf3zQOv1SgBZcl8/BmWlMBw= +github.com/tendermint/tendermint v0.34.20 h1:/pmvJhO3IqOxhbi8iRXudTjA2YKpaMqrLwFNkyxDSzw= +github.com/tendermint/tendermint v0.34.20/go.mod h1:KtOwCLYJcsS1ymtAfnjjAtXfXClbqcqjdqzFt2Em1Ac= github.com/tendermint/tm-db v0.6.6/go.mod h1:wP8d49A85B7/erz/r4YbKssKw6ylsO/hKtFk7E1aWZI= 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/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= +github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= +github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= github.com/tidwall/gjson v1.6.7/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI= github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/sjson v1.1.4/go.mod h1:wXpKXu8CtDjKAZ+3DrKY5ROCorDFahq8l0tey/Lx1fg= +github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= +github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= +github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tomarrell/wrapcheck/v2 v2.6.1/go.mod h1:Eo+Opt6pyMW1b6cNllOcDSSoHO0aTJ+iF6BfCUbHltA= +github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= +github.com/tommy-muehle/go-mnd/v2 v2.5.0/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/tyler-smith/go-bip39 v1.0.2/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/uudashr/gocognit v1.0.5/go.mod h1:wgYz0mitoKOTysqxTDMOUXg+Jb5SvtihkfmugIZYpEA= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus= +github.com/valyala/quicktemplate v1.7.0/go.mod h1:sqKJnoaOF88V07vkO+9FL8fb9uZg/VPSJnLYn+LmLk8= +github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +github.com/vektra/mockery/v2 v2.14.0/go.mod h1:bnD1T8tExSgPD1ripLkDbr60JA9VtQeu12P3wgLZd7M= +github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/vmihailenco/msgpack/v5 v5.1.4/go.mod h1:C5gboKD0TJPqWDTVTtrQNfRbiBwHZGo8UTqP/9/XvLI= github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE= +github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= +github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= +github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= +github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/zondax/hid v0.9.0 h1:eiT3P6vNxAEVxXMw66eZUAAnU2zD33JBkfG/EnfAKl8= github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +gitlab.com/bosi/decorder v0.2.1/go.mod h1:6C/nhLSbF6qZbYD8bRmISBwc6vcWdNsiIBkRvjJFrH0= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/api/v3 v3.5.2/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= +go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.2/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= +go.etcd.io/etcd/client/v2 v2.305.2/go.mod h1:2D7ZejHVMIfog1221iLSYlQRzrtECw3kz4I4VAQm3qI= +go.etcd.io/etcd/client/v2 v2.305.4/go.mod h1:Ud+VUwIi9/uQHOMA+4ekToJ12lTxlv0zB/+DHwTGEbU= go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= +go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= +go.mozilla.org/mozlog v0.0.0-20170222151521-4bb13139d403/go.mod h1:jHoPAGnDrCy6kaI2tAze5Prf0Nr0w/oNkROt2lw3n3o= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -1014,16 +1299,21 @@ go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1044,15 +1334,19 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA= +golang.org/x/crypto v0.0.0-20220313003712-b769efc7c000/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1068,6 +1362,7 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= +golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -1096,6 +1391,9 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1111,7 +1409,6 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1119,6 +1416,7 @@ golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1149,16 +1447,23 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211208012354-db4efeb81f4b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220412020605-290c469a71a5 h1:bRb386wvrE+oBNdF1d/Xh9mQrfQ4ecYhW5qJ5GvTGT4= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9 h1:Yqz/iviulwKwAREEeUd3nbBFn0XuyJqkoft2IlrvOhc= +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 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= @@ -1176,10 +1481,14 @@ golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1187,6 +1496,7 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1211,6 +1521,7 @@ golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1220,7 +1531,6 @@ golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1245,13 +1555,14 @@ golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1266,33 +1577,54 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/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-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211213223007-03aa0b5f6827/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad h1:ntjMns5wyP/fN65tdBD4g8J5w8n015+iIIs9rtjXkY0= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220405210540-1e041c57c461/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c h1:aFV+BgZ4svzjfabn8ERpuB4JI4N6/rdy1iusx77G3oU= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220411215600-e5f449aeb171/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 h1:CBpWXWQpIRjzmkkA+M7q9Fqnwd2mZr3AFqexg8YTfoM= +golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1313,33 +1645,44 @@ golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190228203856-589c23e65e65/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1349,36 +1692,65 @@ golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= +golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= +golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.9-0.20211228192929-ee1ca4ffc4da/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= +golang.org/x/tools v0.1.11-0.20220316014157-77aa08bb151a/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= +golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= 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 h1:GGU+dLjvlC3qDwqYgL6UgRmHXhOOgns0bZu2Ty5mm6U= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= @@ -1388,6 +1760,7 @@ google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEt google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -1415,16 +1788,27 @@ google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqiv google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw= google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.81.0/go.mod h1:FA6Mb/bZxj706H2j+j2d6mHEEaHBmbbWnkfvmorOCko= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181107211654-5fc9ac540362/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1433,6 +1817,7 @@ google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dT google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= @@ -1454,12 +1839,13 @@ google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201119123407-9b1e624d6bc4/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1491,10 +1877,26 @@ google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ6 google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac h1:qSNTkEN+L2mvWcLgJOR+8bdHX9rN/IdU3A1Ghpfb1Rg= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd h1:e0TwkXOdbnH/1x5rc5MZ/VYyiZ4v+RdVfrGMqEwT68I= +google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= @@ -1510,6 +1912,7 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= @@ -1521,13 +1924,14 @@ gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4= gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI= +gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= @@ -1541,15 +1945,19 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.6/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= +gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1557,6 +1965,11 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.3.1/go.mod h1:vlRD9XErLMGT+mDuofSr0mMMquscM/1nQqtRSsh6m70= +mvdan.cc/gofumpt v0.3.1/go.mod h1:w3ymliuxvzVx8DAutBnVyDqYb1Niy/yCJt/lk821YCE= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20211214103731-d0ef000c54e5/go.mod h1:b8RRCBm0eeiWR8cfN88xeq2G5SG3VKGO+5UPWi5FSOY= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/x/wasm/simulation/sim_utils.go b/x/wasm/simulation/sim_utils.go index 4f9a00b0bf..b29c18cf28 100644 --- a/x/wasm/simulation/sim_utils.go +++ b/x/wasm/simulation/sim_utils.go @@ -31,6 +31,7 @@ func GenAndDeliverTxWithRandFees(txCtx simulation.OperationInput, gas uint64) (s func GenAndDeliverTx(txCtx simulation.OperationInput, fees sdk.Coins, gas uint64) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { account := txCtx.AccountKeeper.GetAccount(txCtx.Context, txCtx.SimAccount.Address) tx, err := helpers.GenTx( + txCtx.R, txCtx.TxGen, []sdk.Msg{txCtx.Msg}, fees, From e251e1648796e906286985094f41eab7f0530664 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Aug 2022 08:53:51 +0000 Subject: [PATCH 055/120] Bump github.com/prometheus/client_golang from 1.12.2 to 1.13.0 Bumps [github.com/prometheus/client_golang](https://github.com/prometheus/client_golang) from 1.12.2 to 1.13.0. - [Release notes](https://github.com/prometheus/client_golang/releases) - [Changelog](https://github.com/prometheus/client_golang/blob/main/CHANGELOG.md) - [Commits](https://github.com/prometheus/client_golang/compare/v1.12.2...v1.13.0) --- updated-dependencies: - dependency-name: github.com/prometheus/client_golang dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 8 ++++---- go.sum | 12 ++++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 41b41dd53b..7fd3399cf6 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/gorilla/mux v1.8.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/pkg/errors v0.9.1 - github.com/prometheus/client_golang v1.12.2 + github.com/prometheus/client_golang v1.13.0 github.com/rakyll/statik v0.1.7 github.com/regen-network/cosmos-proto v0.3.1 github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa @@ -98,8 +98,8 @@ require ( github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.2.0 // indirect - github.com/prometheus/common v0.34.0 // indirect - github.com/prometheus/procfs v0.7.3 // indirect + github.com/prometheus/common v0.37.0 // indirect + github.com/prometheus/procfs v0.8.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 // indirect github.com/rs/cors v1.8.2 // indirect github.com/rs/zerolog v1.27.0 // indirect @@ -117,7 +117,7 @@ require ( golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c // indirect golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 // indirect golang.org/x/text v0.3.7 // indirect - google.golang.org/protobuf v1.28.0 // indirect + google.golang.org/protobuf v1.28.1 // indirect gopkg.in/ini.v1 v1.66.6 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect nhooyr.io/websocket v1.8.6 // indirect diff --git a/go.sum b/go.sum index 7342a2a03b..5098b6cd0b 100644 --- a/go.sum +++ b/go.sum @@ -1007,8 +1007,9 @@ github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34= github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.13.0 h1:b71QUfeo5M8gq2+evJdTPfZhYMAU0uKPkyPJ7TPsloU= +github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -1026,8 +1027,9 @@ github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16 github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.34.0 h1:RBmGO9d/FVjqHT0yUGQwBJhkwKV+wPCn7KGpvfab0uE= github.com/prometheus/common v0.34.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= +github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= 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= @@ -1035,8 +1037,9 @@ github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+Gx 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 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= 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/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= @@ -1914,8 +1917,9 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= 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= From 559ea2b4771197bdaaaff374949511334d4e0b5a Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Thu, 25 Aug 2022 13:51:07 +0200 Subject: [PATCH 056/120] Fix codeql analyzer branch config --- .github/workflows/codeql-analizer.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/codeql-analizer.yml b/.github/workflows/codeql-analizer.yml index 86714b1281..dd4a9c542b 100644 --- a/.github/workflows/codeql-analizer.yml +++ b/.github/workflows/codeql-analizer.yml @@ -5,7 +5,7 @@ on: paths: - "**.go" push: - branches: [ master ] + branches: [ main ] paths: - "**.go" From ac0422edb9d30a1e8bb31f4895b621b4be3cff4f Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Thu, 25 Aug 2022 19:53:37 +0700 Subject: [PATCH 057/120] automatic fixes from "golangci-lint run ./... --fix" --- .golangci.yml | 1 - x/wasm/ibctesting/chain.go | 5 +-- x/wasm/ibctesting/wasm.go | 2 -- x/wasm/keeper/proposal_integration_test.go | 38 +++++++++++++--------- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 35800440d0..d130886589 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -22,7 +22,6 @@ linters: - prealloc - exportloopref - staticcheck - - structcheck - stylecheck - typecheck - unconvert diff --git a/x/wasm/ibctesting/chain.go b/x/wasm/ibctesting/chain.go index 17f5c09a36..b631796e2e 100644 --- a/x/wasm/ibctesting/chain.go +++ b/x/wasm/ibctesting/chain.go @@ -9,13 +9,12 @@ import ( tmprotoversion "github.com/tendermint/tendermint/proto/tendermint/version" - "github.com/cosmos/cosmos-sdk/baseapp" + sdkerrors "cosmossdk.io/errors" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" @@ -27,10 +26,8 @@ import ( commitmenttypes "github.com/cosmos/ibc-go/v5/modules/core/23-commitment/types" host "github.com/cosmos/ibc-go/v5/modules/core/24-host" "github.com/cosmos/ibc-go/v5/modules/core/exported" - ibckeeper "github.com/cosmos/ibc-go/v5/modules/core/keeper" "github.com/cosmos/ibc-go/v5/modules/core/types" ibctmtypes "github.com/cosmos/ibc-go/v5/modules/light-clients/07-tendermint/types" - ibctesting "github.com/cosmos/ibc-go/v5/testing" "github.com/cosmos/ibc-go/v5/testing/mock" "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" diff --git a/x/wasm/ibctesting/wasm.go b/x/wasm/ibctesting/wasm.go index a7247480a3..33080ca036 100644 --- a/x/wasm/ibctesting/wasm.go +++ b/x/wasm/ibctesting/wasm.go @@ -8,8 +8,6 @@ import ( "os" "strings" - - sdk "github.com/cosmos/cosmos-sdk/types" ibctesting "github.com/cosmos/ibc-go/v5/testing" "github.com/golang/protobuf/proto" //nolint diff --git a/x/wasm/keeper/proposal_integration_test.go b/x/wasm/keeper/proposal_integration_test.go index ba12867360..0b9bbc8378 100644 --- a/x/wasm/keeper/proposal_integration_test.go +++ b/x/wasm/keeper/proposal_integration_test.go @@ -155,7 +155,11 @@ func TestInstantiateProposal_NoAdmin(t *testing.T) { p.Admin = "invalid" p.Label = "testing" }) - _, err = govKeeper.SubmitProposal(ctx, src) + msgContent, err := govv1.NewLegacyContent(src, oneAddress.String()) + require.NoError(t, err) + + // when stored + _, err = govKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, "testing 123") require.Error(t, err) // test with no admin @@ -166,14 +170,16 @@ func TestInstantiateProposal_NoAdmin(t *testing.T) { p.Label = "testing" }) em := sdk.NewEventManager() + msgContent, err = govv1.NewLegacyContent(src, oneAddress.String()) + require.NoError(t, err) // when stored - storedProposal, err := govKeeper.SubmitProposal(ctx, src) + _, err = govKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, "testing 123") require.NoError(t, err) // and proposal execute - handler := govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) - err = handler(ctx.WithEventManager(em), storedProposal.GetContent()) + handler := govKeeper.LegacyRouter().GetRoute(src.ProposalRoute()) + err = handler(ctx.WithEventManager(em), src) require.NoError(t, err) // then @@ -566,21 +572,21 @@ func TestUpdateParamsProposal(t *testing.T) { var jsonProposal utils.ParamChangeProposalJSON require.NoError(t, legacyAmino.UnmarshalJSON(bz, &jsonProposal)) - proposal := proposal.ParameterChangeProposal{ + prop := proposal.ParameterChangeProposal{ Title: jsonProposal.Title, Description: jsonProposal.Description, Changes: jsonProposal.Changes.ToParamChanges(), } // when stored myActorAddress := govKeeper.GetGovernanceAccount(ctx).GetAddress().String() - msgContent, err := govv1.NewLegacyContent(&proposal, myActorAddress) + msgContent, err := govv1.NewLegacyContent(&prop, myActorAddress) _, err = govKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, "testing 123") require.NoError(t, err) // and proposal execute - handler := govKeeper.LegacyRouter().GetRoute(proposal.ProposalRoute()) - err = handler(ctx, &proposal) + handler := govKeeper.LegacyRouter().GetRoute(prop.ProposalRoute()) + err = handler(ctx, &prop) require.NoError(t, err) // then @@ -651,7 +657,7 @@ func TestPinCodesProposal(t *testing.T) { gotPinnedChecksums = nil ctx, _ := parentCtx.CacheContext() mock.PinFn = spec.mockFn - proposal := types.PinCodesProposal{ + prop := types.PinCodesProposal{ Title: "Foo", Description: "Bar", CodeIDs: spec.srcCodeIDs, @@ -659,7 +665,7 @@ func TestPinCodesProposal(t *testing.T) { // when stored myActorAddress := govKeeper.GetGovernanceAccount(ctx).GetAddress().String() - msgContent, err := govv1.NewLegacyContent(&proposal, myActorAddress) + msgContent, err := govv1.NewLegacyContent(&prop, myActorAddress) _, err = govKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, "testing 123") if spec.expErr { @@ -668,8 +674,8 @@ func TestPinCodesProposal(t *testing.T) { } // and proposal execute - handler := govKeeper.LegacyRouter().GetRoute(proposal.ProposalRoute()) - err = handler(ctx, &proposal) + handler := govKeeper.LegacyRouter().GetRoute(prop.ProposalRoute()) + err = handler(ctx, &prop) require.NoError(t, err) // then @@ -741,7 +747,7 @@ func TestUnpinCodesProposal(t *testing.T) { gotUnpinnedChecksums = nil ctx, _ := parentCtx.CacheContext() mock.UnpinFn = spec.mockFn - proposal := types.UnpinCodesProposal{ + prop := types.UnpinCodesProposal{ Title: "Foo", Description: "Bar", CodeIDs: spec.srcCodeIDs, @@ -749,7 +755,7 @@ func TestUnpinCodesProposal(t *testing.T) { // when stored myActorAddress := govKeeper.GetGovernanceAccount(ctx).GetAddress().String() - msgContent, err := govv1.NewLegacyContent(&proposal, myActorAddress) + msgContent, err := govv1.NewLegacyContent(&prop, myActorAddress) _, err = govKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, "testing 123") if spec.expErr { @@ -758,8 +764,8 @@ func TestUnpinCodesProposal(t *testing.T) { } // and proposal execute - handler := govKeeper.LegacyRouter().GetRoute(proposal.ProposalRoute()) - err = handler(ctx, &proposal) + handler := govKeeper.LegacyRouter().GetRoute(prop.ProposalRoute()) + err = handler(ctx, &prop) require.NoError(t, err) // then From 9fd778ed777258e57cb755df1f56fd05a15c0117 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Thu, 25 Aug 2022 20:03:55 +0700 Subject: [PATCH 058/120] bump ica --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 0f0a216ba2..77230162b8 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/cosmos/cosmos-sdk v0.46.1 github.com/cosmos/iavl v0.19.1 github.com/cosmos/ibc-go/v5 v5.0.0-beta1.0.20220812090728-e1f7e89dc1e2 - github.com/cosmos/interchain-accounts v0.3.1-0.20220812171121-8d8742554e53 + github.com/cosmos/interchain-accounts v0.3.2 github.com/dvsekhvalnov/jose2go v1.5.0 github.com/gogo/protobuf v1.3.3 github.com/golang/protobuf v1.5.2 diff --git a/go.sum b/go.sum index 48a32c1723..3d7c088b44 100644 --- a/go.sum +++ b/go.sum @@ -236,8 +236,8 @@ github.com/cosmos/iavl v0.19.1 h1:3gaq9b6SjiB0KBTygRnAvEGml2pQlu1TH8uma5g63Ys= github.com/cosmos/iavl v0.19.1/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= github.com/cosmos/ibc-go/v5 v5.0.0-beta1.0.20220812090728-e1f7e89dc1e2 h1:M4YCxRSZf9O8ukpfqUsMmymYEXRe4S1LoW//DLQV2f8= github.com/cosmos/ibc-go/v5 v5.0.0-beta1.0.20220812090728-e1f7e89dc1e2/go.mod h1:gSeljfcWlUKjKhTptUpqz83zYpGE+/Q+HJwmDPq5pJs= -github.com/cosmos/interchain-accounts v0.3.1-0.20220812171121-8d8742554e53 h1:MyHNf7gUIcjHEEela8dZF+AVOKF628SDrdlzgrC0c0k= -github.com/cosmos/interchain-accounts v0.3.1-0.20220812171121-8d8742554e53/go.mod h1:vNWr9YxBrI5c74jBwk9ooiUCIDvdOJeF8MQEA/z0IEk= +github.com/cosmos/interchain-accounts v0.3.2 h1:7S5rSndahpjkzUvG00kKZrTZsEuVHuVC9a7p0qDVcF8= +github.com/cosmos/interchain-accounts v0.3.2/go.mod h1:vNWr9YxBrI5c74jBwk9ooiUCIDvdOJeF8MQEA/z0IEk= github.com/cosmos/keyring v1.1.7-0.20210622111912-ef00f8ac3d76 h1:DdzS1m6o/pCqeZ8VOAit/gyATedRgjvkVI+UCrLpyuU= github.com/cosmos/keyring v1.1.7-0.20210622111912-ef00f8ac3d76/go.mod h1:0mkLWIoZuQ7uBoospo5Q9zIpqq6rYCPJDSUdeCJvPM8= github.com/cosmos/ledger-cosmos-go v0.11.1 h1:9JIYsGnXP613pb2vPjFeMMjBI5lEDsEaF6oYorTy6J4= From 6bb783a13332581d8f516dedb17092263cae79d7 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Thu, 25 Aug 2022 20:18:35 +0700 Subject: [PATCH 059/120] fix proposal integration test: line 178 shoud be require.Error --- x/wasm/keeper/proposal_integration_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/wasm/keeper/proposal_integration_test.go b/x/wasm/keeper/proposal_integration_test.go index 0b9bbc8378..209ccbc355 100644 --- a/x/wasm/keeper/proposal_integration_test.go +++ b/x/wasm/keeper/proposal_integration_test.go @@ -175,7 +175,7 @@ func TestInstantiateProposal_NoAdmin(t *testing.T) { // when stored _, err = govKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, "testing 123") - require.NoError(t, err) + require.Error(t, err) // and proposal execute handler := govKeeper.LegacyRouter().GetRoute(src.ProposalRoute()) From a35420842ed7a0d5cd5caff129f7253bf9977bf8 Mon Sep 17 00:00:00 2001 From: faddat Date: Thu, 25 Aug 2022 21:55:27 +0000 Subject: [PATCH 060/120] sdk v0.45.8 --- go.mod | 18 +- go.sum | 827 ++------------------------------------------------------- 2 files changed, 39 insertions(+), 806 deletions(-) diff --git a/go.mod b/go.mod index 7fd3399cf6..bbeeeefca6 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.18 require ( github.com/CosmWasm/wasmvm v1.0.0 - github.com/cosmos/cosmos-sdk v0.45.7 + github.com/cosmos/cosmos-sdk v0.45.8 github.com/cosmos/iavl v0.19.1 github.com/cosmos/ibc-go/v3 v3.0.0 github.com/cosmos/interchain-accounts v0.1.0 @@ -25,9 +25,9 @@ require ( github.com/spf13/viper v1.12.0 github.com/stretchr/testify v1.8.0 github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca - github.com/tendermint/tendermint v0.34.20 + github.com/tendermint/tendermint v0.34.21 github.com/tendermint/tm-db v0.6.7 - google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd + google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b google.golang.org/grpc v1.48.0 gopkg.in/yaml.v2 v2.4.0 ) @@ -51,6 +51,7 @@ require ( github.com/cosmos/gorocksdb v1.2.0 // indirect github.com/cosmos/ledger-cosmos-go v0.11.1 // indirect github.com/cosmos/ledger-go v0.9.2 // indirect + github.com/creachadair/taskgroup v0.3.2 // indirect github.com/danieljoos/wincred v1.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect @@ -82,13 +83,13 @@ require ( github.com/inconshreveable/mousetrap v1.0.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d // indirect - github.com/klauspost/compress v1.15.1 // indirect + github.com/klauspost/compress v1.15.9 // indirect github.com/lib/pq v1.10.6 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/magiconair/properties v1.8.6 // indirect github.com/mattn/go-colorable v0.1.12 // indirect github.com/mattn/go-isatty v0.0.14 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 // indirect github.com/minio/highwayhash v1.0.2 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect @@ -113,9 +114,10 @@ require ( github.com/zondax/hid v0.9.0 // indirect go.etcd.io/bbolt v1.3.6 // indirect golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect - golang.org/x/net v0.0.0-20220617184016-355a448f1bc9 // indirect - golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c // indirect - golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 // indirect + golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect + golang.org/x/net v0.0.0-20220726230323-06994584191e // indirect + golang.org/x/sys v0.0.0-20220727055044-e65921a090b8 // indirect + golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 // indirect golang.org/x/text v0.3.7 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/ini.v1 v1.66.6 // indirect diff --git a/go.sum b/go.sum index 5098b6cd0b..2b287c95b0 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,3 @@ -4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= -bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= @@ -13,66 +11,36 @@ cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6 cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -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.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM= -cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= -cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= -cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= -cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= -cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w= -cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.0.0-beta.2 h1:/BZRNzm8N4K4eWfK28dL4yescorxtO7YG1yun8fy+pI= filippo.io/edwards25519 v1.0.0-beta.2/go.mod h1:X+pm78QAUPtFLi1z9PYIlS/bdDnvbCOGKtZ+ACWEf7o= -github.com/Antonboom/errname v0.1.6/go.mod h1:7lz79JAnuoMNDAWE9MeeIr1/c/VpSUWatBv2FH9NYpI= -github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= -github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0= -github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8= github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= @@ -84,35 +52,20 @@ github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= github.com/CosmWasm/wasmvm v1.0.0 h1:NRmnHe3xXsKn2uEcB1F5Ha323JVAhON+BI6L177dlKc= github.com/CosmWasm/wasmvm v1.0.0/go.mod h1:ei0xpvomwSdONsxDuONzV7bL1jSET1M8brEx0FCXc+A= -github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= -github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= -github.com/GaijinEntertainment/go-exhaustruct/v2 v2.1.0/go.mod h1:LGOGuvEgCfCQsy3JF2tRmpGDpzA53iZfyGEWSPwQ6/4= -github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= -github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= -github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= -github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OpenPeeDeeP/depguard v1.1.0/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= @@ -123,61 +76,35 @@ github.com/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSa github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1:eSYp2T6f0apnuW8TzhV3f6Aff2SE8Dwio++U4ha4yEM= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= -github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= -github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= -github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-metrics v0.4.0 h1:yCQqn7dwca4ITXb+CbubHmedzaQYHhNhrEXLYUeEe8Q= github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= -github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= -github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= -github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= -github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= -github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= -github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= -github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= @@ -186,14 +113,12 @@ github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MR github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= @@ -201,62 +126,41 @@ github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/bufbuild/buf v1.4.0/go.mod h1:mwHG7klTHnX+rM/ym8LXGl7vYpVmnwT96xWoRB4H5QI= -github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= 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/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= -github.com/chavacava/garif v0.0.0-20220316182200-5cad0b5181d4/go.mod h1:W8EnPSQ8Nv4fUjc/v1/8tHFqhuOJXnRub0dTfuAQktU= -github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= 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/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -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= -github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= 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 v0.7.0 h1:lmTO/JEpCvZgpbkOITL95rA80CPKb5CtMzLaqF2mCNg= github.com/coinbase/rosetta-sdk-go v0.7.0/go.mod h1:7nD3oBPIiHqhRprqvMgPoGxe/nyq3yftRmpsy29coWE= github.com/confio/ics23/go v0.7.0 h1:00d2kukk7sPoHWL4zZBZwzxnpA2pec1NPdwbSokJ5w8= github.com/confio/ics23/go v0.7.0/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= -github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= -github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190620071333-e64a0ec8b42a/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/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/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.4 h1:n7C2ngKXo7UC9gNyMNLbzqz7Asuf+7Qv4gnX/rOdQ44= github.com/cosmos/btcutil v1.0.4/go.mod h1:Ffqc8Hn6TJUdDgHBwIZLtrLQC1KdJ9jGJl/TvgUaxbU= -github.com/cosmos/cosmos-sdk v0.45.7 h1:5H9Ov04WIGoQAMJDdcSD4Vp5Lz6I17voHySH+vjJFCc= -github.com/cosmos/cosmos-sdk v0.45.7/go.mod h1:l8DURPoMMkIEe/Gw59g9KIMDjlYyTsKOWdc3iSSBXvw= +github.com/cosmos/cosmos-sdk v0.45.8 h1:UHO5LTkOYLK1pvu9WELCxnp8zw/YcjoNGqqcYiLQ4pE= +github.com/cosmos/cosmos-sdk v0.45.8/go.mod h1:+OKZMhLj+Y6LCzCDsyIvpul/xk7n9lVUn8sikLWD0Jo= 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= @@ -276,25 +180,18 @@ github.com/cosmos/ledger-go v0.9.2 h1:Nnao/dLwaVTk1Q5U9THldpUMMXU94BOTWPddSmVB6p github.com/cosmos/ledger-go v0.9.2/go.mod h1:oZJ2hHAZROdlHiwTg4t7kP+GKIIkBT+o6c9QWFanOyI= 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.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= 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/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= -github.com/daixiang0/gci v0.3.3/go.mod h1:1Xr2bxnQbDxCqqulUOv8qpGqkgRw9RSCGGjEC2LjF8o= github.com/danieljoos/wincred v1.0.2 h1:zf4bhty2iLuwgjgpraD2E9UbvO+fe54XXGJbOwe23fU= github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= -github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= -github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= -github.com/denisenkom/go-mssqldb v0.12.0/go.mod h1:iiK0YP1ZeepvmBQk/QpLEhhTNJgfzrpArPY/aFvc9yU= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= github.com/dgraph-io/badger/v2 v2.2007.2 h1:EjjK0KqwaFMlPin1ajhP943VPENHJdEz1KLIegjaI3k= @@ -308,16 +205,9 @@ 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/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/docker/cli v20.10.14+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.17+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/dop251/goja v0.0.0-20200721192441-a695b0cdd498/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= 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= @@ -331,54 +221,31 @@ github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFP github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= -github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= -github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= github.com/ethereum/go-ethereum v1.9.25/go.mod h1:vMkFiYLHI4tgPw4k2j4MHKoovchFE8plZ0M9VMk4/oM= -github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= -github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= -github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/firefart/nonamedreturns v1.0.1/go.mod h1:D3dpIBojGGNh5UfElmwPu73SwDCm+VKhHYqwlNOk2uQ= github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= -github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= -github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= -github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= -github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= -github.com/fzipp/gocyclo v0.5.1/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/ghodss/yaml v1.0.0/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.7.0 h1:jGB9xAJQ12AIGNB4HguylppmDK1Am9ppF7XnGXXJuoU= github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= -github.com/go-critic/go-critic v0.6.3/go.mod h1:c6b3ZP1MQ7o6lPR7Rv3lEf7pYQUmAcx8ABHgdZCQt/k= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -397,7 +264,6 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG 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-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= @@ -405,25 +271,9 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87 github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= -github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= -github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= -github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= -github.com/go-toolsmith/astequal v1.0.1/go.mod h1:4oGA3EZXTVItV/ipGiOx7NWkY5veFfcsOJVS2YxltLw= -github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= -github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= -github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5/go.mod h1:3NAwwmD4uY/yggRxoEjk/S00MIV3A+H7rrE3i87eYxM= -github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= -github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= -github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= -github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= -github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= @@ -433,31 +283,20 @@ github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/E github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= -github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= -github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188/go.mod h1:vXjM/+wXQnTPR4KqTKDgJukSZ6amVRtWMPEjE6sQoK8= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= 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= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= 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.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -474,7 +313,6 @@ 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.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -482,21 +320,9 @@ github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= -github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= -github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= -github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= -github.com/golangci/golangci-lint v1.46.2/go.mod h1:3DkdHnxn9eoTTrpT2gB0TEv8KSziuoqe9FitgQLHvAY= -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= -github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= -github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= -github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= -github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -505,13 +331,9 @@ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 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 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -520,7 +342,6 @@ github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/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= @@ -529,38 +350,18 @@ github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw= -github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= -github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= -github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= -github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= -github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= @@ -573,21 +374,7 @@ github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qH github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= -github.com/gostaticanalysis/analysisutil v0.4.1/go.mod h1:18U/DLpRgIUd459wGxVHE0fRgmo1UgHDcbw7F5idXu0= -github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= -github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= -github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= -github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= -github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= -github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= -github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= -github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= -github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= -github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= @@ -595,7 +382,6 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= @@ -606,37 +392,23 @@ github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/b github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= -github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= -github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= 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.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.4.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -646,65 +418,32 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= -github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= -github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= -github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87 h1:uUjLpLt6bVvZ72SQc/B4dXcPBw4Vgd7soowdRl52qEM= github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87/go.mod h1:XGsKKeXxeRr95aEOgipvluMPlgjr7dGlk9ZTWOjcUcg= -github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= -github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= -github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/improbable-eng/grpc-web v0.14.1 h1:NrN4PY71A6tAz2sKDvC5JCauENWp0ykG8Oq1H3cpFvw= github.com/improbable-eng/grpc-web v0.14.1/go.mod h1:zEjGHa8DAlkoOXmswrNvhUGEYQA9UI7DhrGeHR1DMGU= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= -github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= -github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= -github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= -github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f/go.mod h1:qr2b5kx4HbFS7/g4uYO5qv9ei8303JMsC7ESbYiqr2Q= -github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= -github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= -github.com/jhump/protoreflect v1.12.1-0.20220417024638-438db461d753 h1:uFlcJKZPLQd7rmOY/RrvBuUaYmAFnlFHKLivhO6cOy8= -github.com/jhump/protoreflect v1.12.1-0.20220417024638-438db461d753/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= -github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= -github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= +github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b h1:izTof8BKh/nE1wrKOrloNA5q4odOarjf+Xpe+4qow98= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= -github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= -github.com/josharian/txtarfs v0.0.0-20210218200122-0702f000015a/go.mod h1:izVPOvVRsHiKkeGCT6tYBNWyDVuzj9wAaBb5R9qamfw= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -718,57 +457,32 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= -github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d h1:Z+RDyXzjKE0i2sTjZ/b1uxiGtPhFy34Ou/Tk0qwN0kM= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/errcheck v1.6.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.1 h1:y9FcTHGyrebwfP0ZZqFiaxTaiDnUrGkJkI+f583BL1A= -github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY= +github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kulti/thelper v0.6.2/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= -github.com/kunwardeep/paralleltest v1.0.3/go.mod h1:vLydzomDFpk7yu5UX02RmP0H8QfRPOV/oFhWN85Mjb4= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= -github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= -github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= -github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= -github.com/lib/pq v0.0.0-20180327071824-d34b9ff171c2/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs= github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= @@ -776,22 +490,12 @@ github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QT github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= -github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= -github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= -github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= -github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= @@ -799,58 +503,31 @@ github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HN 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.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= -github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= -github.com/mgechev/revive v1.2.1/go.mod h1:+Ro3wqY4vakcYNtkBWdZC7dBg1xSB6sp054wWwmeFm0= +github.com/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/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= -github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= -github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 h1:hLDRPB66XQT/8+wG9WsDpiCvZf1yKO7sz7scAjSlBa0= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= 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.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= -github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= -github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -858,146 +535,81 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= -github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= -github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= -github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= -github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= -github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= -github.com/mwitkow/go-proto-validators v0.2.0/go.mod h1:ZfA1hW+UH/2ZHOWvQ3HnQaU0DtnpXu850MZiy+YUgcc= github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= -github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/jwt v1.2.2/go.mod h1:/xX356yQA6LuXI9xWW7mZNpxgF2mBmGecH+Fj34sP5Q= -github.com/nats-io/jwt/v2 v2.0.3/go.mod h1:VRP+deawSXyhNjXmxPCHskrR6Mq50BqpEI5SEcNiGlY= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats-server/v2 v2.5.0/go.mod h1:Kj86UtrXAL6LwYRA6H4RqzkHhK0Vcv2ZnKD5WbQ1t3g= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nats.go v1.12.1/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= -github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= github.com/neilotoole/errgroup v0.1.5/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nishanths/exhaustive v0.7.11/go.mod h1:gX+MP7DWMKJmNa1HfMozK+u04hQd3na9i0hyqf3/dOI= -github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= -github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= +github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/oklog/ulid/v2 v2.0.2/go.mod h1:mtBL0Qe/0HAx6/a4Z30qxVIAL1eQDweXq5lxOEiwQ68= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= -github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= -github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= -github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= -github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/runc v1.1.2/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= +github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 h1:rc3tiVYb5z54aKaDfakKn0dDjIyPpTtszkjuMzyt7ec= github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= -github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= -github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= -github.com/ory/dockertest/v3 v3.9.1/go.mod h1:42Ir9hmvaAPm0Mgibk6mBPi7SFvTXxEcnztDYOJ//uM= -github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= github.com/otiai10/copy v1.6.0 h1:IinKAryFFuPONZ7cm6T6E2QX/vcJwSnlaA5lfoaXIiQ= -github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= -github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= -github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= -github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.0-beta.8/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= -github.com/pelletier/go-toml/v2 v2.0.0/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= -github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= github.com/pelletier/go-toml/v2 v2.0.2 h1:+jQXlF3scKIcSEKkdHzXhCTDLPFi5r1wnK6yPS+49Gw= github.com/pelletier/go-toml/v2 v2.0.2/go.mod h1:MovirKjgVRESsAvNZlAjtFwV867yGuwRkXbG66OzopI= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= -github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/polyfloyd/go-errorlint v1.0.0/go.mod h1:KZy4xxPJyy88/gldCe5OdW6OQRtNO3EZE7hXzmnebgA= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= @@ -1005,9 +617,7 @@ github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeD 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.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.13.0 h1:b71QUfeo5M8gq2+evJdTPfZhYMAU0uKPkyPJ7TPsloU= github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -1025,9 +635,7 @@ github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8b 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.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.34.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -1041,18 +649,6 @@ github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1 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/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= -github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= -github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= -github.com/quasilyte/go-ruleguard v0.3.16-0.20220213074421-6aa060fab41a/go.mod h1:VMX+OnnSw4LicdiEGtRSD/1X8kW7GuEscjYNr4cOIT4= -github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/dsl v0.3.16/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/dsl v0.3.19/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= -github.com/quasilyte/gogrep v0.0.0-20220120141003-628d8b3623b5/go.mod h1:wSEyW6O61xRV6zb6My3HxrQ5/8ke7NE2OayqCHa3xRM= -github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= -github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -1062,16 +658,11 @@ github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzy github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= -github.com/remyoudompheng/go-dbus v0.0.0-20121104212943-b7232d34b1d5/go.mod h1:+u151txRmLpwxBmpYn9z3d1sdJdjRPQpsXuYeY9jNls= -github.com/remyoudompheng/go-liblzma v0.0.0-20190506200333-81bf2d431b96/go.mod h1:90HvCY7+oHHUKkbeMCiHt1WuFR2/hPJ9QrljDG+v6ls= -github.com/remyoudompheng/go-misc v0.0.0-20190427085024-2d6ac652a50e/go.mod h1:80FQABjoFzZ2M5uEa6FUaJYEmqU2UOKojlFVak1UAwI= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= -github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= +github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= @@ -1083,60 +674,36 @@ github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Q github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryancurrah/gomodguard v1.2.3/go.mod h1:rYbA/4Tg5c54mV1sv4sQTP5WOPBcoLtnBZ7/TEhXAbg= -github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= -github.com/sagikazarmark/crypt v0.5.0/go.mod h1:l+nzl7KWh51rpzp2h7t4MZWyiEWdhNpOAnclKvg+mdA= -github.com/sagikazarmark/crypt v0.6.0/go.mod h1:U8+INwJo3nBv1m6A/8OBXAq7Jnpspk5AxSgDyEQcea8= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa h1:0U2s5loxrTy6/VgfVoLuVLFJcURKLH49ie0zSch7gh4= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= -github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= -github.com/securego/gosec/v2 v2.11.0/go.mod h1:SX8bptShuG8reGC0XS09+a4H2BoWSJi+fscA+Pulbpo= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shirou/gopsutil/v3 v3.22.4/go.mod h1:D01hZJ4pVHPpCTZ3m3T2+wDF2YAGfd+H4ifUguaQzHM= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= -github.com/sivchari/tenv v1.5.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa h1:YJfZp12Z3AFhSBeXOlv4BO55RMwPn2NoQeDsrdWnBtY= github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo= github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= -github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= github.com/spf13/cobra v1.5.0 h1:X+jTBEBqF0bHN+9cSMgmfuvv2VHJ9ezmFNf9Y/XstYU= github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= @@ -1147,27 +714,19 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= -github.com/spf13/viper v1.11.0/go.mod h1:djo0X/bA5+tYVoCn+C7cAYJGcVn/qYLFTG8gdUsX7Zk= github.com/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ= github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= -github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= -github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -1178,44 +737,26 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= github.com/subosito/gotenv v1.4.0 h1:yAzM1+SmVcz5R4tXGsNMu1jUl2aOJXoiWUCEwwnGrvs= github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo= -github.com/sylvia7788/contextcheck v1.0.4/go.mod h1:vuPKJMQ7MQ91ZTqfdyreNKwZjyUg6KO+IebVyQDedZQ= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca h1:Ld/zXl5t4+D69SiV4JoN7kkfvJdOWlPpfxrzxpLMoUk= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= -github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s= github.com/tendermint/btcd v0.1.1/go.mod h1:DC6/m53jtQzr/NFmMNEu0rxf18/ktVoVtMrnDD5pN+U= github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RMWx1aInLzndwxKalgi5rTqgfXxOxbEI= github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/tendermint/tendermint v0.34.20 h1:/pmvJhO3IqOxhbi8iRXudTjA2YKpaMqrLwFNkyxDSzw= -github.com/tendermint/tendermint v0.34.20/go.mod h1:KtOwCLYJcsS1ymtAfnjjAtXfXClbqcqjdqzFt2Em1Ac= -github.com/tendermint/tm-db v0.6.6/go.mod h1:wP8d49A85B7/erz/r4YbKssKw6ylsO/hKtFk7E1aWZI= +github.com/tendermint/tendermint v0.34.21 h1:UiGGnBFHVrZhoQVQ7EfwSOLuCtarqCSsRf8VrklqB7s= +github.com/tendermint/tendermint v0.34.21/go.mod h1:XDvfg6U7grcFTDx7VkzxnhazQ/bspGJAn4DZ6DcLLjQ= 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/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= -github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= -github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= github.com/tidwall/gjson v1.6.7/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI= github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/sjson v1.1.4/go.mod h1:wXpKXu8CtDjKAZ+3DrKY5ROCorDFahq8l0tey/Lx1fg= -github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= -github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= -github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tomarrell/wrapcheck/v2 v2.6.1/go.mod h1:Eo+Opt6pyMW1b6cNllOcDSSoHO0aTJ+iF6BfCUbHltA= -github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= -github.com/tommy-muehle/go-mnd/v2 v2.5.0/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= @@ -1225,67 +766,24 @@ github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVM github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= -github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/uudashr/gocognit v1.0.5/go.mod h1:wgYz0mitoKOTysqxTDMOUXg+Jb5SvtihkfmugIZYpEA= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus= -github.com/valyala/quicktemplate v1.7.0/go.mod h1:sqKJnoaOF88V07vkO+9FL8fb9uZg/VPSJnLYn+LmLk8= -github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= -github.com/vektra/mockery/v2 v2.14.0/go.mod h1:bnD1T8tExSgPD1ripLkDbr60JA9VtQeu12P3wgLZd7M= -github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= -github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= -github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/vmihailenco/msgpack/v5 v5.1.4/go.mod h1:C5gboKD0TJPqWDTVTtrQNfRbiBwHZGo8UTqP/9/XvLI= github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE= -github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/zondax/hid v0.9.0 h1:eiT3P6vNxAEVxXMw66eZUAAnU2zD33JBkfG/EnfAKl8= github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -gitlab.com/bosi/decorder v0.2.1/go.mod h1:6C/nhLSbF6qZbYD8bRmISBwc6vcWdNsiIBkRvjJFrH0= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= -go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/api/v3 v3.5.2/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= -go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= -go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.2/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= -go.etcd.io/etcd/client/v2 v2.305.2/go.mod h1:2D7ZejHVMIfog1221iLSYlQRzrtECw3kz4I4VAQm3qI= -go.etcd.io/etcd/client/v2 v2.305.4/go.mod h1:Ud+VUwIi9/uQHOMA+4ekToJ12lTxlv0zB/+DHwTGEbU= -go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= -go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= -go.mozilla.org/mozlog v0.0.0-20170222151521-4bb13139d403/go.mod h1:jHoPAGnDrCy6kaI2tAze5Prf0Nr0w/oNkROt2lw3n3o= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -1294,29 +792,15 @@ 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.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1325,35 +809,19 @@ golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8U 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-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 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-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220313003712-b769efc7c000/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= @@ -1365,8 +833,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/typeparams v0.0.0-20220218215828-6cf2b201936e/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= +golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= 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-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -1379,7 +847,6 @@ 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/mobile v0.0.0-20200801112145-973feb4309de/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4= @@ -1392,11 +859,6 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1418,8 +880,6 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1440,33 +900,15 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220617184016-355a448f1bc9 h1:Yqz/iviulwKwAREEeUd3nbBFn0XuyJqkoft2IlrvOhc= -golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220726230323-06994584191e h1:wOQNKh1uuDGRnmgF0jDxh7ctgGy/3P4rYWQRVJD4/Yg= +golang.org/x/net v0.0.0-20220726230323-06994584191e/go.mod h1:AaygXjzTFtRAg2ttMY5RMuhpJ3cNnI0XpyFJD1iQRSM= 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= @@ -1476,30 +918,18 @@ 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-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1510,28 +940,21 @@ golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1540,7 +963,6 @@ golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1558,76 +980,33 @@ golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211213223007-03aa0b5f6827/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220405210540-1e041c57c461/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c h1:aFV+BgZ4svzjfabn8ERpuB4JI4N6/rdy1iusx77G3oU= -golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/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.0.0-20220727055044-e65921a090b8 h1:dyU22nBWzrmTQxtNrr4dzVOvaw35nUYE279vF9UmsI8= +golang.org/x/sys v0.0.0-20220727055044-e65921a090b8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20220411215600-e5f449aeb171/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 h1:CBpWXWQpIRjzmkkA+M7q9Fqnwd2mZr3AFqexg8YTfoM= -golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 h1:Q5284mrmYTpACcm+eAKjKJH48BBwSyfJqmmGDTtT8Vc= +golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1642,50 +1021,33 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190228203856-589c23e65e65/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1695,75 +1057,34 @@ golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= -golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= -golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.9-0.20211228192929-ee1ca4ffc4da/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= -golang.org/x/tools v0.1.11-0.20220316014157-77aa08bb151a/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= -golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df h1:5Pf6pFKu98ODmgnpvkJ3kFUOQGGLIzLIkbzUHp47618= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -1779,39 +1100,15 @@ 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.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.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= -google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw= -google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= -google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= -google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= -google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= -google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= -google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= -google.golang.org/api v0.81.0/go.mod h1:FA6Mb/bZxj706H2j+j2d6mHEEaHBmbbWnkfvmorOCko= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181107211654-5fc9ac540362/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1820,7 +1117,6 @@ google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dT google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= @@ -1842,8 +1138,6 @@ google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1854,55 +1148,11 @@ 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-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-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd h1:e0TwkXOdbnH/1x5rc5MZ/VYyiZ4v+RdVfrGMqEwT68I= -google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b h1:SfSkJugek6xm7lWywqth4r2iTrYLpD8lOj1nMIIhMNM= +google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -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= @@ -1915,25 +1165,17 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U= -gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI= gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= @@ -1949,19 +1191,15 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.6/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= -gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1969,17 +1207,10 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.3.1/go.mod h1:vlRD9XErLMGT+mDuofSr0mMMquscM/1nQqtRSsh6m70= -mvdan.cc/gofumpt v0.3.1/go.mod h1:w3ymliuxvzVx8DAutBnVyDqYb1Niy/yCJt/lk821YCE= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= -mvdan.cc/unparam v0.0.0-20211214103731-d0ef000c54e5/go.mod h1:b8RRCBm0eeiWR8cfN88xeq2G5SG3VKGO+5UPWi5FSOY= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= From b574fa98b0c32feb5451b6e14acdeea09edcebcb Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Fri, 26 Aug 2022 04:58:23 +0700 Subject: [PATCH 061/120] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cbba596eda..a735308f23 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## [Unreleased](https://github.com/CosmWasm/wasmd/tree/HEAD) - Upgrade go to v1.18 [\#866]https://github.com/CosmWasm/wasmd/pull/866/) ([faddat](https://github.com/faddat)) +- Upgrade to cosmos-sdk v0.45.8 [\#964](https://github.com/CosmWasm/wasmd/pull/964/) ([faddat](https://github.com/faddat)) From 34c4df16b8be311109688de7dd189ef9f574cd9d Mon Sep 17 00:00:00 2001 From: faddat Date: Tue, 30 Aug 2022 06:40:49 +0000 Subject: [PATCH 062/120] ibc 5-rc1 --- go.mod | 4 ++-- go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 77230162b8..ebd120d2a2 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/CosmWasm/wasmvm v1.0.0 github.com/cosmos/cosmos-sdk v0.46.1 github.com/cosmos/iavl v0.19.1 - github.com/cosmos/ibc-go/v5 v5.0.0-beta1.0.20220812090728-e1f7e89dc1e2 + github.com/cosmos/ibc-go/v5 v5.0.0-rc1 github.com/cosmos/interchain-accounts v0.3.2 github.com/dvsekhvalnov/jose2go v1.5.0 github.com/gogo/protobuf v1.3.3 @@ -30,7 +30,7 @@ require ( github.com/tendermint/tendermint v0.34.21 github.com/tendermint/tm-db v0.6.7 google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b - google.golang.org/grpc v1.48.0 + google.golang.org/grpc v1.49.0 gopkg.in/yaml.v2 v2.4.0 ) diff --git a/go.sum b/go.sum index 3d7c088b44..828a21f44c 100644 --- a/go.sum +++ b/go.sum @@ -234,8 +234,8 @@ github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4 github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= github.com/cosmos/iavl v0.19.1 h1:3gaq9b6SjiB0KBTygRnAvEGml2pQlu1TH8uma5g63Ys= github.com/cosmos/iavl v0.19.1/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= -github.com/cosmos/ibc-go/v5 v5.0.0-beta1.0.20220812090728-e1f7e89dc1e2 h1:M4YCxRSZf9O8ukpfqUsMmymYEXRe4S1LoW//DLQV2f8= -github.com/cosmos/ibc-go/v5 v5.0.0-beta1.0.20220812090728-e1f7e89dc1e2/go.mod h1:gSeljfcWlUKjKhTptUpqz83zYpGE+/Q+HJwmDPq5pJs= +github.com/cosmos/ibc-go/v5 v5.0.0-rc1 h1:9cgpYmHh2jodB/t3LwB/pYA2sG9rdKB9cmXP0D5M0Fs= +github.com/cosmos/ibc-go/v5 v5.0.0-rc1/go.mod h1:Wqsguq98Iuns8tgTv8+xaGYbC+Q8zJfbpjzT6IgMJbs= github.com/cosmos/interchain-accounts v0.3.2 h1:7S5rSndahpjkzUvG00kKZrTZsEuVHuVC9a7p0qDVcF8= github.com/cosmos/interchain-accounts v0.3.2/go.mod h1:vNWr9YxBrI5c74jBwk9ooiUCIDvdOJeF8MQEA/z0IEk= github.com/cosmos/keyring v1.1.7-0.20210622111912-ef00f8ac3d76 h1:DdzS1m6o/pCqeZ8VOAit/gyATedRgjvkVI+UCrLpyuU= @@ -1536,8 +1536,8 @@ google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ5 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.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w= -google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.49.0 h1:WTLtQzmQori5FUH25Pq4WT22oCsv8USpQ+F6rqtsmxw= +google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= 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= From e714fdf3b44a93462232648ab670ff611c381ce1 Mon Sep 17 00:00:00 2001 From: Alexander Peters Date: Wed, 31 Aug 2022 16:17:03 +0200 Subject: [PATCH 063/120] Charge gas to unzip wasm code (#898) * Charge gas for unzip wasm code * Add uncompress test * Apply review feedback * Add testcase to uncompress spec --- app/test_helpers.go | 2 +- x/wasm/ioutils/ioutil.go | 14 +++----- x/wasm/ioutils/ioutil_test.go | 21 ------------ x/wasm/ioutils/utils.go | 2 +- x/wasm/ioutils/utils_test.go | 2 ++ x/wasm/keeper/gas_register.go | 25 ++++++++++++++ x/wasm/keeper/gas_register_test.go | 40 ++++++++++++++++++++++ x/wasm/keeper/keeper.go | 20 +++++++---- x/wasm/keeper/keeper_test.go | 17 +++++++++ x/wasm/keeper/snapshotter.go | 3 ++ x/wasm/keeper/testdata/broken_crc.gzip | Bin 0 -> 809232 bytes x/wasm/keeper/wasmtesting/gas_register.go | 8 +++++ 12 files changed, 114 insertions(+), 40 deletions(-) create mode 100644 x/wasm/keeper/testdata/broken_crc.gzip diff --git a/app/test_helpers.go b/app/test_helpers.go index 5aec561089..ccf49656a6 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -284,7 +284,7 @@ func CheckBalance(t *testing.T, app *WasmApp, addr sdk.AccAddress, balances sdk. require.True(t, balances.IsEqual(app.BankKeeper.GetAllBalances(ctxCheck, addr))) } -const DefaultGas = 1200000 +const DefaultGas = 1_500_000 // SignCheckDeliver checks a generated signed transaction and simulates a // block commitment with the given transaction. A test assertion is made using diff --git a/x/wasm/ioutils/ioutil.go b/x/wasm/ioutils/ioutil.go index 5740132342..a34a43e9ea 100644 --- a/x/wasm/ioutils/ioutil.go +++ b/x/wasm/ioutils/ioutil.go @@ -8,18 +8,12 @@ import ( "github.com/CosmWasm/wasmd/x/wasm/types" ) -// Uncompress returns gzip uncompressed content if input was gzip, or original src otherwise -func Uncompress(src []byte, limit uint64) ([]byte, error) { - switch n := uint64(len(src)); { - case n < 3: - return src, nil - case n > limit: +// Uncompress expects a valid gzip source to unpack or fails. See IsGzip +func Uncompress(gzipSrc []byte, limit uint64) ([]byte, error) { + if uint64(len(gzipSrc)) > limit { return nil, types.ErrLimit } - if !bytes.Equal(gzipIdent, src[0:3]) { - return src, nil - } - zr, err := gzip.NewReader(bytes.NewReader(src)) + zr, err := gzip.NewReader(bytes.NewReader(gzipSrc)) if err != nil { return nil, err } diff --git a/x/wasm/ioutils/ioutil_test.go b/x/wasm/ioutils/ioutil_test.go index 93a478ae00..3399abf293 100644 --- a/x/wasm/ioutils/ioutil_test.go +++ b/x/wasm/ioutils/ioutil_test.go @@ -6,7 +6,6 @@ import ( "errors" "io" "os" - "strings" "testing" "github.com/stretchr/testify/assert" @@ -29,30 +28,10 @@ func TestUncompress(t *testing.T) { expError error expResult []byte }{ - "handle wasm uncompressed": { - src: wasmRaw, - expResult: wasmRaw, - }, "handle wasm compressed": { src: wasmGzipped, expResult: wasmRaw, }, - "handle nil slice": { - src: nil, - expResult: nil, - }, - "handle short unidentified": { - src: []byte{0x1, 0x2}, - expResult: []byte{0x1, 0x2}, - }, - "handle input slice exceeding limit": { - src: []byte(strings.Repeat("a", maxSize+1)), - expError: types.ErrLimit, - }, - "handle input slice at limit": { - src: []byte(strings.Repeat("a", maxSize)), - expResult: []byte(strings.Repeat("a", maxSize)), - }, "handle gzip identifier only": { src: gzipIdent, expError: io.ErrUnexpectedEOF, diff --git a/x/wasm/ioutils/utils.go b/x/wasm/ioutils/utils.go index d4b8abf349..197c44c360 100644 --- a/x/wasm/ioutils/utils.go +++ b/x/wasm/ioutils/utils.go @@ -17,7 +17,7 @@ var ( // IsGzip returns checks if the file contents are gzip compressed func IsGzip(input []byte) bool { - return bytes.Equal(input[:3], gzipIdent) + return len(input) >= 3 && bytes.Equal(gzipIdent, input[0:3]) } // IsWasm checks if the file contents are of wasm binary diff --git a/x/wasm/ioutils/utils_test.go b/x/wasm/ioutils/utils_test.go index cd4846f092..2dea0c5c0f 100644 --- a/x/wasm/ioutils/utils_test.go +++ b/x/wasm/ioutils/utils_test.go @@ -41,6 +41,8 @@ func TestIsGzip(t *testing.T) { require.False(t, IsGzip(wasmCode)) require.False(t, IsGzip(someRandomStr)) + require.False(t, IsGzip(nil)) + require.True(t, IsGzip(gzipData[0:3])) require.True(t, IsGzip(gzipData)) } diff --git a/x/wasm/keeper/gas_register.go b/x/wasm/keeper/gas_register.go index c21606344f..51f8e607cc 100644 --- a/x/wasm/keeper/gas_register.go +++ b/x/wasm/keeper/gas_register.go @@ -54,12 +54,26 @@ const ( DefaultEventAttributeDataFreeTier = 100 ) +// default: 0.15 gas. +// see https://github.com/CosmWasm/wasmd/pull/898#discussion_r937727200 +var defaultPerByteUncompressCost = wasmvmtypes.UFraction{ + Numerator: 15, + Denominator: 100, +} + +// DefaultPerByteUncompressCost is how much SDK gas we charge per source byte to unpack +func DefaultPerByteUncompressCost() wasmvmtypes.UFraction { + return defaultPerByteUncompressCost +} + // GasRegister abstract source for gas costs type GasRegister interface { // NewContractInstanceCosts costs to crate a new contract instance from code NewContractInstanceCosts(pinned bool, msgLen int) sdk.Gas // CompileCosts costs to persist and "compile" a new wasm contract CompileCosts(byteLength int) sdk.Gas + // UncompressCosts costs to unpack a new wasm contract + UncompressCosts(byteLength int) sdk.Gas // InstantiateContractCosts costs when interacting with a wasm contract InstantiateContractCosts(pinned bool, msgLen int) sdk.Gas // ReplyCosts costs to to handle a message reply @@ -78,6 +92,8 @@ type WasmGasRegisterConfig struct { InstanceCost sdk.Gas // CompileCosts costs to persist and "compile" a new wasm contract CompileCost sdk.Gas + // UncompressCost costs per byte to unpack a contract + UncompressCost wasmvmtypes.UFraction // GasMultiplier is how many cosmwasm gas points = 1 sdk gas point // SDK reference costs can be found here: https://github.com/cosmos/cosmos-sdk/blob/02c6c9fafd58da88550ab4d7d494724a477c8a68/store/types/gas.go#L153-L164 GasMultiplier sdk.Gas @@ -107,6 +123,7 @@ func DefaultGasRegisterConfig() WasmGasRegisterConfig { EventAttributeDataCost: DefaultEventAttributeDataCost, EventAttributeDataFreeTier: DefaultEventAttributeDataFreeTier, ContractMessageDataCost: DefaultContractMessageDataCost, + UncompressCost: DefaultPerByteUncompressCost(), } } @@ -143,6 +160,14 @@ func (g WasmGasRegister) CompileCosts(byteLength int) storetypes.Gas { return g.c.CompileCost * uint64(byteLength) } +// UncompressCosts costs to unpack a new wasm contract +func (g WasmGasRegister) UncompressCosts(byteLength int) sdk.Gas { + if byteLength < 0 { + panic(sdkerrors.Wrap(types.ErrInvalid, "negative length")) + } + return g.c.UncompressCost.Mul(uint64(byteLength)).Floor() +} + // InstantiateContractCosts costs when interacting with a wasm contract func (g WasmGasRegister) InstantiateContractCosts(pinned bool, msgLen int) sdk.Gas { if msgLen < 0 { diff --git a/x/wasm/keeper/gas_register_test.go b/x/wasm/keeper/gas_register_test.go index bc3e761a26..03f6cdd863 100644 --- a/x/wasm/keeper/gas_register_test.go +++ b/x/wasm/keeper/gas_register_test.go @@ -5,6 +5,8 @@ import ( "strings" "testing" + "github.com/CosmWasm/wasmd/x/wasm/types" + wasmvmtypes "github.com/CosmWasm/wasmvm/types" storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -430,3 +432,41 @@ func TestFromWasmVMGasConversion(t *testing.T) { }) } } + +func TestUncompressCosts(t *testing.T) { + specs := map[string]struct { + lenIn int + exp sdk.Gas + expPanic bool + }{ + "0": { + exp: 0, + }, + "even": { + lenIn: 100, + exp: 15, + }, + "round down when uneven": { + lenIn: 19, + exp: 2, + }, + "max len": { + lenIn: types.MaxWasmSize, + exp: 122880, + }, + "invalid len": { + lenIn: -1, + expPanic: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + if spec.expPanic { + assert.Panics(t, func() { NewDefaultWasmGasRegister().UncompressCosts(spec.lenIn) }) + return + } + got := NewDefaultWasmGasRegister().UncompressCosts(spec.lenIn) + assert.Equal(t, spec.exp, got) + }) + } +} diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index 372cb4e9a5..c5511f3e41 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -178,12 +178,15 @@ func (k Keeper) create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, return 0, sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "instantiate access must be subset of default upload access") } - wasmCode, err = ioutils.Uncompress(wasmCode, uint64(types.MaxWasmSize)) - if err != nil { - return 0, sdkerrors.Wrap(types.ErrCreateFailed, err.Error()) + if ioutils.IsGzip(wasmCode) { + ctx.GasMeter().ConsumeGas(k.gasRegister.UncompressCosts(len(wasmCode)), "Uncompress gzip bytecode") + wasmCode, err = ioutils.Uncompress(wasmCode, uint64(types.MaxWasmSize)) + if err != nil { + return 0, sdkerrors.Wrap(types.ErrCreateFailed, err.Error()) + } } - ctx.GasMeter().ConsumeGas(k.gasRegister.CompileCosts(len(wasmCode)), "Compiling WASM Bytecode") + ctx.GasMeter().ConsumeGas(k.gasRegister.CompileCosts(len(wasmCode)), "Compiling wasm bytecode") checksum, err := k.wasmVM.Create(wasmCode) if err != nil { return 0, sdkerrors.Wrap(types.ErrCreateFailed, err.Error()) @@ -216,9 +219,12 @@ func (k Keeper) storeCodeInfo(ctx sdk.Context, codeID uint64, codeInfo types.Cod } func (k Keeper) importCode(ctx sdk.Context, codeID uint64, codeInfo types.CodeInfo, wasmCode []byte) error { - wasmCode, err := ioutils.Uncompress(wasmCode, uint64(types.MaxWasmSize)) - if err != nil { - return sdkerrors.Wrap(types.ErrCreateFailed, err.Error()) + if ioutils.IsGzip(wasmCode) { + var err error + wasmCode, err = ioutils.Uncompress(wasmCode, uint64(types.MaxWasmSize)) + if err != nil { + return sdkerrors.Wrap(types.ErrCreateFailed, err.Error()) + } } newCodeHash, err := k.wasmVM.Create(wasmCode) if err != nil { diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index ba1ccdc739..ac26f10397 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -360,6 +360,23 @@ func TestCreateWithGzippedPayload(t *testing.T) { require.Equal(t, hackatomWasm, storedCode) } +func TestCreateWithBrokenGzippedPayload(t *testing.T) { + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + keeper := keepers.ContractKeeper + + deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) + creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + + wasmCode, err := os.ReadFile("./testdata/broken_crc.gzip") + require.NoError(t, err, "reading gzipped WASM code") + + gm := sdk.NewInfiniteGasMeter() + contractID, err := keeper.Create(ctx.WithGasMeter(gm), creator, wasmCode, nil) + require.Error(t, err) + assert.Empty(t, contractID) + assert.GreaterOrEqual(t, gm.GasConsumed(), sdk.Gas(121384)) // 809232 * 0.15 (default uncompress costs) = 121384 +} + func TestInstantiate(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures) keeper := keepers.ContractKeeper diff --git a/x/wasm/keeper/snapshotter.go b/x/wasm/keeper/snapshotter.go index a781cb07a3..fcece63714 100644 --- a/x/wasm/keeper/snapshotter.go +++ b/x/wasm/keeper/snapshotter.go @@ -99,6 +99,9 @@ func (ws *WasmSnapshotter) Restore( } func restoreV1(ctx sdk.Context, k *Keeper, compressedCode []byte) error { + if !ioutils.IsGzip(compressedCode) { + return types.ErrInvalid.Wrap("not a gzip") + } wasmCode, err := ioutils.Uncompress(compressedCode, uint64(types.MaxWasmSize)) if err != nil { return sdkerrors.Wrap(types.ErrCreateFailed, err.Error()) diff --git a/x/wasm/keeper/testdata/broken_crc.gzip b/x/wasm/keeper/testdata/broken_crc.gzip new file mode 100644 index 0000000000000000000000000000000000000000..378713e2ff7a88e761305426258d73edfa5f9b4a GIT binary patch literal 809232 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

3m6q@~RYn(?_267q?0SfbxL*hGDn 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

i*cJgVZwQDe=E!#?c?_e>8xFw*1 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 z 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%0A!$FOEGbys&vO3)MGc{&XTA!bJ1lr24G>yP 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

V9Ze!Ps!;R|8K5T$*3av>em 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%0Da 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 D?*{dP literal 0 HcmV?d00001 diff --git a/x/wasm/keeper/wasmtesting/gas_register.go b/x/wasm/keeper/wasmtesting/gas_register.go index 1c1a319ba0..d1975f7638 100644 --- a/x/wasm/keeper/wasmtesting/gas_register.go +++ b/x/wasm/keeper/wasmtesting/gas_register.go @@ -14,6 +14,7 @@ type MockGasRegister struct { EventCostsFn func(evts []wasmvmtypes.EventAttribute) sdk.Gas ToWasmVMGasFn func(source sdk.Gas) uint64 FromWasmVMGasFn func(source uint64) sdk.Gas + UncompressCostsFn func(byteLength int) sdk.Gas } func (m MockGasRegister) NewContractInstanceCosts(pinned bool, msgLen int) sdk.Gas { @@ -30,6 +31,13 @@ func (m MockGasRegister) CompileCosts(byteLength int) sdk.Gas { return m.CompileCostFn(byteLength) } +func (m MockGasRegister) UncompressCosts(byteLength int) sdk.Gas { + if m.UncompressCostsFn == nil { + panic("not expected to be called") + } + return m.UncompressCostsFn(byteLength) +} + func (m MockGasRegister) InstantiateContractCosts(pinned bool, msgLen int) sdk.Gas { if m.InstantiateContractCostFn == nil { panic("not expected to be called") From dda8cbb84ee718fa78e7d535d980a1068c25efe8 Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Wed, 31 Aug 2022 17:27:26 +0200 Subject: [PATCH 064/120] Remove obsolete cli gov params --- x/wasm/client/cli/gov_tx.go | 30 ------------------------------ x/wasm/client/cli/tx.go | 1 - 2 files changed, 31 deletions(-) diff --git a/x/wasm/client/cli/gov_tx.go b/x/wasm/client/cli/gov_tx.go index 15a3ae6f25..d544480795 100644 --- a/x/wasm/client/cli/gov_tx.go +++ b/x/wasm/client/cli/gov_tx.go @@ -85,9 +85,6 @@ func ProposalStoreCodeCmd() *cobra.Command { cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") - cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") - // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd } @@ -163,9 +160,6 @@ func ProposalInstantiateContractCmd() *cobra.Command { cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") - cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") - // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd } @@ -226,9 +220,6 @@ func ProposalMigrateContractCmd() *cobra.Command { cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") - cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") - // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd } @@ -305,9 +296,6 @@ func ProposalExecuteContractCmd() *cobra.Command { cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") - cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") - // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd } @@ -365,9 +353,6 @@ func ProposalSudoContractCmd() *cobra.Command { cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") - cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") - // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd } @@ -426,9 +411,6 @@ func ProposalUpdateContractAdminCmd() *cobra.Command { cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") - cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") - // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd } @@ -481,9 +463,6 @@ func ProposalClearContractAdminCmd() *cobra.Command { cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") - cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") - // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd } @@ -540,9 +519,6 @@ func ProposalPinCodesCmd() *cobra.Command { cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") - cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") - // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd } @@ -611,9 +587,6 @@ func ProposalUnpinCodesCmd() *cobra.Command { cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") - cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") - // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd } @@ -718,8 +691,5 @@ $ %s tx gov submit-proposal update-instantiate-config 1,nobody 2,everybody 3,%s1 cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") - cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") - // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd } diff --git a/x/wasm/client/cli/tx.go b/x/wasm/client/cli/tx.go index 662758abcc..5325347298 100644 --- a/x/wasm/client/cli/tx.go +++ b/x/wasm/client/cli/tx.go @@ -27,7 +27,6 @@ const ( flagInstantiateByEverybody = "instantiate-everybody" flagInstantiateNobody = "instantiate-nobody" flagInstantiateByAddress = "instantiate-only-address" - flagProposalType = "type" ) // GetTxCmd returns the transaction commands for this module From e54d56e95f8c9a329e1901d982cee21ac2d24469 Mon Sep 17 00:00:00 2001 From: jhernandezb Date: Wed, 31 Aug 2022 10:58:42 -0600 Subject: [PATCH 065/120] add params query --- docs/proto/proto-docs.md | 28 ++ proto/cosmwasm/wasm/v1/query.proto | 14 + x/wasm/client/cli/query.go | 30 ++ x/wasm/keeper/querier.go | 7 + x/wasm/keeper/querier_test.go | 28 ++ x/wasm/types/exported_keepers.go | 1 + x/wasm/types/query.pb.go | 492 ++++++++++++++++++++++++----- x/wasm/types/query.pb.gw.go | 58 ++++ 8 files changed, 582 insertions(+), 76 deletions(-) diff --git a/docs/proto/proto-docs.md b/docs/proto/proto-docs.md index f6c0182b6d..b1fd26e3f0 100644 --- a/docs/proto/proto-docs.md +++ b/docs/proto/proto-docs.md @@ -71,6 +71,8 @@ - [QueryContractInfoResponse](#cosmwasm.wasm.v1.QueryContractInfoResponse) - [QueryContractsByCodeRequest](#cosmwasm.wasm.v1.QueryContractsByCodeRequest) - [QueryContractsByCodeResponse](#cosmwasm.wasm.v1.QueryContractsByCodeResponse) + - [QueryParamsRequest](#cosmwasm.wasm.v1.QueryParamsRequest) + - [QueryParamsResponse](#cosmwasm.wasm.v1.QueryParamsResponse) - [QueryPinnedCodesRequest](#cosmwasm.wasm.v1.QueryPinnedCodesRequest) - [QueryPinnedCodesResponse](#cosmwasm.wasm.v1.QueryPinnedCodesResponse) - [QueryRawContractStateRequest](#cosmwasm.wasm.v1.QueryRawContractStateRequest) @@ -1083,6 +1085,31 @@ Query/ContractsByCode RPC method +
+ +### QueryParamsRequest +QueryParamsRequest is the request type for the Query/Params RPC method. + + + + + + + + +### QueryParamsResponse +QueryParamsResponse is the response type for the Query/Params RPC method. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `params` | [Params](#cosmwasm.wasm.v1.Params) | | params defines the parameters of the module. | + + + + + + ### QueryPinnedCodesRequest @@ -1204,6 +1231,7 @@ Query provides defines the gRPC querier service | `Code` | [QueryCodeRequest](#cosmwasm.wasm.v1.QueryCodeRequest) | [QueryCodeResponse](#cosmwasm.wasm.v1.QueryCodeResponse) | Code gets the binary code and metadata for a singe wasm code | GET|/cosmwasm/wasm/v1/code/{code_id}| | `Codes` | [QueryCodesRequest](#cosmwasm.wasm.v1.QueryCodesRequest) | [QueryCodesResponse](#cosmwasm.wasm.v1.QueryCodesResponse) | Codes gets the metadata for all stored wasm codes | GET|/cosmwasm/wasm/v1/code| | `PinnedCodes` | [QueryPinnedCodesRequest](#cosmwasm.wasm.v1.QueryPinnedCodesRequest) | [QueryPinnedCodesResponse](#cosmwasm.wasm.v1.QueryPinnedCodesResponse) | PinnedCodes gets the pinned code ids | GET|/cosmwasm/wasm/v1/codes/pinned| +| `Params` | [QueryParamsRequest](#cosmwasm.wasm.v1.QueryParamsRequest) | [QueryParamsResponse](#cosmwasm.wasm.v1.QueryParamsResponse) | Params gets the module params | GET|/cosmwasm/wasm/v1/codes/params| diff --git a/proto/cosmwasm/wasm/v1/query.proto b/proto/cosmwasm/wasm/v1/query.proto index b7f7a0627f..41d959d800 100644 --- a/proto/cosmwasm/wasm/v1/query.proto +++ b/proto/cosmwasm/wasm/v1/query.proto @@ -58,6 +58,11 @@ service Query { rpc PinnedCodes(QueryPinnedCodesRequest) returns (QueryPinnedCodesResponse) { option (google.api.http).get = "/cosmwasm/wasm/v1/codes/pinned"; } + + // Params gets the module params + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/cosmwasm/wasm/v1/codes/params"; + } } // QueryContractInfoRequest is the request type for the Query/ContractInfo RPC @@ -222,3 +227,12 @@ message QueryPinnedCodesResponse { // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; } + +// QueryParamsRequest is the request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is the response type for the Query/Params RPC method. +message QueryParamsResponse { + // params defines the parameters of the module. + Params params = 1 [ (gogoproto.nullable) = false ]; +} diff --git a/x/wasm/client/cli/query.go b/x/wasm/client/cli/query.go index e7a21167af..5114d56832 100644 --- a/x/wasm/client/cli/query.go +++ b/x/wasm/client/cli/query.go @@ -38,6 +38,7 @@ func GetQueryCmd() *cobra.Command { GetCmdGetContractState(), GetCmdListPinnedCode(), GetCmdLibVersion(), + GetCmdQueryParams(), ) return queryCmd } @@ -540,3 +541,32 @@ func withPageKeyDecoded(flagSet *flag.FlagSet) *flag.FlagSet { } return flagSet } + +// GetCmdQueryParams implements a command to return the current wasm +// parameters. +func GetCmdQueryParams() *cobra.Command { + cmd := &cobra.Command{ + Use: "params", + Short: "Query the current wasm parameters", + Args: cobra.NoArgs, + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + params := &types.QueryParamsRequest{} + res, err := queryClient.Params(cmd.Context(), params) + if err != nil { + return err + } + + return clientCtx.PrintProto(&res.Params) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} diff --git a/x/wasm/keeper/querier.go b/x/wasm/keeper/querier.go index 6c4e45430c..8cd882c7a8 100644 --- a/x/wasm/keeper/querier.go +++ b/x/wasm/keeper/querier.go @@ -311,3 +311,10 @@ func (q grpcQuerier) PinnedCodes(c context.Context, req *types.QueryPinnedCodesR Pagination: pageRes, }, nil } + +// Params returns params of the module. +func (q grpcQuerier) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { + ctx := sdk.UnwrapSDKContext(c) + params := q.keeper.GetParams(ctx) + return &types.QueryParamsResponse{Params: params}, nil +} diff --git a/x/wasm/keeper/querier_test.go b/x/wasm/keeper/querier_test.go index d9721f91b4..88ee6d3aa4 100644 --- a/x/wasm/keeper/querier_test.go +++ b/x/wasm/keeper/querier_test.go @@ -655,6 +655,34 @@ func TestQueryPinnedCodes(t *testing.T) { } } +func TestQueryParams(t *testing.T) { + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + keeper := keepers.WasmKeeper + + q := Querier(keeper) + + paramsResponse, err := q.Params(sdk.WrapSDKContext(ctx), &types.QueryParamsRequest{}) + require.NoError(t, err) + require.NotNil(t, paramsResponse) + + defaultParams := types.DefaultParams() + + require.Equal(t, paramsResponse.Params.CodeUploadAccess, defaultParams.CodeUploadAccess) + require.Equal(t, paramsResponse.Params.InstantiateDefaultPermission, defaultParams.InstantiateDefaultPermission) + + keeper.SetParams(ctx, types.Params{ + CodeUploadAccess: types.AllowNobody, + InstantiateDefaultPermission: types.AccessTypeNobody, + }) + + paramsResponse, err = q.Params(sdk.WrapSDKContext(ctx), &types.QueryParamsRequest{}) + require.NoError(t, err) + require.NotNil(t, paramsResponse) + + require.Equal(t, paramsResponse.Params.CodeUploadAccess, types.AllowNobody) + require.Equal(t, paramsResponse.Params.InstantiateDefaultPermission, types.AccessTypeNobody) +} + func TestQueryCodeInfo(t *testing.T) { wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) diff --git a/x/wasm/types/exported_keepers.go b/x/wasm/types/exported_keepers.go index cb08488386..88f9d980b3 100644 --- a/x/wasm/types/exported_keepers.go +++ b/x/wasm/types/exported_keepers.go @@ -20,6 +20,7 @@ type ViewKeeper interface { IterateCodeInfos(ctx sdk.Context, cb func(uint64, CodeInfo) bool) GetByteCode(ctx sdk.Context, codeID uint64) ([]byte, error) IsPinnedCode(ctx sdk.Context, codeID uint64) bool + GetParams(ctx sdk.Context) Params } // ContractOpsKeeper contains mutable operations on a contract. diff --git a/x/wasm/types/query.pb.go b/x/wasm/types/query.pb.go index 51aead5aa1..0a45c5de82 100644 --- a/x/wasm/types/query.pb.go +++ b/x/wasm/types/query.pb.go @@ -902,6 +902,91 @@ func (m *QueryPinnedCodesResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryPinnedCodesResponse proto.InternalMessageInfo +// QueryParamsRequest is the request type for the Query/Params RPC method. +type QueryParamsRequest struct{} + +func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } +func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryParamsRequest) ProtoMessage() {} +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_9677c207036b9f2b, []int{19} +} + +func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} + +func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} + +func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsRequest.Merge(m, src) +} + +func (m *QueryParamsRequest) XXX_Size() int { + return m.Size() +} + +func (m *QueryParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo + +// QueryParamsResponse is the response type for the Query/Params RPC method. +type QueryParamsResponse struct { + // params defines the parameters of the module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +} + +func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } +func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryParamsResponse) ProtoMessage() {} +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9677c207036b9f2b, []int{20} +} + +func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} + +func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} + +func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsResponse.Merge(m, src) +} + +func (m *QueryParamsResponse) XXX_Size() int { + return m.Size() +} + +func (m *QueryParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo + func init() { proto.RegisterType((*QueryContractInfoRequest)(nil), "cosmwasm.wasm.v1.QueryContractInfoRequest") proto.RegisterType((*QueryContractInfoResponse)(nil), "cosmwasm.wasm.v1.QueryContractInfoResponse") @@ -922,87 +1007,92 @@ func init() { proto.RegisterType((*QueryCodesResponse)(nil), "cosmwasm.wasm.v1.QueryCodesResponse") proto.RegisterType((*QueryPinnedCodesRequest)(nil), "cosmwasm.wasm.v1.QueryPinnedCodesRequest") proto.RegisterType((*QueryPinnedCodesResponse)(nil), "cosmwasm.wasm.v1.QueryPinnedCodesResponse") + proto.RegisterType((*QueryParamsRequest)(nil), "cosmwasm.wasm.v1.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "cosmwasm.wasm.v1.QueryParamsResponse") } func init() { proto.RegisterFile("cosmwasm/wasm/v1/query.proto", fileDescriptor_9677c207036b9f2b) } var fileDescriptor_9677c207036b9f2b = []byte{ - // 1191 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x97, 0xcf, 0x4f, 0x24, 0x45, - 0x14, 0xc7, 0xa7, 0xd8, 0x61, 0x7e, 0x14, 0x98, 0x1d, 0x2b, 0x0a, 0xe3, 0xc8, 0x76, 0x93, 0x76, - 0x83, 0x2c, 0x8b, 0xdd, 0xc2, 0x42, 0x56, 0x4d, 0x8c, 0xd9, 0x61, 0x75, 0x81, 0x84, 0x84, 0xed, - 0x8d, 0xd9, 0xc4, 0x3d, 0x90, 0x9a, 0xe9, 0x62, 0xe8, 0x84, 0xe9, 0x1a, 0xba, 0x0a, 0xd8, 0x09, - 0x41, 0xcd, 0x26, 0x1e, 0x4c, 0x8c, 0x9a, 0x18, 0x8f, 0x46, 0x0f, 0x66, 0xf5, 0xac, 0x37, 0xff, - 0x02, 0x8e, 0x24, 0x5e, 0x3c, 0x4d, 0x74, 0xf0, 0x60, 0xf8, 0x13, 0xf6, 0x64, 0xaa, 0xba, 0x7a, - 0xe8, 0xf9, 0xd1, 0xcc, 0xb0, 0x21, 0x7b, 0x21, 0xdd, 0xd4, 0xab, 0x57, 0x9f, 0xf7, 0xed, 0x57, - 0xef, 0xbd, 0x81, 0x13, 0x65, 0xca, 0xaa, 0xfb, 0x98, 0x55, 0x2d, 0xf9, 0x67, 0x6f, 0xce, 0xda, - 0xd9, 0x25, 0x7e, 0xdd, 0xac, 0xf9, 0x94, 0x53, 0x94, 0x0b, 0x57, 0x4d, 0xf9, 0x67, 0x6f, 0xae, - 0xf0, 0x4a, 0x85, 0x56, 0xa8, 0x5c, 0xb4, 0xc4, 0x53, 0x60, 0x57, 0xe8, 0xf6, 0xc2, 0xeb, 0x35, - 0xc2, 0xc2, 0xd5, 0x0a, 0xa5, 0x95, 0x6d, 0x62, 0xe1, 0x9a, 0x6b, 0x61, 0xcf, 0xa3, 0x1c, 0x73, - 0x97, 0x7a, 0xe1, 0xea, 0x8c, 0xd8, 0x4b, 0x99, 0x55, 0xc2, 0x8c, 0x04, 0x87, 0x5b, 0x7b, 0x73, - 0x25, 0xc2, 0xf1, 0x9c, 0x55, 0xc3, 0x15, 0xd7, 0x93, 0xc6, 0x81, 0xad, 0xb1, 0x00, 0xf3, 0xf7, - 0x85, 0xc5, 0x12, 0xf5, 0xb8, 0x8f, 0xcb, 0x7c, 0xc5, 0xdb, 0xa4, 0x36, 0xd9, 0xd9, 0x25, 0x8c, - 0xa3, 0x3c, 0x4c, 0x63, 0xc7, 0xf1, 0x09, 0x63, 0x79, 0x30, 0x09, 0xa6, 0xb3, 0x76, 0xf8, 0x6a, - 0x7c, 0x0d, 0xe0, 0x6b, 0x3d, 0xb6, 0xb1, 0x1a, 0xf5, 0x18, 0x89, 0xdf, 0x87, 0xee, 0xc3, 0x97, - 0xca, 0x6a, 0xc7, 0x86, 0xeb, 0x6d, 0xd2, 0xfc, 0xd0, 0x24, 0x98, 0x1e, 0x99, 0xd7, 0xcc, 0x4e, - 0x55, 0xcc, 0xa8, 0xe3, 0xe2, 0xe8, 0x51, 0x43, 0x4f, 0x1c, 0x37, 0x74, 0x70, 0xda, 0xd0, 0x13, - 0xf6, 0x68, 0x39, 0xb2, 0xf6, 0x5e, 0xf2, 0xbf, 0x9f, 0x74, 0x60, 0x7c, 0x06, 0x5f, 0x6f, 0xe3, - 0x59, 0x76, 0x19, 0xa7, 0x7e, 0xbd, 0x6f, 0x24, 0xe8, 0x23, 0x08, 0xcf, 0x34, 0x51, 0x38, 0x53, - 0x66, 0x20, 0xa0, 0x29, 0x04, 0x34, 0x83, 0xaf, 0xa7, 0x04, 0x34, 0xd7, 0x71, 0x85, 0x28, 0xaf, - 0x76, 0x64, 0xa7, 0xf1, 0x3b, 0x80, 0x13, 0xbd, 0x09, 0x94, 0x28, 0xab, 0x30, 0x4d, 0x3c, 0xee, - 0xbb, 0x44, 0x20, 0x5c, 0x99, 0x1e, 0x99, 0x9f, 0x89, 0x0f, 0x7a, 0x89, 0x3a, 0x44, 0xed, 0xff, - 0xd0, 0xe3, 0x7e, 0xbd, 0x98, 0x14, 0x02, 0xd8, 0xa1, 0x03, 0x74, 0xaf, 0x07, 0xf4, 0x9b, 0x7d, - 0xa1, 0x03, 0x90, 0x36, 0xea, 0x4f, 0x3b, 0x64, 0x63, 0xc5, 0xba, 0x38, 0x3b, 0x94, 0x6d, 0x1c, - 0xa6, 0xcb, 0xd4, 0x21, 0x1b, 0xae, 0x23, 0x65, 0x4b, 0xda, 0x29, 0xf1, 0xba, 0xe2, 0x5c, 0x9a, - 0x6a, 0x5f, 0x74, 0xaa, 0xd6, 0x02, 0x50, 0xaa, 0x4d, 0xc0, 0x6c, 0xf8, 0xb5, 0x03, 0xdd, 0xb2, - 0xf6, 0xd9, 0x3f, 0x2e, 0x4f, 0x87, 0xcf, 0x43, 0x8e, 0x3b, 0xdb, 0xdb, 0x21, 0xca, 0x03, 0x8e, - 0x39, 0x79, 0x71, 0x09, 0xf4, 0x23, 0x80, 0xd7, 0x62, 0x10, 0x94, 0x16, 0x8b, 0x30, 0x55, 0xa5, - 0x0e, 0xd9, 0x0e, 0x13, 0x68, 0xbc, 0x3b, 0x81, 0xd6, 0xc4, 0xba, 0xca, 0x16, 0x65, 0x7c, 0x79, - 0x22, 0x3d, 0x54, 0x1a, 0xd9, 0x78, 0xff, 0x82, 0x1a, 0x5d, 0x83, 0x50, 0x9e, 0xb1, 0xe1, 0x60, - 0x8e, 0x25, 0xc2, 0xa8, 0x9d, 0x95, 0xff, 0xb9, 0x8b, 0x39, 0x36, 0x6e, 0xa9, 0xc8, 0xbb, 0x1d, - 0xab, 0xc8, 0x11, 0x4c, 0xca, 0x9d, 0x40, 0xee, 0x94, 0xcf, 0xc6, 0x0e, 0xd4, 0xe4, 0xa6, 0x07, - 0x55, 0xec, 0xf3, 0x0b, 0xf2, 0x2c, 0x76, 0xf3, 0x14, 0xc7, 0x9e, 0x35, 0x74, 0x14, 0x21, 0x58, - 0x23, 0x8c, 0x09, 0x25, 0x22, 0x9c, 0x6b, 0x50, 0x8f, 0x3d, 0x52, 0x91, 0xce, 0x44, 0x49, 0x63, - 0x7d, 0x06, 0x11, 0xdc, 0x84, 0x39, 0x95, 0xfb, 0xfd, 0x6f, 0x9c, 0xf1, 0xc3, 0x10, 0xcc, 0x09, - 0xc3, 0xb6, 0x42, 0x7b, 0xa3, 0xc3, 0xba, 0x98, 0x6b, 0x36, 0xf4, 0x94, 0x34, 0xbb, 0x7b, 0xda, - 0xd0, 0x87, 0x5c, 0xa7, 0x75, 0x63, 0xf3, 0x30, 0x5d, 0xf6, 0x09, 0xe6, 0xd4, 0x97, 0xf1, 0x66, - 0xed, 0xf0, 0x15, 0x7d, 0x0c, 0xb3, 0x02, 0x67, 0x63, 0x0b, 0xb3, 0xad, 0xfc, 0x15, 0xc9, 0xfd, - 0xce, 0xb3, 0x86, 0xbe, 0x50, 0x71, 0xf9, 0xd6, 0x6e, 0xc9, 0x2c, 0xd3, 0xaa, 0xc5, 0x89, 0xe7, - 0x10, 0xbf, 0xea, 0x7a, 0x3c, 0xfa, 0xb8, 0xed, 0x96, 0x98, 0x55, 0xaa, 0x73, 0xc2, 0xcc, 0x65, - 0xf2, 0xb8, 0x28, 0x1e, 0xec, 0x8c, 0x70, 0xb5, 0x8c, 0xd9, 0x16, 0x7a, 0x04, 0xc7, 0x5c, 0x8f, - 0x71, 0xec, 0x71, 0x17, 0x73, 0xb2, 0x51, 0x13, 0x9b, 0x18, 0x13, 0x29, 0x98, 0x8a, 0xab, 0xf9, - 0x77, 0xca, 0x65, 0xc2, 0xd8, 0x12, 0xf5, 0x36, 0xdd, 0x8a, 0x4a, 0xe2, 0x57, 0x23, 0x3e, 0xd6, - 0x5b, 0x2e, 0x82, 0xa2, 0xbf, 0x9a, 0xcc, 0x24, 0x73, 0xc3, 0xab, 0xc9, 0xcc, 0x70, 0x2e, 0x65, - 0x3c, 0x01, 0xf0, 0xe5, 0x88, 0x9a, 0x4a, 0xa0, 0x15, 0x51, 0x3e, 0x84, 0x40, 0xa2, 0xd7, 0x00, - 0x79, 0xae, 0xd1, 0xab, 0xec, 0xb6, 0xeb, 0x5a, 0xcc, 0xb4, 0x7a, 0x4d, 0xa6, 0xac, 0xd6, 0xd0, - 0x84, 0xfa, 0xb2, 0x41, 0xb6, 0x64, 0x4e, 0x1b, 0xba, 0x7c, 0x0f, 0xbe, 0xa5, 0xea, 0x42, 0x8f, - 0x22, 0x0c, 0x2c, 0xfc, 0xa4, 0xed, 0x05, 0x02, 0x3c, 0x77, 0x81, 0x78, 0x0a, 0x20, 0x8a, 0x7a, - 0x57, 0x21, 0xde, 0x83, 0xb0, 0x15, 0x62, 0x58, 0x19, 0x06, 0x89, 0x31, 0xd0, 0x37, 0x1b, 0xc6, - 0x77, 0x89, 0x75, 0x02, 0xc3, 0x71, 0xc9, 0xb9, 0xee, 0x7a, 0x1e, 0x71, 0xce, 0xd1, 0xe2, 0xf9, - 0x8b, 0xe5, 0x37, 0x40, 0x8d, 0x2d, 0x6d, 0x67, 0xb4, 0xee, 0x60, 0x46, 0xdd, 0x8a, 0x40, 0x8f, - 0x64, 0xf1, 0xaa, 0x88, 0xb5, 0xd9, 0xd0, 0xd3, 0xc1, 0xd5, 0x60, 0x76, 0x3a, 0xb8, 0x15, 0x97, - 0x17, 0xf4, 0xfc, 0x97, 0x23, 0x70, 0x58, 0x12, 0xa1, 0xef, 0x01, 0x1c, 0x8d, 0x4e, 0x2f, 0xa8, - 0x47, 0xa3, 0x8f, 0x1b, 0xb9, 0x0a, 0x37, 0x07, 0xb2, 0x0d, 0xce, 0x37, 0x66, 0x9f, 0xfc, 0xf9, - 0xef, 0x77, 0x43, 0x53, 0xe8, 0xba, 0xd5, 0x35, 0x2c, 0x86, 0x3d, 0xd2, 0x3a, 0x50, 0x35, 0xef, - 0x10, 0x3d, 0x05, 0xf0, 0x6a, 0xc7, 0x70, 0x82, 0xde, 0xea, 0x73, 0x5c, 0xfb, 0x18, 0x55, 0x30, - 0x07, 0x35, 0x57, 0x80, 0x0b, 0x12, 0xd0, 0x44, 0xb3, 0x83, 0x00, 0x5a, 0x5b, 0x0a, 0xea, 0xe7, - 0x08, 0xa8, 0x9a, 0x07, 0xfa, 0x82, 0xb6, 0x0f, 0x2e, 0x7d, 0x41, 0x3b, 0xc6, 0x0c, 0x63, 0x5e, - 0x82, 0xce, 0xa2, 0x99, 0x5e, 0xa0, 0x0e, 0xb1, 0x0e, 0x54, 0x42, 0x1d, 0x5a, 0x67, 0xc3, 0xc7, - 0x2f, 0x00, 0xe6, 0x3a, 0x7b, 0x35, 0x8a, 0x3b, 0x38, 0x66, 0xae, 0x28, 0x58, 0x03, 0xdb, 0x0f, - 0x42, 0xda, 0x25, 0x29, 0x93, 0x50, 0xbf, 0x01, 0x98, 0xeb, 0xec, 0xad, 0xb1, 0xa4, 0x31, 0xdd, - 0x3d, 0x96, 0x34, 0xae, 0x69, 0x1b, 0xef, 0x4b, 0xd2, 0xdb, 0x68, 0x71, 0x20, 0x52, 0x1f, 0xef, - 0x5b, 0x07, 0x67, 0x4d, 0xf9, 0x10, 0xfd, 0x01, 0x20, 0xea, 0x6e, 0xb4, 0xe8, 0xed, 0x18, 0x8c, - 0xd8, 0x31, 0xa0, 0x30, 0x77, 0x81, 0x1d, 0x0a, 0xfd, 0x03, 0x89, 0xfe, 0x2e, 0xba, 0x3d, 0x98, - 0xc8, 0xc2, 0x51, 0x3b, 0x7c, 0x1d, 0x26, 0x65, 0xda, 0x1a, 0xb1, 0x79, 0x78, 0x96, 0xab, 0x6f, - 0x9c, 0x6b, 0xa3, 0x88, 0xa6, 0x25, 0x91, 0x81, 0x26, 0xfb, 0x25, 0x28, 0xf2, 0xe1, 0xb0, 0x2c, - 0x87, 0xe8, 0x3c, 0xbf, 0x61, 0x41, 0x2e, 0x5c, 0x3f, 0xdf, 0x48, 0x9d, 0xae, 0xc9, 0xd3, 0xf3, - 0x68, 0xac, 0xf7, 0xe9, 0xe8, 0x2b, 0x00, 0x47, 0x22, 0x95, 0x18, 0xdd, 0x88, 0xf1, 0xda, 0xdd, - 0x11, 0x0a, 0x33, 0x83, 0x98, 0x2a, 0x8c, 0x29, 0x89, 0x31, 0x89, 0xb4, 0xde, 0x18, 0xcc, 0xaa, - 0xc9, 0x4d, 0xc5, 0xe5, 0xa3, 0x7f, 0xb4, 0xc4, 0xaf, 0x4d, 0x2d, 0x71, 0xd4, 0xd4, 0xc0, 0x71, - 0x53, 0x03, 0x7f, 0x37, 0x35, 0xf0, 0xed, 0x89, 0x96, 0x38, 0x3e, 0xd1, 0x12, 0x7f, 0x9d, 0x68, - 0x89, 0x4f, 0xa6, 0x22, 0xc3, 0xcd, 0x12, 0x65, 0xd5, 0x87, 0xa1, 0x2f, 0xc7, 0x7a, 0x1c, 0xf8, - 0x94, 0xbf, 0xb6, 0x4b, 0x29, 0xf9, 0x23, 0xf9, 0xd6, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0xe8, - 0x7b, 0x25, 0x05, 0xd4, 0x0f, 0x00, 0x00, + // 1245 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x98, 0xcf, 0x6f, 0x1b, 0x45, + 0x14, 0xc7, 0x3d, 0xa9, 0xe3, 0x1f, 0x93, 0xa0, 0x9a, 0xa1, 0x24, 0xc6, 0xa4, 0xbb, 0xd1, 0x52, + 0x42, 0x9a, 0x86, 0x5d, 0x92, 0x26, 0x14, 0x90, 0x10, 0xaa, 0x53, 0x68, 0x12, 0x29, 0x52, 0xba, + 0x15, 0xaa, 0x44, 0x0f, 0xd1, 0xd8, 0x3b, 0x71, 0x56, 0x8a, 0x77, 0x9c, 0x9d, 0x49, 0x52, 0x2b, + 0x0a, 0xa0, 0x4a, 0x48, 0x1c, 0x10, 0x20, 0x21, 0x8e, 0x08, 0x0e, 0xa8, 0x70, 0x86, 0x1b, 0x7f, + 0x41, 0x8e, 0x91, 0xb8, 0x70, 0xb2, 0xc0, 0xe1, 0x80, 0xf2, 0x27, 0xf4, 0x84, 0x76, 0x76, 0xd6, + 0xd9, 0xb5, 0xbd, 0xb1, 0x53, 0x59, 0xbd, 0x58, 0xfb, 0xe3, 0xbd, 0x37, 0x9f, 0xf7, 0x9d, 0xb7, + 0x6f, 0x9e, 0x0c, 0x27, 0xca, 0x94, 0x55, 0xf7, 0x31, 0xab, 0x1a, 0xe2, 0x67, 0x6f, 0xce, 0xd8, + 0xd9, 0x25, 0x6e, 0x5d, 0xaf, 0xb9, 0x94, 0x53, 0x94, 0x0b, 0xde, 0xea, 0xe2, 0x67, 0x6f, 0xae, + 0x70, 0xa5, 0x42, 0x2b, 0x54, 0xbc, 0x34, 0xbc, 0x2b, 0xdf, 0xae, 0xd0, 0x19, 0x85, 0xd7, 0x6b, + 0x84, 0x05, 0x6f, 0x2b, 0x94, 0x56, 0xb6, 0x89, 0x81, 0x6b, 0xb6, 0x81, 0x1d, 0x87, 0x72, 0xcc, + 0x6d, 0xea, 0x04, 0x6f, 0x67, 0x3c, 0x5f, 0xca, 0x8c, 0x12, 0x66, 0xc4, 0x5f, 0xdc, 0xd8, 0x9b, + 0x2b, 0x11, 0x8e, 0xe7, 0x8c, 0x1a, 0xae, 0xd8, 0x8e, 0x30, 0xf6, 0x6d, 0xb5, 0x05, 0x98, 0xbf, + 0xe7, 0x59, 0x2c, 0x51, 0x87, 0xbb, 0xb8, 0xcc, 0x57, 0x9c, 0x4d, 0x6a, 0x92, 0x9d, 0x5d, 0xc2, + 0x38, 0xca, 0xc3, 0x34, 0xb6, 0x2c, 0x97, 0x30, 0x96, 0x07, 0x93, 0x60, 0x3a, 0x6b, 0x06, 0xb7, + 0xda, 0xd7, 0x00, 0xbe, 0xd2, 0xc5, 0x8d, 0xd5, 0xa8, 0xc3, 0x48, 0xbc, 0x1f, 0xba, 0x07, 0x5f, + 0x28, 0x4b, 0x8f, 0x0d, 0xdb, 0xd9, 0xa4, 0xf9, 0xa1, 0x49, 0x30, 0x3d, 0x32, 0xaf, 0xe8, 0xed, + 0xaa, 0xe8, 0xe1, 0xc0, 0xc5, 0xd1, 0xa3, 0x86, 0x9a, 0x38, 0x6e, 0xa8, 0xe0, 0xb4, 0xa1, 0x26, + 0xcc, 0xd1, 0x72, 0xe8, 0xdd, 0x7b, 0xc9, 0xff, 0x7e, 0x52, 0x81, 0xf6, 0x19, 0x7c, 0x35, 0xc2, + 0xb3, 0x6c, 0x33, 0x4e, 0xdd, 0x7a, 0xcf, 0x4c, 0xd0, 0x47, 0x10, 0x9e, 0x69, 0x22, 0x71, 0xa6, + 0x74, 0x5f, 0x40, 0xdd, 0x13, 0x50, 0xf7, 0x77, 0x4f, 0x0a, 0xa8, 0xaf, 0xe3, 0x0a, 0x91, 0x51, + 0xcd, 0x90, 0xa7, 0xf6, 0x3b, 0x80, 0x13, 0xdd, 0x09, 0xa4, 0x28, 0xab, 0x30, 0x4d, 0x1c, 0xee, + 0xda, 0xc4, 0x43, 0xb8, 0x34, 0x3d, 0x32, 0x3f, 0x13, 0x9f, 0xf4, 0x12, 0xb5, 0x88, 0xf4, 0xff, + 0xd0, 0xe1, 0x6e, 0xbd, 0x98, 0xf4, 0x04, 0x30, 0x83, 0x00, 0xe8, 0x6e, 0x17, 0xe8, 0x37, 0x7a, + 0x42, 0xfb, 0x20, 0x11, 0xea, 0x4f, 0xdb, 0x64, 0x63, 0xc5, 0xba, 0xb7, 0x76, 0x20, 0xdb, 0x38, + 0x4c, 0x97, 0xa9, 0x45, 0x36, 0x6c, 0x4b, 0xc8, 0x96, 0x34, 0x53, 0xde, 0xed, 0x8a, 0x35, 0x30, + 0xd5, 0xbe, 0x68, 0x57, 0xad, 0x05, 0x20, 0x55, 0x9b, 0x80, 0xd9, 0x60, 0xb7, 0x7d, 0xdd, 0xb2, + 0xe6, 0xd9, 0x83, 0xc1, 0xe9, 0xf0, 0x79, 0xc0, 0x71, 0x7b, 0x7b, 0x3b, 0x40, 0xb9, 0xcf, 0x31, + 0x27, 0xcf, 0xaf, 0x80, 0x7e, 0x04, 0xf0, 0x6a, 0x0c, 0x82, 0xd4, 0x62, 0x11, 0xa6, 0xaa, 0xd4, + 0x22, 0xdb, 0x41, 0x01, 0x8d, 0x77, 0x16, 0xd0, 0x9a, 0xf7, 0x5e, 0x56, 0x8b, 0x34, 0x1e, 0x9c, + 0x48, 0x0f, 0xa4, 0x46, 0x26, 0xde, 0xbf, 0xa0, 0x46, 0x57, 0x21, 0x14, 0x6b, 0x6c, 0x58, 0x98, + 0x63, 0x81, 0x30, 0x6a, 0x66, 0xc5, 0x93, 0x3b, 0x98, 0x63, 0xed, 0xa6, 0xcc, 0xbc, 0x33, 0xb0, + 0xcc, 0x1c, 0xc1, 0xa4, 0xf0, 0x04, 0xc2, 0x53, 0x5c, 0x6b, 0x3b, 0x50, 0x11, 0x4e, 0xf7, 0xab, + 0xd8, 0xe5, 0x17, 0xe4, 0x59, 0xec, 0xe4, 0x29, 0x8e, 0x3d, 0x6d, 0xa8, 0x28, 0x44, 0xb0, 0x46, + 0x18, 0xf3, 0x94, 0x08, 0x71, 0xae, 0x41, 0x35, 0x76, 0x49, 0x49, 0x3a, 0x13, 0x26, 0x8d, 0x8d, + 0xe9, 0x67, 0x70, 0x03, 0xe6, 0x64, 0xed, 0xf7, 0xfe, 0xe2, 0xb4, 0x1f, 0x86, 0x60, 0xce, 0x33, + 0x8c, 0x34, 0xda, 0xeb, 0x6d, 0xd6, 0xc5, 0x5c, 0xb3, 0xa1, 0xa6, 0x84, 0xd9, 0x9d, 0xd3, 0x86, + 0x3a, 0x64, 0x5b, 0xad, 0x2f, 0x36, 0x0f, 0xd3, 0x65, 0x97, 0x60, 0x4e, 0x5d, 0x91, 0x6f, 0xd6, + 0x0c, 0x6e, 0xd1, 0xc7, 0x30, 0xeb, 0xe1, 0x6c, 0x6c, 0x61, 0xb6, 0x95, 0xbf, 0x24, 0xb8, 0xdf, + 0x79, 0xda, 0x50, 0x17, 0x2a, 0x36, 0xdf, 0xda, 0x2d, 0xe9, 0x65, 0x5a, 0x35, 0x38, 0x71, 0x2c, + 0xe2, 0x56, 0x6d, 0x87, 0x87, 0x2f, 0xb7, 0xed, 0x12, 0x33, 0x4a, 0x75, 0x4e, 0x98, 0xbe, 0x4c, + 0x1e, 0x15, 0xbd, 0x0b, 0x33, 0xe3, 0x85, 0x5a, 0xc6, 0x6c, 0x0b, 0x3d, 0x84, 0x63, 0xb6, 0xc3, + 0x38, 0x76, 0xb8, 0x8d, 0x39, 0xd9, 0xa8, 0x79, 0x4e, 0x8c, 0x79, 0x25, 0x98, 0x8a, 0xeb, 0xf9, + 0xb7, 0xcb, 0x65, 0xc2, 0xd8, 0x12, 0x75, 0x36, 0xed, 0x8a, 0x2c, 0xe2, 0x97, 0x43, 0x31, 0xd6, + 0x5b, 0x21, 0xfc, 0xa6, 0xbf, 0x9a, 0xcc, 0x24, 0x73, 0xc3, 0xab, 0xc9, 0xcc, 0x70, 0x2e, 0xa5, + 0x3d, 0x06, 0xf0, 0xc5, 0x90, 0x9a, 0x52, 0xa0, 0x15, 0xaf, 0x7d, 0x78, 0x02, 0x79, 0x67, 0x0d, + 0x10, 0xeb, 0x6a, 0xdd, 0xda, 0x6e, 0x54, 0xd7, 0x62, 0xa6, 0x75, 0xd6, 0x64, 0xca, 0xf2, 0x1d, + 0x9a, 0x90, 0x3b, 0xeb, 0x57, 0x4b, 0xe6, 0xb4, 0xa1, 0x8a, 0x7b, 0x7f, 0x2f, 0xe5, 0x29, 0xf4, + 0x30, 0xc4, 0xc0, 0x82, 0x2d, 0x8d, 0x36, 0x08, 0xf0, 0xcc, 0x0d, 0xe2, 0x09, 0x80, 0x28, 0x1c, + 0x5d, 0xa6, 0x78, 0x17, 0xc2, 0x56, 0x8a, 0x41, 0x67, 0xe8, 0x27, 0x47, 0x5f, 0xdf, 0x6c, 0x90, + 0xdf, 0x00, 0xfb, 0x04, 0x86, 0xe3, 0x82, 0x73, 0xdd, 0x76, 0x1c, 0x62, 0x9d, 0xa3, 0xc5, 0xb3, + 0x37, 0xcb, 0x6f, 0x80, 0x1c, 0x5b, 0x22, 0x6b, 0xb4, 0xbe, 0xc1, 0x8c, 0xfc, 0x2a, 0x7c, 0x3d, + 0x92, 0xc5, 0xcb, 0x5e, 0xae, 0xcd, 0x86, 0x9a, 0xf6, 0x3f, 0x0d, 0x66, 0xa6, 0xfd, 0xaf, 0x62, + 0x80, 0x49, 0x5f, 0x91, 0x9b, 0xb3, 0x8e, 0x5d, 0x5c, 0x0d, 0xf2, 0xd5, 0xd6, 0xe0, 0x4b, 0x91, + 0xa7, 0x92, 0xf0, 0x6d, 0x98, 0xaa, 0x89, 0x27, 0xb2, 0x1c, 0xf2, 0x9d, 0xfb, 0xe5, 0x7b, 0x04, + 0xad, 0xdc, 0xb7, 0x9e, 0xff, 0x72, 0x14, 0x0e, 0x8b, 0x78, 0xe8, 0x7b, 0x00, 0x47, 0xc3, 0x23, + 0x12, 0xea, 0x32, 0x4d, 0xc4, 0xcd, 0x75, 0x85, 0x1b, 0x7d, 0xd9, 0xfa, 0xac, 0xda, 0xec, 0xe3, + 0x3f, 0xff, 0xfd, 0x6e, 0x68, 0x0a, 0x5d, 0x33, 0x3a, 0x26, 0xd2, 0xe0, 0x20, 0x36, 0x0e, 0x64, + 0x63, 0x3d, 0x44, 0x4f, 0x00, 0xbc, 0xdc, 0x36, 0x01, 0xa1, 0x37, 0x7b, 0x2c, 0x17, 0x9d, 0xd5, + 0x0a, 0x7a, 0xbf, 0xe6, 0x12, 0x70, 0x41, 0x00, 0xea, 0x68, 0xb6, 0x1f, 0x40, 0x63, 0x4b, 0x42, + 0xfd, 0x1c, 0x02, 0x95, 0x43, 0x47, 0x4f, 0xd0, 0xe8, 0x74, 0xd4, 0x13, 0xb4, 0x6d, 0x96, 0xd1, + 0xe6, 0x05, 0xe8, 0x2c, 0x9a, 0xe9, 0x06, 0x6a, 0x11, 0xe3, 0x40, 0x56, 0xed, 0xa1, 0x71, 0x36, + 0xe1, 0xfc, 0x02, 0x60, 0xae, 0x7d, 0x20, 0x40, 0x71, 0x0b, 0xc7, 0x0c, 0x2f, 0x05, 0xa3, 0x6f, + 0xfb, 0x7e, 0x48, 0x3b, 0x24, 0x65, 0x02, 0xea, 0x37, 0x00, 0x73, 0xed, 0x07, 0x78, 0x2c, 0x69, + 0xcc, 0x08, 0x11, 0x4b, 0x1a, 0x37, 0x19, 0x68, 0xef, 0x0b, 0xd2, 0x5b, 0x68, 0xb1, 0x2f, 0x52, + 0x17, 0xef, 0x1b, 0x07, 0x67, 0x27, 0xff, 0x21, 0xfa, 0x03, 0x40, 0xd4, 0x79, 0x9a, 0xa3, 0xb7, + 0x62, 0x30, 0x62, 0x67, 0x8d, 0xc2, 0xdc, 0x05, 0x3c, 0x24, 0xfa, 0x07, 0x02, 0xfd, 0x5d, 0x74, + 0xab, 0x3f, 0x91, 0xbd, 0x40, 0x51, 0xf8, 0x3a, 0x4c, 0x8a, 0xb2, 0xd5, 0x62, 0xeb, 0xf0, 0xac, + 0x56, 0x5f, 0x3b, 0xd7, 0x46, 0x12, 0x4d, 0x0b, 0x22, 0x0d, 0x4d, 0xf6, 0x2a, 0x50, 0xe4, 0xc2, + 0x61, 0xd1, 0x73, 0xd1, 0x79, 0x71, 0x83, 0x2e, 0x58, 0xb8, 0x76, 0xbe, 0x91, 0x5c, 0x5d, 0x11, + 0xab, 0xe7, 0xd1, 0x58, 0xf7, 0xd5, 0xd1, 0x57, 0x00, 0x8e, 0x84, 0xda, 0x3d, 0xba, 0x1e, 0x13, + 0xb5, 0xf3, 0xd8, 0x29, 0xcc, 0xf4, 0x63, 0x2a, 0x31, 0xa6, 0x04, 0xc6, 0x24, 0x52, 0xba, 0x63, + 0x30, 0xa3, 0x26, 0x9c, 0xd0, 0x21, 0x4c, 0xf9, 0x3d, 0x1a, 0xc5, 0xa5, 0x17, 0x39, 0x0a, 0x0a, + 0xaf, 0xf7, 0xb0, 0xea, 0x7b, 0x79, 0xff, 0x60, 0x58, 0x3e, 0xfa, 0x47, 0x49, 0xfc, 0xda, 0x54, + 0x12, 0x47, 0x4d, 0x05, 0x1c, 0x37, 0x15, 0xf0, 0x77, 0x53, 0x01, 0xdf, 0x9e, 0x28, 0x89, 0xe3, + 0x13, 0x25, 0xf1, 0xd7, 0x89, 0x92, 0xf8, 0x64, 0x2a, 0x34, 0xc0, 0x2d, 0x51, 0x56, 0x7d, 0x10, + 0xc4, 0xb2, 0x8c, 0x47, 0x7e, 0x4c, 0xf1, 0x8f, 0x42, 0x29, 0x25, 0xfe, 0x08, 0xb8, 0xf9, 0x7f, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xa4, 0x0e, 0x41, 0xb8, 0x10, 0x00, 0x00, } func (this *QueryContractInfoResponse) Equal(that interface{}) bool { @@ -1125,6 +1215,8 @@ type QueryClient interface { Codes(ctx context.Context, in *QueryCodesRequest, opts ...grpc.CallOption) (*QueryCodesResponse, error) // PinnedCodes gets the pinned code ids PinnedCodes(ctx context.Context, in *QueryPinnedCodesRequest, opts ...grpc.CallOption) (*QueryPinnedCodesResponse, error) + // Params gets the module params + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) } type queryClient struct { @@ -1216,6 +1308,15 @@ func (c *queryClient) PinnedCodes(ctx context.Context, in *QueryPinnedCodesReque return out, nil } +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/cosmwasm.wasm.v1.Query/Params", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // QueryServer is the server API for Query service. type QueryServer interface { // ContractInfo gets the contract meta data @@ -1236,6 +1337,8 @@ type QueryServer interface { Codes(context.Context, *QueryCodesRequest) (*QueryCodesResponse, error) // PinnedCodes gets the pinned code ids PinnedCodes(context.Context, *QueryPinnedCodesRequest) (*QueryPinnedCodesResponse, error) + // Params gets the module params + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. @@ -1277,6 +1380,10 @@ func (*UnimplementedQueryServer) PinnedCodes(ctx context.Context, req *QueryPinn return nil, status.Errorf(codes.Unimplemented, "method PinnedCodes not implemented") } +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} + func RegisterQueryServer(s grpc1.Server, srv QueryServer) { s.RegisterService(&_Query_serviceDesc, srv) } @@ -1443,6 +1550,24 @@ func _Query_PinnedCodes_Handler(srv interface{}, ctx context.Context, dec func(i return interceptor(ctx, in, info, handler) } +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmwasm.wasm.v1.Query/Params", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _Query_serviceDesc = grpc.ServiceDesc{ ServiceName: "cosmwasm.wasm.v1.Query", HandlerType: (*QueryServer)(nil), @@ -1483,6 +1608,10 @@ var _Query_serviceDesc = grpc.ServiceDesc{ MethodName: "PinnedCodes", Handler: _Query_PinnedCodes_Handler, }, + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "cosmwasm/wasm/v1/query.proto", @@ -2252,6 +2381,62 @@ func (m *QueryPinnedCodesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error return len(dAtA) - i, nil } +func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { offset -= sovQuery(v) base := offset @@ -2575,6 +2760,26 @@ func (m *QueryPinnedCodesResponse) Size() (n int) { return n } +func (m *QueryParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + func sovQuery(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -4709,6 +4914,141 @@ func (m *QueryPinnedCodesResponse) Unmarshal(dAtA []byte) error { return nil } +func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} + +func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} + func skipQuery(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/wasm/types/query.pb.gw.go b/x/wasm/types/query.pb.gw.go index b382baf774..d50c1a5d8e 100644 --- a/x/wasm/types/query.pb.gw.go +++ b/x/wasm/types/query.pb.gw.go @@ -554,6 +554,22 @@ func local_request_Query_PinnedCodes_0(ctx context.Context, marshaler runtime.Ma return msg, metadata, err } +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := server.Params(ctx, &protoReq) + return msg, metadata, err +} + // RegisterQueryHandlerServer registers the http handlers for service Query to "mux". // UnaryRPC :call QueryServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -730,6 +746,25 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv forward_Query_PinnedCodes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + return nil } @@ -941,6 +976,25 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie forward_Query_PinnedCodes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + return nil } @@ -962,6 +1016,8 @@ var ( pattern_Query_Codes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cosmwasm", "wasm", "v1", "code"}, "", runtime.AssumeColonVerbOpt(true))) pattern_Query_PinnedCodes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"cosmwasm", "wasm", "v1", "codes", "pinned"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"cosmwasm", "wasm", "v1", "codes", "params"}, "", runtime.AssumeColonVerbOpt(true))) ) var ( @@ -982,4 +1038,6 @@ var ( forward_Query_Codes_0 = runtime.ForwardResponseMessage forward_Query_PinnedCodes_0 = runtime.ForwardResponseMessage + + forward_Query_Params_0 = runtime.ForwardResponseMessage ) From 1fdd37816fe9810c9b71e3a82f2b6a00c8df424e Mon Sep 17 00:00:00 2001 From: Alexander Peters Date: Mon, 5 Sep 2022 14:20:55 +0200 Subject: [PATCH 066/120] Upgrade thirdparty protos (#977) * Bump tendermint protos * Bump cosmos protos * Format only --- .../proto/cosmos/authz/v1beta1/authz.proto | 12 + .../proto/cosmos/authz/v1beta1/genesis.proto | 13 +- .../proto/cosmos/authz/v1beta1/query.proto | 48 +- .../proto/cosmos/bank/v1beta1/query.proto | 40 +- .../base/snapshots/v1beta1/snapshot.proto | 39 +- .../cosmos/base/store/v1beta1/snapshot.proto | 28 - .../base/tendermint/v1beta1/query.proto | 16 +- .../proto/cosmos/feegrant/v1beta1/query.proto | 23 + .../proto/cosmos/gov/v1beta1/gov.proto | 2 +- .../cosmos/tx/signing/v1beta1/signing.proto | 12 + .../proto/cosmos/tx/v1beta1/service.proto | 35 +- third_party/proto/tendermint/abci/types.proto | 34 +- .../proto/tendermint/consensus/types.proto | 2 +- .../proto/tendermint/rpc/grpc/types.pb.go | 953 ++++++++++++++++++ .../proto/tendermint/state/types.pb.go | 335 +++++- .../proto/tendermint/state/types.proto | 5 + .../proto/tendermint/types/evidence.proto | 18 +- .../proto/tendermint/types/types.proto | 8 +- 18 files changed, 1481 insertions(+), 142 deletions(-) delete mode 100644 third_party/proto/cosmos/base/store/v1beta1/snapshot.proto create mode 100644 third_party/proto/tendermint/rpc/grpc/types.pb.go diff --git a/third_party/proto/cosmos/authz/v1beta1/authz.proto b/third_party/proto/cosmos/authz/v1beta1/authz.proto index 2c376905eb..05b1feefa4 100644 --- a/third_party/proto/cosmos/authz/v1beta1/authz.proto +++ b/third_party/proto/cosmos/authz/v1beta1/authz.proto @@ -25,3 +25,15 @@ message Grant { google.protobuf.Any authorization = 1 [(cosmos_proto.accepts_interface) = "Authorization"]; google.protobuf.Timestamp expiration = 2 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; } + +// GrantAuthorization extends a grant with both the addresses of the grantee and granter. +// It is used in genesis.proto and query.proto +// +// Since: cosmos-sdk 0.45.2 +message GrantAuthorization { + string granter = 1; + string grantee = 2; + + google.protobuf.Any authorization = 3 [(cosmos_proto.accepts_interface) = "Authorization"]; + google.protobuf.Timestamp expiration = 4 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; +} diff --git a/third_party/proto/cosmos/authz/v1beta1/genesis.proto b/third_party/proto/cosmos/authz/v1beta1/genesis.proto index ea89869445..310f62656f 100644 --- a/third_party/proto/cosmos/authz/v1beta1/genesis.proto +++ b/third_party/proto/cosmos/authz/v1beta1/genesis.proto @@ -2,10 +2,8 @@ syntax = "proto3"; package cosmos.authz.v1beta1; -import "google/protobuf/timestamp.proto"; -import "google/protobuf/any.proto"; import "gogoproto/gogo.proto"; -import "cosmos_proto/cosmos.proto"; +import "cosmos/authz/v1beta1/authz.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/authz"; @@ -13,12 +11,3 @@ option go_package = "github.com/cosmos/cosmos-sdk/x/authz"; message GenesisState { repeated GrantAuthorization authorization = 1 [(gogoproto.nullable) = false]; } - -// GrantAuthorization defines the GenesisState/GrantAuthorization type. -message GrantAuthorization { - string granter = 1; - string grantee = 2; - - google.protobuf.Any authorization = 3 [(cosmos_proto.accepts_interface) = "Authorization"]; - google.protobuf.Timestamp expiration = 4 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; -} diff --git a/third_party/proto/cosmos/authz/v1beta1/query.proto b/third_party/proto/cosmos/authz/v1beta1/query.proto index 428210de01..f668309bed 100644 --- a/third_party/proto/cosmos/authz/v1beta1/query.proto +++ b/third_party/proto/cosmos/authz/v1beta1/query.proto @@ -14,6 +14,20 @@ service Query { rpc Grants(QueryGrantsRequest) returns (QueryGrantsResponse) { option (google.api.http).get = "/cosmos/authz/v1beta1/grants"; } + + // GranterGrants returns list of `GrantAuthorization`, granted by granter. + // + // Since: cosmos-sdk 0.45.2 + rpc GranterGrants(QueryGranterGrantsRequest) returns (QueryGranterGrantsResponse) { + option (google.api.http).get = "/cosmos/authz/v1beta1/grants/granter/{granter}"; + } + + // GranteeGrants returns a list of `GrantAuthorization` by grantee. + // + // Since: cosmos-sdk 0.45.2 + rpc GranteeGrants(QueryGranteeGrantsRequest) returns (QueryGranteeGrantsResponse) { + option (google.api.http).get = "/cosmos/authz/v1beta1/grants/grantee/{grantee}"; + } } // QueryGrantsRequest is the request type for the Query/Grants RPC method. @@ -29,7 +43,39 @@ message QueryGrantsRequest { // QueryGrantsResponse is the response type for the Query/Authorizations RPC method. message QueryGrantsResponse { // authorizations is a list of grants granted for grantee by granter. - repeated cosmos.authz.v1beta1.Grant grants = 1; + repeated Grant grants = 1; + // pagination defines an pagination for the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryGranterGrantsRequest is the request type for the Query/GranterGrants RPC method. +message QueryGranterGrantsRequest { + string granter = 1; + + // pagination defines an pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryGranterGrantsResponse is the response type for the Query/GranterGrants RPC method. +message QueryGranterGrantsResponse { + // grants is a list of grants granted by the granter. + repeated GrantAuthorization grants = 1; + // pagination defines an pagination for the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryGranteeGrantsRequest is the request type for the Query/IssuedGrants RPC method. +message QueryGranteeGrantsRequest { + string grantee = 1; + + // pagination defines an pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryGranteeGrantsResponse is the response type for the Query/GranteeGrants RPC method. +message QueryGranteeGrantsResponse { + // grants is a list of grants granted to the grantee. + repeated GrantAuthorization grants = 1; // pagination defines an pagination for the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; } diff --git a/third_party/proto/cosmos/bank/v1beta1/query.proto b/third_party/proto/cosmos/bank/v1beta1/query.proto index 520ba06964..a567e073f3 100644 --- a/third_party/proto/cosmos/bank/v1beta1/query.proto +++ b/third_party/proto/cosmos/bank/v1beta1/query.proto @@ -21,6 +21,12 @@ service Query { option (google.api.http).get = "/cosmos/bank/v1beta1/balances/{address}"; } + // SpendableBalances queries the spenable balance of all coins for a single + // account. + rpc SpendableBalances(QuerySpendableBalancesRequest) returns (QuerySpendableBalancesResponse) { + option (google.api.http).get = "/cosmos/bank/v1beta1/spendable_balances/{address}"; + } + // TotalSupply queries the total supply of all coins. rpc TotalSupply(QueryTotalSupplyRequest) returns (QueryTotalSupplyResponse) { option (google.api.http).get = "/cosmos/bank/v1beta1/supply"; @@ -49,7 +55,7 @@ service Query { // QueryBalanceRequest is the request type for the Query/Balance RPC method. message QueryBalanceRequest { - option (gogoproto.equal) = false; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; // address is the address to query balances for. @@ -67,7 +73,7 @@ message QueryBalanceResponse { // QueryBalanceRequest is the request type for the Query/AllBalances RPC method. message QueryAllBalancesRequest { - option (gogoproto.equal) = false; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; // address is the address to query balances for. @@ -82,7 +88,31 @@ message QueryAllBalancesRequest { message QueryAllBalancesResponse { // balances is the balances of all the coins. repeated cosmos.base.v1beta1.Coin balances = 1 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QuerySpendableBalancesRequest defines the gRPC request structure for querying +// an account's spendable balances. +message QuerySpendableBalancesRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // address is the address to query spendable balances for. + string address = 1; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QuerySpendableBalancesResponse defines the gRPC response structure for querying +// an account's spendable balances. +message QuerySpendableBalancesResponse { + // balances is the spendable balances of all the coins. + repeated cosmos.base.v1beta1.Coin balances = 1 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; @@ -91,7 +121,7 @@ message QueryAllBalancesResponse { // QueryTotalSupplyRequest is the request type for the Query/TotalSupply RPC // method. message QueryTotalSupplyRequest { - option (gogoproto.equal) = false; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; // pagination defines an optional pagination for the request. @@ -105,7 +135,7 @@ message QueryTotalSupplyRequest { message QueryTotalSupplyResponse { // supply is the supply of the coins repeated cosmos.base.v1beta1.Coin supply = 1 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; // pagination defines the pagination in the response. // diff --git a/third_party/proto/cosmos/base/snapshots/v1beta1/snapshot.proto b/third_party/proto/cosmos/base/snapshots/v1beta1/snapshot.proto index 9ac5a7c31b..6dcc4a933a 100644 --- a/third_party/proto/cosmos/base/snapshots/v1beta1/snapshot.proto +++ b/third_party/proto/cosmos/base/snapshots/v1beta1/snapshot.proto @@ -17,4 +17,41 @@ message Snapshot { // Metadata contains SDK-specific snapshot metadata. message Metadata { repeated bytes chunk_hashes = 1; // SHA-256 chunk hashes -} \ No newline at end of file +} + +// SnapshotItem is an item contained in a rootmulti.Store snapshot. +message SnapshotItem { + // item is the specific type of snapshot item. + oneof item { + SnapshotStoreItem store = 1; + SnapshotIAVLItem iavl = 2 [(gogoproto.customname) = "IAVL"]; + SnapshotExtensionMeta extension = 3; + SnapshotExtensionPayload extension_payload = 4; + } +} + +// SnapshotStoreItem contains metadata about a snapshotted store. +message SnapshotStoreItem { + string name = 1; +} + +// SnapshotIAVLItem is an exported IAVL node. +message SnapshotIAVLItem { + bytes key = 1; + bytes value = 2; + // version is block height + int64 version = 3; + // height is depth of the tree. + int32 height = 4; +} + +// SnapshotExtensionMeta contains metadata about an external snapshotter. +message SnapshotExtensionMeta { + string name = 1; + uint32 format = 2; +} + +// SnapshotExtensionPayload contains payloads of an external snapshotter. +message SnapshotExtensionPayload { + bytes payload = 1; +} diff --git a/third_party/proto/cosmos/base/store/v1beta1/snapshot.proto b/third_party/proto/cosmos/base/store/v1beta1/snapshot.proto deleted file mode 100644 index 834855093b..0000000000 --- a/third_party/proto/cosmos/base/store/v1beta1/snapshot.proto +++ /dev/null @@ -1,28 +0,0 @@ -syntax = "proto3"; -package cosmos.base.store.v1beta1; - -import "gogoproto/gogo.proto"; - -option go_package = "github.com/cosmos/cosmos-sdk/store/types"; - -// SnapshotItem is an item contained in a rootmulti.Store snapshot. -message SnapshotItem { - // item is the specific type of snapshot item. - oneof item { - SnapshotStoreItem store = 1; - SnapshotIAVLItem iavl = 2 [(gogoproto.customname) = "IAVL"]; - } -} - -// SnapshotStoreItem contains metadata about a snapshotted store. -message SnapshotStoreItem { - string name = 1; -} - -// SnapshotIAVLItem is an exported IAVL node. -message SnapshotIAVLItem { - bytes key = 1; - bytes value = 2; - int64 version = 3; - int32 height = 4; -} \ No newline at end of file diff --git a/third_party/proto/cosmos/base/tendermint/v1beta1/query.proto b/third_party/proto/cosmos/base/tendermint/v1beta1/query.proto index 3c31877aa0..98542d23db 100644 --- a/third_party/proto/cosmos/base/tendermint/v1beta1/query.proto +++ b/third_party/proto/cosmos/base/tendermint/v1beta1/query.proto @@ -116,15 +116,15 @@ message GetNodeInfoResponse { // VersionInfo is the type for the GetNodeInfoResponse message. message VersionInfo { - string name = 1; - string app_name = 2; - string version = 3; - string git_commit = 4; - string build_tags = 5; - string go_version = 6; - repeated Module build_deps = 7; + string name = 1; + string app_name = 2; + string version = 3; + string git_commit = 4; + string build_tags = 5; + string go_version = 6; + repeated Module build_deps = 7; // Since: cosmos-sdk 0.43 - string cosmos_sdk_version = 8; + string cosmos_sdk_version = 8; } // Module is the type for VersionInfo diff --git a/third_party/proto/cosmos/feegrant/v1beta1/query.proto b/third_party/proto/cosmos/feegrant/v1beta1/query.proto index 9cf2a4987d..42d7a842de 100644 --- a/third_party/proto/cosmos/feegrant/v1beta1/query.proto +++ b/third_party/proto/cosmos/feegrant/v1beta1/query.proto @@ -20,6 +20,12 @@ service Query { rpc Allowances(QueryAllowancesRequest) returns (QueryAllowancesResponse) { option (google.api.http).get = "/cosmos/feegrant/v1beta1/allowances/{grantee}"; } + + // AllowancesByGranter returns all the grants given by an address + // Since v0.46 + rpc AllowancesByGranter(QueryAllowancesByGranterRequest) returns (QueryAllowancesByGranterResponse) { + option (google.api.http).get = "/cosmos/feegrant/v1beta1/issued/{granter}"; + } } // QueryAllowanceRequest is the request type for the Query/Allowance RPC method. @@ -53,3 +59,20 @@ message QueryAllowancesResponse { // pagination defines an pagination for the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; } + +// QueryAllowancesByGranterRequest is the request type for the Query/AllowancesByGranter RPC method. +message QueryAllowancesByGranterRequest { + string granter = 1; + + // pagination defines an pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryAllowancesByGranterResponse is the response type for the Query/AllowancesByGranter RPC method. +message QueryAllowancesByGranterResponse { + // allowances that have been issued by the granter. + repeated cosmos.feegrant.v1beta1.Grant allowances = 1; + + // pagination defines an pagination for the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} diff --git a/third_party/proto/cosmos/gov/v1beta1/gov.proto b/third_party/proto/cosmos/gov/v1beta1/gov.proto index 344b5ada19..01aebf950c 100644 --- a/third_party/proto/cosmos/gov/v1beta1/gov.proto +++ b/third_party/proto/cosmos/gov/v1beta1/gov.proto @@ -136,7 +136,7 @@ message Vote { // Deprecated: Prefer to use `options` instead. This field is set in queries // if and only if `len(options) == 1` and that option has weight 1. In all // other cases, this field will default to VOTE_OPTION_UNSPECIFIED. - VoteOption option = 3 [deprecated = true]; + VoteOption option = 3 [deprecated = true]; // Since: cosmos-sdk 0.43 repeated WeightedVoteOption options = 4 [(gogoproto.nullable) = false]; } diff --git a/third_party/proto/cosmos/tx/signing/v1beta1/signing.proto b/third_party/proto/cosmos/tx/signing/v1beta1/signing.proto index 4c1be40594..50de89c8fc 100644 --- a/third_party/proto/cosmos/tx/signing/v1beta1/signing.proto +++ b/third_party/proto/cosmos/tx/signing/v1beta1/signing.proto @@ -24,6 +24,18 @@ enum SignMode { // SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses // Amino JSON and will be removed in the future SIGN_MODE_LEGACY_AMINO_JSON = 127; + + // SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos + // SDK. Ref: https://eips.ethereum.org/EIPS/eip-191 + // + // Currently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant, + // but is not implemented on the SDK by default. To enable EIP-191, you need + // to pass a custom `TxConfig` that has an implementation of + // `SignModeHandler` for EIP-191. The SDK may decide to fully support + // EIP-191 in the future. + // + // Since: cosmos-sdk 0.45.2 + SIGN_MODE_EIP_191 = 191; } // SignatureDescriptors wraps multiple SignatureDescriptor's. diff --git a/third_party/proto/cosmos/tx/v1beta1/service.proto b/third_party/proto/cosmos/tx/v1beta1/service.proto index acfbf15b36..d9f828f763 100644 --- a/third_party/proto/cosmos/tx/v1beta1/service.proto +++ b/third_party/proto/cosmos/tx/v1beta1/service.proto @@ -6,6 +6,8 @@ import "cosmos/base/abci/v1beta1/abci.proto"; import "cosmos/tx/v1beta1/tx.proto"; import "gogoproto/gogo.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; +import "tendermint/types/block.proto"; +import "tendermint/types/types.proto"; option (gogoproto.goproto_registration) = true; option go_package = "github.com/cosmos/cosmos-sdk/types/tx"; @@ -34,6 +36,12 @@ service Service { rpc GetTxsEvent(GetTxsEventRequest) returns (GetTxsEventResponse) { option (google.api.http).get = "/cosmos/tx/v1beta1/txs"; } + // GetBlockWithTxs fetches a block with decoded txs. + // + // Since: cosmos-sdk 0.45.2 + rpc GetBlockWithTxs(GetBlockWithTxsRequest) returns (GetBlockWithTxsResponse) { + option (google.api.http).get = "/cosmos/tx/v1beta1/txs/block/{height}"; + } } // GetTxsEventRequest is the request type for the Service.TxsByEvents @@ -41,7 +49,7 @@ service Service { message GetTxsEventRequest { // events is the list of transaction event type. repeated string events = 1; - // pagination defines an pagination for the request. + // pagination defines a pagination for the request. cosmos.base.query.v1beta1.PageRequest pagination = 2; OrderBy order_by = 3; } @@ -63,7 +71,7 @@ message GetTxsEventResponse { repeated cosmos.tx.v1beta1.Tx txs = 1; // tx_responses is the list of queried TxResponses. repeated cosmos.base.abci.v1beta1.TxResponse tx_responses = 2; - // pagination defines an pagination for the response. + // pagination defines a pagination for the response. cosmos.base.query.v1beta1.PageResponse pagination = 3; } @@ -131,4 +139,27 @@ message GetTxResponse { cosmos.tx.v1beta1.Tx tx = 1; // tx_response is the queried TxResponses. cosmos.base.abci.v1beta1.TxResponse tx_response = 2; +} + +// GetBlockWithTxsRequest is the request type for the Service.GetBlockWithTxs +// RPC method. +// +// Since: cosmos-sdk 0.45.2 +message GetBlockWithTxsRequest { + // height is the height of the block to query. + int64 height = 1; + // pagination defines a pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// GetBlockWithTxsResponse is the response type for the Service.GetBlockWithTxs method. +// +// Since: cosmos-sdk 0.45.2 +message GetBlockWithTxsResponse { + // txs are the transactions in the block. + repeated cosmos.tx.v1beta1.Tx txs = 1; + .tendermint.types.BlockID block_id = 2; + .tendermint.types.Block block = 3; + // pagination defines a pagination for the response. + cosmos.base.query.v1beta1.PageResponse pagination = 4; } \ No newline at end of file diff --git a/third_party/proto/tendermint/abci/types.proto b/third_party/proto/tendermint/abci/types.proto index 8e3a909363..340800f46b 100644 --- a/third_party/proto/tendermint/abci/types.proto +++ b/third_party/proto/tendermint/abci/types.proto @@ -102,8 +102,7 @@ message RequestEndBlock { message RequestCommit {} // lists available snapshots -message RequestListSnapshots { -} +message RequestListSnapshots {} // offers a snapshot to the application message RequestOfferSnapshot { @@ -212,6 +211,12 @@ message ResponseCheckTx { repeated Event events = 7 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; string codespace = 8; + string sender = 9; + int64 priority = 10; + + // mempool_error is set by Tendermint. + // ABCI applictions creating a ResponseCheckTX should not set mempool_error. + string mempool_error = 11; } message ResponseDeliverTx { @@ -221,16 +226,17 @@ message ResponseDeliverTx { string info = 4; // nondeterministic int64 gas_wanted = 5 [json_name = "gas_wanted"]; int64 gas_used = 6 [json_name = "gas_used"]; - repeated Event events = 7 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; // nondeterministic + repeated Event events = 7 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "events,omitempty" + ]; // nondeterministic string codespace = 8; } message ResponseEndBlock { - repeated ValidatorUpdate validator_updates = 1 - [(gogoproto.nullable) = false]; - ConsensusParams consensus_param_updates = 2; - repeated Event events = 3 + repeated ValidatorUpdate validator_updates = 1 [(gogoproto.nullable) = false]; + ConsensusParams consensus_param_updates = 2; + repeated Event events = 3 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; } @@ -364,10 +370,8 @@ message Evidence { // The height when the offense occurred int64 height = 3; // The corresponding time where the offense occurred - google.protobuf.Timestamp time = 4 [ - (gogoproto.nullable) = false, - (gogoproto.stdtime) = true - ]; + google.protobuf.Timestamp time = 4 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; // Total voting power of the validator set in case the ABCI application does // not store historical validators. // https://github.com/tendermint/tendermint/issues/4581 @@ -402,6 +406,8 @@ service ABCIApplication { rpc EndBlock(RequestEndBlock) returns (ResponseEndBlock); rpc ListSnapshots(RequestListSnapshots) returns (ResponseListSnapshots); rpc OfferSnapshot(RequestOfferSnapshot) returns (ResponseOfferSnapshot); - rpc LoadSnapshotChunk(RequestLoadSnapshotChunk) returns (ResponseLoadSnapshotChunk); - rpc ApplySnapshotChunk(RequestApplySnapshotChunk) returns (ResponseApplySnapshotChunk); + rpc LoadSnapshotChunk(RequestLoadSnapshotChunk) + returns (ResponseLoadSnapshotChunk); + rpc ApplySnapshotChunk(RequestApplySnapshotChunk) + returns (ResponseApplySnapshotChunk); } diff --git a/third_party/proto/tendermint/consensus/types.proto b/third_party/proto/tendermint/consensus/types.proto index 6e1f413711..5048f85452 100644 --- a/third_party/proto/tendermint/consensus/types.proto +++ b/third_party/proto/tendermint/consensus/types.proto @@ -18,7 +18,7 @@ message NewRoundStep { } // NewValidBlock is sent when a validator observes a valid block B in some round r, -//i.e., there is a Proposal for block B and 2/3+ prevotes for the block B in the round r. +// i.e., there is a Proposal for block B and 2/3+ prevotes for the block B in the round r. // In case the block is also committed, then IsCommit flag is set to true. message NewValidBlock { int64 height = 1; diff --git a/third_party/proto/tendermint/rpc/grpc/types.pb.go b/third_party/proto/tendermint/rpc/grpc/types.pb.go new file mode 100644 index 0000000000..de580d2a66 --- /dev/null +++ b/third_party/proto/tendermint/rpc/grpc/types.pb.go @@ -0,0 +1,953 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: tendermint/rpc/grpc/types.proto + +package coregrpc + +import ( + context "context" + fmt "fmt" + io "io" + math "math" + math_bits "math/bits" + + proto "github.com/gogo/protobuf/proto" + types "github.com/tendermint/tendermint/abci/types" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal + +var ( + _ = fmt.Errorf + _ = math.Inf +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type RequestPing struct{} + +func (m *RequestPing) Reset() { *m = RequestPing{} } +func (m *RequestPing) String() string { return proto.CompactTextString(m) } +func (*RequestPing) ProtoMessage() {} +func (*RequestPing) Descriptor() ([]byte, []int) { + return fileDescriptor_0ffff5682c662b95, []int{0} +} + +func (m *RequestPing) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} + +func (m *RequestPing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RequestPing.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} + +func (m *RequestPing) XXX_Merge(src proto.Message) { + xxx_messageInfo_RequestPing.Merge(m, src) +} + +func (m *RequestPing) XXX_Size() int { + return m.Size() +} + +func (m *RequestPing) XXX_DiscardUnknown() { + xxx_messageInfo_RequestPing.DiscardUnknown(m) +} + +var xxx_messageInfo_RequestPing proto.InternalMessageInfo + +type RequestBroadcastTx struct { + Tx []byte `protobuf:"bytes,1,opt,name=tx,proto3" json:"tx,omitempty"` +} + +func (m *RequestBroadcastTx) Reset() { *m = RequestBroadcastTx{} } +func (m *RequestBroadcastTx) String() string { return proto.CompactTextString(m) } +func (*RequestBroadcastTx) ProtoMessage() {} +func (*RequestBroadcastTx) Descriptor() ([]byte, []int) { + return fileDescriptor_0ffff5682c662b95, []int{1} +} + +func (m *RequestBroadcastTx) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} + +func (m *RequestBroadcastTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RequestBroadcastTx.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} + +func (m *RequestBroadcastTx) XXX_Merge(src proto.Message) { + xxx_messageInfo_RequestBroadcastTx.Merge(m, src) +} + +func (m *RequestBroadcastTx) XXX_Size() int { + return m.Size() +} + +func (m *RequestBroadcastTx) XXX_DiscardUnknown() { + xxx_messageInfo_RequestBroadcastTx.DiscardUnknown(m) +} + +var xxx_messageInfo_RequestBroadcastTx proto.InternalMessageInfo + +func (m *RequestBroadcastTx) GetTx() []byte { + if m != nil { + return m.Tx + } + return nil +} + +type ResponsePing struct{} + +func (m *ResponsePing) Reset() { *m = ResponsePing{} } +func (m *ResponsePing) String() string { return proto.CompactTextString(m) } +func (*ResponsePing) ProtoMessage() {} +func (*ResponsePing) Descriptor() ([]byte, []int) { + return fileDescriptor_0ffff5682c662b95, []int{2} +} + +func (m *ResponsePing) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} + +func (m *ResponsePing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ResponsePing.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} + +func (m *ResponsePing) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResponsePing.Merge(m, src) +} + +func (m *ResponsePing) XXX_Size() int { + return m.Size() +} + +func (m *ResponsePing) XXX_DiscardUnknown() { + xxx_messageInfo_ResponsePing.DiscardUnknown(m) +} + +var xxx_messageInfo_ResponsePing proto.InternalMessageInfo + +type ResponseBroadcastTx struct { + CheckTx *types.ResponseCheckTx `protobuf:"bytes,1,opt,name=check_tx,json=checkTx,proto3" json:"check_tx,omitempty"` + DeliverTx *types.ResponseDeliverTx `protobuf:"bytes,2,opt,name=deliver_tx,json=deliverTx,proto3" json:"deliver_tx,omitempty"` +} + +func (m *ResponseBroadcastTx) Reset() { *m = ResponseBroadcastTx{} } +func (m *ResponseBroadcastTx) String() string { return proto.CompactTextString(m) } +func (*ResponseBroadcastTx) ProtoMessage() {} +func (*ResponseBroadcastTx) Descriptor() ([]byte, []int) { + return fileDescriptor_0ffff5682c662b95, []int{3} +} + +func (m *ResponseBroadcastTx) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} + +func (m *ResponseBroadcastTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ResponseBroadcastTx.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} + +func (m *ResponseBroadcastTx) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResponseBroadcastTx.Merge(m, src) +} + +func (m *ResponseBroadcastTx) XXX_Size() int { + return m.Size() +} + +func (m *ResponseBroadcastTx) XXX_DiscardUnknown() { + xxx_messageInfo_ResponseBroadcastTx.DiscardUnknown(m) +} + +var xxx_messageInfo_ResponseBroadcastTx proto.InternalMessageInfo + +func (m *ResponseBroadcastTx) GetCheckTx() *types.ResponseCheckTx { + if m != nil { + return m.CheckTx + } + return nil +} + +func (m *ResponseBroadcastTx) GetDeliverTx() *types.ResponseDeliverTx { + if m != nil { + return m.DeliverTx + } + return nil +} + +func init() { + proto.RegisterType((*RequestPing)(nil), "tendermint.rpc.grpc.RequestPing") + proto.RegisterType((*RequestBroadcastTx)(nil), "tendermint.rpc.grpc.RequestBroadcastTx") + proto.RegisterType((*ResponsePing)(nil), "tendermint.rpc.grpc.ResponsePing") + proto.RegisterType((*ResponseBroadcastTx)(nil), "tendermint.rpc.grpc.ResponseBroadcastTx") +} + +func init() { proto.RegisterFile("tendermint/rpc/grpc/types.proto", fileDescriptor_0ffff5682c662b95) } + +var fileDescriptor_0ffff5682c662b95 = []byte{ + // 316 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2f, 0x49, 0xcd, 0x4b, + 0x49, 0x2d, 0xca, 0xcd, 0xcc, 0x2b, 0xd1, 0x2f, 0x2a, 0x48, 0xd6, 0x4f, 0x07, 0x11, 0x25, 0x95, + 0x05, 0xa9, 0xc5, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0xc2, 0x08, 0x05, 0x7a, 0x45, 0x05, + 0xc9, 0x7a, 0x20, 0x05, 0x52, 0xd2, 0x48, 0xba, 0x12, 0x93, 0x92, 0x33, 0x91, 0x75, 0x28, 0xf1, + 0x72, 0x71, 0x07, 0xa5, 0x16, 0x96, 0xa6, 0x16, 0x97, 0x04, 0x64, 0xe6, 0xa5, 0x2b, 0xa9, 0x70, + 0x09, 0x41, 0xb9, 0x4e, 0x45, 0xf9, 0x89, 0x29, 0xc9, 0x89, 0xc5, 0x25, 0x21, 0x15, 0x42, 0x7c, + 0x5c, 0x4c, 0x25, 0x15, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x3c, 0x41, 0x4c, 0x25, 0x15, 0x4a, 0x7c, + 0x5c, 0x3c, 0x41, 0xa9, 0xc5, 0x05, 0xf9, 0x79, 0xc5, 0xa9, 0x60, 0x5d, 0x53, 0x19, 0xb9, 0x84, + 0x61, 0x02, 0xc8, 0xfa, 0xac, 0xb9, 0x38, 0x92, 0x33, 0x52, 0x93, 0xb3, 0xe3, 0xa1, 0xba, 0xb9, + 0x8d, 0x14, 0xf4, 0x90, 0x5c, 0x08, 0x72, 0x8c, 0x1e, 0x4c, 0x9f, 0x33, 0x48, 0x61, 0x48, 0x45, + 0x10, 0x7b, 0x32, 0x84, 0x21, 0xe4, 0xc8, 0xc5, 0x95, 0x92, 0x9a, 0x93, 0x59, 0x96, 0x5a, 0x04, + 0xd2, 0xce, 0x04, 0xd6, 0xae, 0x84, 0x53, 0xbb, 0x0b, 0x44, 0x69, 0x48, 0x45, 0x10, 0x67, 0x0a, + 0x8c, 0x69, 0xb4, 0x97, 0x91, 0x8b, 0x07, 0xee, 0x1e, 0xc7, 0x00, 0x4f, 0x21, 0x6f, 0x2e, 0x16, + 0x90, 0x83, 0x85, 0x50, 0x9c, 0x01, 0x0b, 0x28, 0x3d, 0xa4, 0x80, 0x90, 0x52, 0xc4, 0xa1, 0x02, + 0xe1, 0x6b, 0xa1, 0x04, 0x2e, 0x6e, 0x64, 0xcf, 0xaa, 0xe3, 0x33, 0x13, 0x49, 0xa1, 0x94, 0x06, + 0x5e, 0xa3, 0x91, 0x54, 0x3a, 0xf9, 0x9c, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, + 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, + 0x94, 0x51, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x3e, 0x52, 0xf4, 0x62, + 0x49, 0x1f, 0xd6, 0xc9, 0xf9, 0x45, 0xa9, 0x20, 0x46, 0x12, 0x1b, 0x38, 0xc6, 0x8d, 0x01, 0x01, + 0x00, 0x00, 0xff, 0xff, 0xf6, 0x4b, 0x02, 0xd8, 0x46, 0x02, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// BroadcastAPIClient is the client API for BroadcastAPI service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type BroadcastAPIClient interface { + Ping(ctx context.Context, in *RequestPing, opts ...grpc.CallOption) (*ResponsePing, error) + BroadcastTx(ctx context.Context, in *RequestBroadcastTx, opts ...grpc.CallOption) (*ResponseBroadcastTx, error) +} + +type broadcastAPIClient struct { + cc *grpc.ClientConn +} + +func NewBroadcastAPIClient(cc *grpc.ClientConn) BroadcastAPIClient { + return &broadcastAPIClient{cc} +} + +func (c *broadcastAPIClient) Ping(ctx context.Context, in *RequestPing, opts ...grpc.CallOption) (*ResponsePing, error) { + out := new(ResponsePing) + err := c.cc.Invoke(ctx, "/tendermint.rpc.grpc.BroadcastAPI/Ping", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *broadcastAPIClient) BroadcastTx(ctx context.Context, in *RequestBroadcastTx, opts ...grpc.CallOption) (*ResponseBroadcastTx, error) { + out := new(ResponseBroadcastTx) + err := c.cc.Invoke(ctx, "/tendermint.rpc.grpc.BroadcastAPI/BroadcastTx", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// BroadcastAPIServer is the server API for BroadcastAPI service. +type BroadcastAPIServer interface { + Ping(context.Context, *RequestPing) (*ResponsePing, error) + BroadcastTx(context.Context, *RequestBroadcastTx) (*ResponseBroadcastTx, error) +} + +// UnimplementedBroadcastAPIServer can be embedded to have forward compatible implementations. +type UnimplementedBroadcastAPIServer struct{} + +func (*UnimplementedBroadcastAPIServer) Ping(ctx context.Context, req *RequestPing) (*ResponsePing, error) { + return nil, status.Errorf(codes.Unimplemented, "method Ping not implemented") +} + +func (*UnimplementedBroadcastAPIServer) BroadcastTx(ctx context.Context, req *RequestBroadcastTx) (*ResponseBroadcastTx, error) { + return nil, status.Errorf(codes.Unimplemented, "method BroadcastTx not implemented") +} + +func RegisterBroadcastAPIServer(s *grpc.Server, srv BroadcastAPIServer) { + s.RegisterService(&_BroadcastAPI_serviceDesc, srv) +} + +func _BroadcastAPI_Ping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RequestPing) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BroadcastAPIServer).Ping(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/tendermint.rpc.grpc.BroadcastAPI/Ping", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BroadcastAPIServer).Ping(ctx, req.(*RequestPing)) + } + return interceptor(ctx, in, info, handler) +} + +func _BroadcastAPI_BroadcastTx_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RequestBroadcastTx) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BroadcastAPIServer).BroadcastTx(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/tendermint.rpc.grpc.BroadcastAPI/BroadcastTx", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BroadcastAPIServer).BroadcastTx(ctx, req.(*RequestBroadcastTx)) + } + return interceptor(ctx, in, info, handler) +} + +var _BroadcastAPI_serviceDesc = grpc.ServiceDesc{ + ServiceName: "tendermint.rpc.grpc.BroadcastAPI", + HandlerType: (*BroadcastAPIServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Ping", + Handler: _BroadcastAPI_Ping_Handler, + }, + { + MethodName: "BroadcastTx", + Handler: _BroadcastAPI_BroadcastTx_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "tendermint/rpc/grpc/types.proto", +} + +func (m *RequestPing) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RequestPing) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RequestPing) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *RequestBroadcastTx) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RequestBroadcastTx) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RequestBroadcastTx) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Tx) > 0 { + i -= len(m.Tx) + copy(dAtA[i:], m.Tx) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Tx))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ResponsePing) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ResponsePing) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResponsePing) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *ResponseBroadcastTx) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ResponseBroadcastTx) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResponseBroadcastTx) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.DeliverTx != nil { + { + size, err := m.DeliverTx.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.CheckTx != nil { + { + size, err := m.CheckTx.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintTypes(dAtA []byte, offset int, v uint64) int { + offset -= sovTypes(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} + +func (m *RequestPing) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *RequestBroadcastTx) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Tx) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + return n +} + +func (m *ResponsePing) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *ResponseBroadcastTx) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.CheckTx != nil { + l = m.CheckTx.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.DeliverTx != nil { + l = m.DeliverTx.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} + +func sovTypes(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} + +func sozTypes(x uint64) (n int) { + return sovTypes(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} + +func (m *RequestPing) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RequestPing: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RequestPing: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} + +func (m *RequestBroadcastTx) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RequestBroadcastTx: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RequestBroadcastTx: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Tx", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Tx = append(m.Tx[:0], dAtA[iNdEx:postIndex]...) + if m.Tx == nil { + m.Tx = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} + +func (m *ResponsePing) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResponsePing: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResponsePing: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} + +func (m *ResponseBroadcastTx) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResponseBroadcastTx: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResponseBroadcastTx: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CheckTx", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.CheckTx == nil { + m.CheckTx = &types.ResponseCheckTx{} + } + if err := m.CheckTx.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DeliverTx", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.DeliverTx == nil { + m.DeliverTx = &types.ResponseDeliverTx{} + } + if err := m.DeliverTx.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} + +func skipTypes(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTypes + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTypes + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTypes + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTypes + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTypes + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTypes + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTypes = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTypes = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTypes = fmt.Errorf("proto: unexpected end of group") +) diff --git a/third_party/proto/tendermint/state/types.pb.go b/third_party/proto/tendermint/state/types.pb.go index b9e4b6d127..6f56294825 100644 --- a/third_party/proto/tendermint/state/types.pb.go +++ b/third_party/proto/tendermint/state/types.pb.go @@ -218,6 +218,63 @@ func (m *ConsensusParamsInfo) GetLastHeightChanged() int64 { return 0 } +type ABCIResponsesInfo struct { + AbciResponses *ABCIResponses `protobuf:"bytes,1,opt,name=abci_responses,json=abciResponses,proto3" json:"abci_responses,omitempty"` + Height int64 `protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"` +} + +func (m *ABCIResponsesInfo) Reset() { *m = ABCIResponsesInfo{} } +func (m *ABCIResponsesInfo) String() string { return proto.CompactTextString(m) } +func (*ABCIResponsesInfo) ProtoMessage() {} +func (*ABCIResponsesInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_ccfacf933f22bf93, []int{3} +} + +func (m *ABCIResponsesInfo) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} + +func (m *ABCIResponsesInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ABCIResponsesInfo.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} + +func (m *ABCIResponsesInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_ABCIResponsesInfo.Merge(m, src) +} + +func (m *ABCIResponsesInfo) XXX_Size() int { + return m.Size() +} + +func (m *ABCIResponsesInfo) XXX_DiscardUnknown() { + xxx_messageInfo_ABCIResponsesInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_ABCIResponsesInfo proto.InternalMessageInfo + +func (m *ABCIResponsesInfo) GetAbciResponses() *ABCIResponses { + if m != nil { + return m.AbciResponses + } + return nil +} + +func (m *ABCIResponsesInfo) GetHeight() int64 { + if m != nil { + return m.Height + } + return 0 +} + type Version struct { Consensus version.Consensus `protobuf:"bytes,1,opt,name=consensus,proto3" json:"consensus"` Software string `protobuf:"bytes,2,opt,name=software,proto3" json:"software,omitempty"` @@ -227,7 +284,7 @@ func (m *Version) Reset() { *m = Version{} } func (m *Version) String() string { return proto.CompactTextString(m) } func (*Version) ProtoMessage() {} func (*Version) Descriptor() ([]byte, []int) { - return fileDescriptor_ccfacf933f22bf93, []int{3} + return fileDescriptor_ccfacf933f22bf93, []int{4} } func (m *Version) XXX_Unmarshal(b []byte) error { @@ -308,7 +365,7 @@ func (m *State) Reset() { *m = State{} } func (m *State) String() string { return proto.CompactTextString(m) } func (*State) ProtoMessage() {} func (*State) Descriptor() ([]byte, []int) { - return fileDescriptor_ccfacf933f22bf93, []int{4} + return fileDescriptor_ccfacf933f22bf93, []int{5} } func (m *State) XXX_Unmarshal(b []byte) error { @@ -444,6 +501,7 @@ func init() { proto.RegisterType((*ABCIResponses)(nil), "tendermint.state.ABCIResponses") proto.RegisterType((*ValidatorsInfo)(nil), "tendermint.state.ValidatorsInfo") proto.RegisterType((*ConsensusParamsInfo)(nil), "tendermint.state.ConsensusParamsInfo") + proto.RegisterType((*ABCIResponsesInfo)(nil), "tendermint.state.ABCIResponsesInfo") proto.RegisterType((*Version)(nil), "tendermint.state.Version") proto.RegisterType((*State)(nil), "tendermint.state.State") } @@ -451,55 +509,58 @@ func init() { func init() { proto.RegisterFile("tendermint/state/types.proto", fileDescriptor_ccfacf933f22bf93) } var fileDescriptor_ccfacf933f22bf93 = []byte{ - // 763 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0xcf, 0x6f, 0xd3, 0x30, - 0x14, 0x6e, 0xe8, 0xb6, 0xb6, 0xce, 0xda, 0x0e, 0x8f, 0x43, 0xd6, 0xb1, 0xb4, 0x2b, 0x3f, 0x34, - 0x71, 0x48, 0xa5, 0x71, 0x40, 0x5c, 0x26, 0x2d, 0x2d, 0x62, 0x95, 0x26, 0x04, 0xd9, 0xb4, 0x03, - 0x97, 0xc8, 0x6d, 0xbc, 0x24, 0xa2, 0x4d, 0xa2, 0xd8, 0x2d, 0xe3, 0x0f, 0xe0, 0xbe, 0x2b, 0xff, - 0xd1, 0x8e, 0x3b, 0x22, 0x0e, 0x03, 0xba, 0x7f, 0x04, 0xd9, 0xce, 0x0f, 0xb7, 0x65, 0xd2, 0x10, - 0x37, 0xfb, 0x7d, 0xdf, 0xfb, 0xfc, 0xf9, 0xf9, 0x3d, 0x19, 0x3c, 0xa6, 0x38, 0x70, 0x70, 0x3c, - 0xf6, 0x03, 0xda, 0x21, 0x14, 0x51, 0xdc, 0xa1, 0x5f, 0x22, 0x4c, 0x8c, 0x28, 0x0e, 0x69, 0x08, - 0x37, 0x72, 0xd4, 0xe0, 0x68, 0xe3, 0x91, 0x1b, 0xba, 0x21, 0x07, 0x3b, 0x6c, 0x25, 0x78, 0x8d, - 0x6d, 0x49, 0x05, 0x0d, 0x86, 0xbe, 0x2c, 0xd2, 0x90, 0x8f, 0xe0, 0xf1, 0x39, 0xb4, 0xb5, 0x84, - 0x4e, 0xd1, 0xc8, 0x77, 0x10, 0x0d, 0xe3, 0x84, 0xb1, 0xb3, 0xc4, 0x88, 0x50, 0x8c, 0xc6, 0xa9, - 0x80, 0x2e, 0xc1, 0x53, 0x1c, 0x13, 0x3f, 0x0c, 0xe6, 0x0e, 0x68, 0xba, 0x61, 0xe8, 0x8e, 0x70, - 0x87, 0xef, 0x06, 0x93, 0xf3, 0x0e, 0xf5, 0xc7, 0x98, 0x50, 0x34, 0x8e, 0x04, 0xa1, 0xfd, 0x43, - 0x01, 0xd5, 0x43, 0xb3, 0xdb, 0xb7, 0x30, 0x89, 0xc2, 0x80, 0x60, 0x02, 0xbb, 0x40, 0x75, 0xf0, - 0xc8, 0x9f, 0xe2, 0xd8, 0xa6, 0x17, 0x44, 0x53, 0x5a, 0xc5, 0x3d, 0x75, 0xbf, 0x6d, 0x48, 0xc5, - 0x60, 0x97, 0x34, 0xd2, 0x84, 0x9e, 0xe0, 0x9e, 0x5e, 0x58, 0xc0, 0x49, 0x97, 0x04, 0x1e, 0x80, - 0x0a, 0x0e, 0x1c, 0x7b, 0x30, 0x0a, 0x87, 0x9f, 0xb4, 0x07, 0x2d, 0x65, 0x4f, 0xdd, 0xdf, 0xbd, - 0x53, 0xe2, 0x4d, 0xe0, 0x98, 0x8c, 0x68, 0x95, 0x71, 0xb2, 0x82, 0x3d, 0xa0, 0x0e, 0xb0, 0xeb, - 0x07, 0x89, 0x42, 0x91, 0x2b, 0x3c, 0xb9, 0x53, 0xc1, 0x64, 0x5c, 0xa1, 0x01, 0x06, 0xd9, 0xba, - 0xfd, 0x55, 0x01, 0xb5, 0xb3, 0xb4, 0xa0, 0xa4, 0x1f, 0x9c, 0x87, 0xb0, 0x0b, 0xaa, 0x59, 0x89, - 0x6d, 0x82, 0xa9, 0xa6, 0x70, 0x69, 0x5d, 0x96, 0x16, 0x05, 0xcc, 0x12, 0x4f, 0x30, 0xb5, 0xd6, - 0xa7, 0xd2, 0x0e, 0x1a, 0x60, 0x73, 0x84, 0x08, 0xb5, 0x3d, 0xec, 0xbb, 0x1e, 0xb5, 0x87, 0x1e, - 0x0a, 0x5c, 0xec, 0xf0, 0x7b, 0x16, 0xad, 0x87, 0x0c, 0x3a, 0xe2, 0x48, 0x57, 0x00, 0xed, 0x6f, - 0x0a, 0xd8, 0xec, 0x32, 0x9f, 0x01, 0x99, 0x90, 0xf7, 0xfc, 0xfd, 0xb8, 0x19, 0x0b, 0x6c, 0x0c, - 0xd3, 0xb0, 0x2d, 0xde, 0x35, 0xf1, 0xb3, 0xbb, 0xec, 0x67, 0x41, 0xc0, 0x5c, 0xb9, 0xba, 0x69, - 0x16, 0xac, 0xfa, 0x70, 0x3e, 0xfc, 0xcf, 0xde, 0x3c, 0x50, 0x3a, 0x13, 0x8d, 0x03, 0x0f, 0x41, - 0x25, 0x53, 0x4b, 0x7c, 0xec, 0xc8, 0x3e, 0x92, 0x06, 0xcb, 0x9d, 0x24, 0x1e, 0xf2, 0x2c, 0xd8, - 0x00, 0x65, 0x12, 0x9e, 0xd3, 0xcf, 0x28, 0xc6, 0xfc, 0xc8, 0x8a, 0x95, 0xed, 0xdb, 0xbf, 0xd7, - 0xc0, 0xea, 0x09, 0x9b, 0x23, 0xf8, 0x1a, 0x94, 0x12, 0xad, 0xe4, 0x98, 0x2d, 0x63, 0x71, 0xd6, - 0x8c, 0xc4, 0x54, 0x72, 0x44, 0xca, 0x87, 0xcf, 0x41, 0x79, 0xe8, 0x21, 0x3f, 0xb0, 0x7d, 0x71, - 0xa7, 0x8a, 0xa9, 0xce, 0x6e, 0x9a, 0xa5, 0x2e, 0x8b, 0xf5, 0x7b, 0x56, 0x89, 0x83, 0x7d, 0x07, - 0x3e, 0x03, 0x35, 0x3f, 0xf0, 0xa9, 0x8f, 0x46, 0x49, 0x25, 0xb4, 0x1a, 0xaf, 0x40, 0x35, 0x89, - 0x8a, 0x22, 0xc0, 0x17, 0x80, 0x97, 0x44, 0xb4, 0x59, 0xca, 0x2c, 0x72, 0x66, 0x9d, 0x01, 0xbc, - 0x8f, 0x12, 0xae, 0x05, 0xaa, 0x12, 0xd7, 0x77, 0xb4, 0x95, 0x65, 0xef, 0xe2, 0xa9, 0x78, 0x56, - 0xbf, 0x67, 0x6e, 0x32, 0xef, 0xb3, 0x9b, 0xa6, 0x7a, 0x9c, 0x4a, 0xf5, 0x7b, 0x96, 0x9a, 0xe9, - 0xf6, 0x1d, 0x78, 0x0c, 0xea, 0x92, 0x26, 0x1b, 0x4e, 0x6d, 0x95, 0xab, 0x36, 0x0c, 0x31, 0xb9, - 0x46, 0x3a, 0xb9, 0xc6, 0x69, 0x3a, 0xb9, 0x66, 0x99, 0xc9, 0x5e, 0xfe, 0x6c, 0x2a, 0x56, 0x35, - 0xd3, 0x62, 0x28, 0x7c, 0x0b, 0xea, 0x01, 0xbe, 0xa0, 0x76, 0xd6, 0xac, 0x44, 0x5b, 0xbb, 0x57, - 0x7b, 0xd7, 0x58, 0x5a, 0x3e, 0x29, 0xf0, 0x00, 0x00, 0x49, 0xa3, 0x74, 0x2f, 0x0d, 0x29, 0x83, - 0x19, 0xe1, 0xd7, 0x92, 0x44, 0xca, 0xf7, 0x33, 0xc2, 0xd2, 0x24, 0x23, 0x5d, 0xa0, 0xcb, 0xdd, - 0x9c, 0xeb, 0x65, 0x8d, 0x5d, 0xe1, 0x8f, 0xb5, 0x9d, 0x37, 0x76, 0x9e, 0x9d, 0xb4, 0xf8, 0x5f, - 0xc7, 0x0c, 0xfc, 0xe7, 0x98, 0xbd, 0x03, 0x4f, 0xe7, 0xc6, 0x6c, 0x41, 0x3f, 0xb3, 0xa7, 0x72, - 0x7b, 0x2d, 0x69, 0xee, 0xe6, 0x85, 0x52, 0x8f, 0x69, 0x23, 0xc6, 0x98, 0x4c, 0x46, 0x94, 0xd8, - 0x1e, 0x22, 0x9e, 0xb6, 0xde, 0x52, 0xf6, 0xd6, 0x45, 0x23, 0x5a, 0x22, 0x7e, 0x84, 0x88, 0x07, - 0xb7, 0x40, 0x19, 0x45, 0x91, 0xa0, 0x54, 0x39, 0xa5, 0x84, 0xa2, 0x88, 0x41, 0xe6, 0x87, 0xab, - 0x99, 0xae, 0x5c, 0xcf, 0x74, 0xe5, 0xd7, 0x4c, 0x57, 0x2e, 0x6f, 0xf5, 0xc2, 0xf5, 0xad, 0x5e, - 0xf8, 0x7e, 0xab, 0x17, 0x3e, 0xbe, 0x72, 0x7d, 0xea, 0x4d, 0x06, 0xc6, 0x30, 0x1c, 0x77, 0xe4, - 0x3f, 0x25, 0x5f, 0x8a, 0x8f, 0x6d, 0xf1, 0x4b, 0x1c, 0xac, 0xf1, 0xf8, 0xcb, 0x3f, 0x01, 0x00, - 0x00, 0xff, 0xff, 0xa5, 0x17, 0xac, 0x23, 0x2d, 0x07, 0x00, 0x00, + // 805 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0xcd, 0x8e, 0xe3, 0x44, + 0x10, 0x8e, 0xc9, 0x6e, 0x7e, 0xca, 0x93, 0x64, 0xb7, 0x07, 0x21, 0x6f, 0x96, 0x75, 0xb2, 0xe1, + 0x47, 0x23, 0x0e, 0x8e, 0xb4, 0x1c, 0x10, 0x97, 0x95, 0xd6, 0x09, 0xb0, 0x91, 0x56, 0x08, 0x3c, + 0xa3, 0x39, 0x70, 0xb1, 0x3a, 0x71, 0x8f, 0x6d, 0x91, 0xd8, 0x96, 0xbb, 0x13, 0x86, 0x07, 0xe0, + 0x3e, 0x57, 0xde, 0x68, 0x8e, 0x73, 0x44, 0x1c, 0x06, 0xc8, 0xbc, 0x08, 0xea, 0x1f, 0xdb, 0x9d, + 0x84, 0x91, 0x06, 0xed, 0xad, 0x5d, 0xf5, 0xd5, 0x57, 0x5f, 0x55, 0x57, 0xb5, 0xe1, 0x63, 0x46, + 0x92, 0x80, 0xe4, 0xab, 0x38, 0x61, 0x63, 0xca, 0x30, 0x23, 0x63, 0xf6, 0x6b, 0x46, 0xa8, 0x93, + 0xe5, 0x29, 0x4b, 0xd1, 0x93, 0xca, 0xeb, 0x08, 0x6f, 0xff, 0xc3, 0x30, 0x0d, 0x53, 0xe1, 0x1c, + 0xf3, 0x93, 0xc4, 0xf5, 0x9f, 0x6b, 0x2c, 0x78, 0xbe, 0x88, 0x75, 0x92, 0xbe, 0x9e, 0x42, 0xd8, + 0x77, 0xbc, 0xc3, 0x03, 0xef, 0x06, 0x2f, 0xe3, 0x00, 0xb3, 0x34, 0x57, 0x88, 0x17, 0x07, 0x88, + 0x0c, 0xe7, 0x78, 0x55, 0x10, 0xd8, 0x9a, 0x7b, 0x43, 0x72, 0x1a, 0xa7, 0xc9, 0x4e, 0x82, 0x41, + 0x98, 0xa6, 0xe1, 0x92, 0x8c, 0xc5, 0xd7, 0x7c, 0x7d, 0x31, 0x66, 0xf1, 0x8a, 0x50, 0x86, 0x57, + 0x99, 0x04, 0x8c, 0xfe, 0x34, 0xa0, 0xf3, 0xc6, 0x9d, 0xcc, 0x3c, 0x42, 0xb3, 0x34, 0xa1, 0x84, + 0xa2, 0x09, 0x98, 0x01, 0x59, 0xc6, 0x1b, 0x92, 0xfb, 0xec, 0x92, 0x5a, 0xc6, 0xb0, 0x7e, 0x62, + 0xbe, 0x1a, 0x39, 0x5a, 0x33, 0x78, 0x91, 0x4e, 0x11, 0x30, 0x95, 0xd8, 0xb3, 0x4b, 0x0f, 0x82, + 0xe2, 0x48, 0xd1, 0x6b, 0x68, 0x93, 0x24, 0xf0, 0xe7, 0xcb, 0x74, 0xf1, 0xb3, 0xf5, 0xc1, 0xd0, + 0x38, 0x31, 0x5f, 0xbd, 0xbc, 0x97, 0xe2, 0x9b, 0x24, 0x70, 0x39, 0xd0, 0x6b, 0x11, 0x75, 0x42, + 0x53, 0x30, 0xe7, 0x24, 0x8c, 0x13, 0xc5, 0x50, 0x17, 0x0c, 0x9f, 0xdc, 0xcb, 0xe0, 0x72, 0xac, + 0xe4, 0x80, 0x79, 0x79, 0x1e, 0xfd, 0x66, 0x40, 0xf7, 0xbc, 0x68, 0x28, 0x9d, 0x25, 0x17, 0x29, + 0x9a, 0x40, 0xa7, 0x6c, 0xb1, 0x4f, 0x09, 0xb3, 0x0c, 0x41, 0x6d, 0xeb, 0xd4, 0xb2, 0x81, 0x65, + 0xe0, 0x29, 0x61, 0xde, 0xd1, 0x46, 0xfb, 0x42, 0x0e, 0x1c, 0x2f, 0x31, 0x65, 0x7e, 0x44, 0xe2, + 0x30, 0x62, 0xfe, 0x22, 0xc2, 0x49, 0x48, 0x02, 0x51, 0x67, 0xdd, 0x7b, 0xca, 0x5d, 0x6f, 0x85, + 0x67, 0x22, 0x1d, 0xa3, 0xdf, 0x0d, 0x38, 0x9e, 0x70, 0x9d, 0x09, 0x5d, 0xd3, 0x1f, 0xc4, 0xfd, + 0x09, 0x31, 0x1e, 0x3c, 0x59, 0x14, 0x66, 0x5f, 0xde, 0xab, 0xd2, 0xf3, 0xf2, 0x50, 0xcf, 0x1e, + 0x81, 0xfb, 0xe8, 0xfa, 0x76, 0x50, 0xf3, 0x7a, 0x8b, 0x5d, 0xf3, 0xff, 0xd6, 0x46, 0xe1, 0xe9, + 0xce, 0xfd, 0x0b, 0x61, 0xdf, 0x42, 0x97, 0xf7, 0xd7, 0xcf, 0x0b, 0xab, 0x92, 0x35, 0x70, 0xf6, + 0x77, 0xc2, 0xd9, 0x09, 0xf6, 0x3a, 0x3c, 0xac, 0x9a, 0xa5, 0x8f, 0xa0, 0x21, 0x75, 0xa8, 0xfc, + 0xea, 0x6b, 0x14, 0x41, 0xf3, 0x5c, 0x4e, 0x2b, 0x7a, 0x03, 0xed, 0xb2, 0x04, 0x95, 0xe5, 0x85, + 0x9e, 0x45, 0x4d, 0x75, 0x55, 0xbe, 0x2a, 0xbc, 0x8a, 0x42, 0x7d, 0x68, 0xd1, 0xf4, 0x82, 0xfd, + 0x82, 0x73, 0x22, 0xf2, 0xb4, 0xbd, 0xf2, 0x7b, 0xf4, 0x4f, 0x03, 0x1e, 0x9f, 0x72, 0xa1, 0xe8, + 0x6b, 0x68, 0x2a, 0x2e, 0x95, 0xe6, 0xd9, 0x61, 0x31, 0x4a, 0x94, 0x4a, 0x51, 0xe0, 0xd1, 0xe7, + 0xd0, 0x5a, 0x44, 0x38, 0x4e, 0xfc, 0x58, 0x36, 0xb2, 0xed, 0x9a, 0xdb, 0xdb, 0x41, 0x73, 0xc2, + 0x6d, 0xb3, 0xa9, 0xd7, 0x14, 0xce, 0x59, 0x80, 0x3e, 0x83, 0x6e, 0x9c, 0xc4, 0x2c, 0xc6, 0x4b, + 0xd5, 0x7e, 0xab, 0x2b, 0xca, 0xee, 0x28, 0xab, 0xec, 0x3c, 0xfa, 0x02, 0xc4, 0x3d, 0xc8, 0xd9, + 0x2e, 0x90, 0x75, 0x81, 0xec, 0x71, 0x87, 0x18, 0x5e, 0x85, 0xf5, 0xa0, 0xa3, 0x61, 0xe3, 0xc0, + 0x7a, 0x74, 0xa8, 0x5d, 0xce, 0x87, 0x88, 0x9a, 0x4d, 0xdd, 0x63, 0xae, 0x7d, 0x7b, 0x3b, 0x30, + 0xdf, 0x15, 0x54, 0xb3, 0xa9, 0x67, 0x96, 0xbc, 0xb3, 0x00, 0xbd, 0x83, 0x9e, 0xc6, 0xc9, 0x5f, + 0x04, 0xeb, 0xb1, 0x60, 0xed, 0x3b, 0xf2, 0xb9, 0x70, 0x8a, 0xe7, 0xc2, 0x39, 0x2b, 0x9e, 0x0b, + 0xb7, 0xc5, 0x69, 0xaf, 0xfe, 0x1a, 0x18, 0x5e, 0xa7, 0xe4, 0xe2, 0x5e, 0xf4, 0x1d, 0xf4, 0x12, + 0x72, 0xc9, 0xfc, 0x72, 0x43, 0xa8, 0xd5, 0x78, 0xd0, 0x4e, 0x75, 0x79, 0x58, 0xb5, 0x9e, 0xe8, + 0x35, 0x80, 0xc6, 0xd1, 0x7c, 0x10, 0x87, 0x16, 0xc1, 0x85, 0x88, 0xb2, 0x34, 0x92, 0xd6, 0xc3, + 0x84, 0xf0, 0x30, 0x4d, 0xc8, 0x04, 0x6c, 0x7d, 0x85, 0x2a, 0xbe, 0x72, 0x9b, 0xda, 0xe2, 0xb2, + 0x9e, 0x57, 0xdb, 0x54, 0x45, 0xab, 0xbd, 0xfa, 0xcf, 0xdd, 0x86, 0xf7, 0xdc, 0xed, 0xef, 0xe1, + 0xd3, 0x9d, 0xdd, 0xde, 0xe3, 0x2f, 0xe5, 0x99, 0x42, 0xde, 0x50, 0x5b, 0xf6, 0x5d, 0xa2, 0x42, + 0x63, 0x31, 0x88, 0x39, 0xa1, 0xeb, 0x25, 0xa3, 0x7e, 0x84, 0x69, 0x64, 0x1d, 0x0d, 0x8d, 0x93, + 0x23, 0x39, 0x88, 0x9e, 0xb4, 0xbf, 0xc5, 0x34, 0x42, 0xcf, 0xa0, 0x85, 0xb3, 0x4c, 0x42, 0x3a, + 0x02, 0xd2, 0xc4, 0x59, 0xc6, 0x5d, 0xee, 0x8f, 0xd7, 0x5b, 0xdb, 0xb8, 0xd9, 0xda, 0xc6, 0xdf, + 0x5b, 0xdb, 0xb8, 0xba, 0xb3, 0x6b, 0x37, 0x77, 0x76, 0xed, 0x8f, 0x3b, 0xbb, 0xf6, 0xd3, 0x57, + 0x61, 0xcc, 0xa2, 0xf5, 0xdc, 0x59, 0xa4, 0xab, 0xb1, 0xfe, 0x23, 0xab, 0x8e, 0xf2, 0x6f, 0xba, + 0xff, 0x1f, 0x9e, 0x37, 0x84, 0xfd, 0xcb, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x2b, 0x1a, 0xb9, + 0x2e, 0xa2, 0x07, 0x00, 0x00, } func (m *ABCIResponses) Marshal() (dAtA []byte, err error) { @@ -641,6 +702,46 @@ func (m *ConsensusParamsInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ABCIResponsesInfo) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ABCIResponsesInfo) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ABCIResponsesInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Height != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.Height)) + i-- + dAtA[i] = 0x10 + } + if m.AbciResponses != nil { + { + size, err := m.AbciResponses.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *Version) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -776,12 +877,12 @@ func (m *State) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x32 } - n10, err10 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastBlockTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastBlockTime):]) - if err10 != nil { - return 0, err10 + n11, err11 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastBlockTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastBlockTime):]) + if err11 != nil { + return 0, err11 } - i -= n10 - i = encodeVarintTypes(dAtA, i, uint64(n10)) + i -= n11 + i = encodeVarintTypes(dAtA, i, uint64(n11)) i-- dAtA[i] = 0x2a { @@ -884,6 +985,22 @@ func (m *ConsensusParamsInfo) Size() (n int) { return n } +func (m *ABCIResponsesInfo) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.AbciResponses != nil { + l = m.AbciResponses.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.Height != 0 { + n += 1 + sovTypes(uint64(m.Height)) + } + return n +} + func (m *Version) Size() (n int) { if m == nil { return 0 @@ -1326,6 +1443,112 @@ func (m *ConsensusParamsInfo) Unmarshal(dAtA []byte) error { return nil } +func (m *ABCIResponsesInfo) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ABCIResponsesInfo: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ABCIResponsesInfo: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AbciResponses", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AbciResponses == nil { + m.AbciResponses = &ABCIResponses{} + } + if err := m.AbciResponses.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType) + } + m.Height = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Height |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} + func (m *Version) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/third_party/proto/tendermint/state/types.proto b/third_party/proto/tendermint/state/types.proto index 919da91e52..f3fdc0ef39 100644 --- a/third_party/proto/tendermint/state/types.proto +++ b/third_party/proto/tendermint/state/types.proto @@ -32,6 +32,11 @@ message ConsensusParamsInfo { int64 last_height_changed = 2; } +message ABCIResponsesInfo { + ABCIResponses abci_responses = 1; + int64 height = 2; +} + message Version { tendermint.version.Consensus consensus = 1 [(gogoproto.nullable) = false]; string software = 2; diff --git a/third_party/proto/tendermint/types/evidence.proto b/third_party/proto/tendermint/types/evidence.proto index 3b234571ba..451b8dca3c 100644 --- a/third_party/proto/tendermint/types/evidence.proto +++ b/third_party/proto/tendermint/types/evidence.proto @@ -17,20 +17,20 @@ message Evidence { // DuplicateVoteEvidence contains evidence of a validator signed two conflicting votes. message DuplicateVoteEvidence { - tendermint.types.Vote vote_a = 1; - tendermint.types.Vote vote_b = 2; - int64 total_voting_power = 3; - int64 validator_power = 4; - google.protobuf.Timestamp timestamp = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + tendermint.types.Vote vote_a = 1; + tendermint.types.Vote vote_b = 2; + int64 total_voting_power = 3; + int64 validator_power = 4; + google.protobuf.Timestamp timestamp = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; } // LightClientAttackEvidence contains evidence of a set of validators attempting to mislead a light client. message LightClientAttackEvidence { - tendermint.types.LightBlock conflicting_block = 1; - int64 common_height = 2; + tendermint.types.LightBlock conflicting_block = 1; + int64 common_height = 2; repeated tendermint.types.Validator byzantine_validators = 3; - int64 total_voting_power = 4; - google.protobuf.Timestamp timestamp = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + int64 total_voting_power = 4; + google.protobuf.Timestamp timestamp = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; } message EvidenceList { diff --git a/third_party/proto/tendermint/types/types.proto b/third_party/proto/tendermint/types/types.proto index 7f7ea74cac..8d4f009729 100644 --- a/third_party/proto/tendermint/types/types.proto +++ b/third_party/proto/tendermint/types/types.proto @@ -106,10 +106,10 @@ message Vote { // Commit contains the evidence that a block was committed by a set of validators. message Commit { - int64 height = 1; - int32 round = 2; - BlockID block_id = 3 [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; - repeated CommitSig signatures = 4 [(gogoproto.nullable) = false]; + int64 height = 1; + int32 round = 2; + BlockID block_id = 3 [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; + repeated CommitSig signatures = 4 [(gogoproto.nullable) = false]; } // CommitSig is a part of the Vote included in a Commit. From 881d0aca94fd99bbfa3eb3e3bdbfa114f54501fb Mon Sep 17 00:00:00 2001 From: jhernandezb Date: Mon, 5 Sep 2022 09:41:45 -0600 Subject: [PATCH 067/120] add pin code flag to store code proposal --- docs/proto/proto-docs.md | 1 + proto/cosmwasm/wasm/v1/proposal.proto | 2 + x/wasm/client/cli/gov_tx.go | 7 + x/wasm/client/cli/tx.go | 1 + x/wasm/client/rest/gov.go | 4 + x/wasm/keeper/proposal_handler.go | 5 +- x/wasm/keeper/proposal_integration_test.go | 62 +++++---- x/wasm/types/proposal.pb.go | 141 +++++++++++++-------- 8 files changed, 149 insertions(+), 74 deletions(-) diff --git a/docs/proto/proto-docs.md b/docs/proto/proto-docs.md index b1fd26e3f0..c32542db3f 100644 --- a/docs/proto/proto-docs.md +++ b/docs/proto/proto-docs.md @@ -776,6 +776,7 @@ StoreCodeProposal gov proposal content type to submit WASM code to the system | `run_as` | [string](#string) | | RunAs is the address that is passed to the contract's environment as sender | | `wasm_byte_code` | [bytes](#bytes) | | WASMByteCode can be raw or gzip compressed | | `instantiate_permission` | [AccessConfig](#cosmwasm.wasm.v1.AccessConfig) | | InstantiatePermission to apply on contract creation, optional | +| `pin_code` | [bool](#bool) | | Pin code on upload, optional | diff --git a/proto/cosmwasm/wasm/v1/proposal.proto b/proto/cosmwasm/wasm/v1/proposal.proto index 68eae73a12..677f5d2566 100644 --- a/proto/cosmwasm/wasm/v1/proposal.proto +++ b/proto/cosmwasm/wasm/v1/proposal.proto @@ -24,6 +24,8 @@ message StoreCodeProposal { reserved 5, 6; // InstantiatePermission to apply on contract creation, optional AccessConfig instantiate_permission = 7; + // Pin code on upload, optional + bool pin_code = 8; } // InstantiateContractProposal gov proposal content type to instantiate a diff --git a/x/wasm/client/cli/gov_tx.go b/x/wasm/client/cli/gov_tx.go index d544480795..ec1b20a2d8 100644 --- a/x/wasm/client/cli/gov_tx.go +++ b/x/wasm/client/cli/gov_tx.go @@ -56,12 +56,18 @@ func ProposalStoreCodeCmd() *cobra.Command { return err } + pinCode, err := cmd.Flags().GetBool(flagPinCode) + if err != nil { + return err + } + content := types.StoreCodeProposal{ Title: proposalTitle, Description: proposalDescr, RunAs: runAs, WASMByteCode: src.WASMByteCode, InstantiatePermission: src.InstantiatePermission, + PinCode: pinCode, } msg, err := govtypes.NewMsgSubmitProposal(&content, deposit, clientCtx.GetFromAddress()) @@ -80,6 +86,7 @@ func ProposalStoreCodeCmd() *cobra.Command { cmd.Flags().String(flagInstantiateByEverybody, "", "Everybody can instantiate a contract from the code, optional") cmd.Flags().String(flagInstantiateNobody, "", "Nobody except the governance process can instantiate a contract from the code, optional") cmd.Flags().String(flagInstantiateByAddress, "", "Only this address can instantiate a contract instance from the code, optional") + cmd.Flags().Bool(flagPinCode, false, "Pin code on upload, optional") // proposal flags cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") diff --git a/x/wasm/client/cli/tx.go b/x/wasm/client/cli/tx.go index 5325347298..dedbd18d06 100644 --- a/x/wasm/client/cli/tx.go +++ b/x/wasm/client/cli/tx.go @@ -27,6 +27,7 @@ const ( flagInstantiateByEverybody = "instantiate-everybody" flagInstantiateNobody = "instantiate-nobody" flagInstantiateByAddress = "instantiate-only-address" + flagPinCode = "pin-code" ) // GetTxCmd returns the transaction commands for this module diff --git a/x/wasm/client/rest/gov.go b/x/wasm/client/rest/gov.go index 3ba2b8f088..34047db4ce 100644 --- a/x/wasm/client/rest/gov.go +++ b/x/wasm/client/rest/gov.go @@ -27,6 +27,9 @@ type StoreCodeProposalJSONReq struct { WASMByteCode []byte `json:"wasm_byte_code" yaml:"wasm_byte_code"` // InstantiatePermission to apply on contract creation, optional InstantiatePermission *types.AccessConfig `json:"instantiate_permission" yaml:"instantiate_permission"` + + // PinCode indicates if the code should be pinned as part of the proposal. + PinCode bool `json:"pin_code" yaml:"pin_code"` } func (s StoreCodeProposalJSONReq) Content() govtypes.Content { @@ -36,6 +39,7 @@ func (s StoreCodeProposalJSONReq) Content() govtypes.Content { RunAs: s.RunAs, WASMByteCode: s.WASMByteCode, InstantiatePermission: s.InstantiatePermission, + PinCode: s.PinCode, } } diff --git a/x/wasm/keeper/proposal_handler.go b/x/wasm/keeper/proposal_handler.go index 95cca8a102..8525677f53 100644 --- a/x/wasm/keeper/proposal_handler.go +++ b/x/wasm/keeper/proposal_handler.go @@ -68,7 +68,10 @@ func handleStoreCodeProposal(ctx sdk.Context, k types.ContractOpsKeeper, p types if err != nil { return err } - return k.PinCode(ctx, codeID) + if p.PinCode { + return k.PinCode(ctx, codeID) + } + return nil } func handleInstantiateProposal(ctx sdk.Context, k types.ContractOpsKeeper, p types.InstantiateContractProposal) error { diff --git a/x/wasm/keeper/proposal_integration_test.go b/x/wasm/keeper/proposal_integration_test.go index 6d9b765295..6e772f14ac 100644 --- a/x/wasm/keeper/proposal_integration_test.go +++ b/x/wasm/keeper/proposal_integration_test.go @@ -24,40 +24,58 @@ import ( ) func TestStoreCodeProposal(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking") + parentCtx, keepers := CreateTestInput(t, false, "staking") govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper - wasmKeeper.SetParams(ctx, types.Params{ + wasmKeeper.SetParams(parentCtx, types.Params{ CodeUploadAccess: types.AllowNobody, InstantiateDefaultPermission: types.AccessTypeNobody, }) wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) - myActorAddress := RandomBech32AccountAddress(t) + specs := map[string]struct { + codeID int64 + pinCode bool + }{ + "upload without pinning": { + pinCode: false, + }, + "upload with code pinning": { + pinCode: true, + }, + } - src := types.StoreCodeProposalFixture(func(p *types.StoreCodeProposal) { - p.RunAs = myActorAddress - p.WASMByteCode = wasmCode - }) + for msg, spec := range specs { + t.Run(msg, func(t *testing.T) { + ctx, _ := parentCtx.CacheContext() + myActorAddress := RandomBech32AccountAddress(t) - // when stored - storedProposal, err := govKeeper.SubmitProposal(ctx, src) - require.NoError(t, err) + src := types.StoreCodeProposalFixture(func(p *types.StoreCodeProposal) { + p.RunAs = myActorAddress + p.WASMByteCode = wasmCode + p.PinCode = spec.pinCode + }) - // and proposal execute - handler := govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) - err = handler(ctx, storedProposal.GetContent()) - require.NoError(t, err) + // when stored + storedProposal, err := govKeeper.SubmitProposal(ctx, src) + require.NoError(t, err) - // then - cInfo := wasmKeeper.GetCodeInfo(ctx, 1) - require.NotNil(t, cInfo) - assert.Equal(t, myActorAddress, cInfo.Creator) - assert.True(t, wasmKeeper.IsPinnedCode(ctx, 1)) + // and proposal execute + handler := govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) + err = handler(ctx, storedProposal.GetContent()) + require.NoError(t, err) - storedCode, err := wasmKeeper.GetByteCode(ctx, 1) - require.NoError(t, err) - assert.Equal(t, wasmCode, storedCode) + // then + cInfo := wasmKeeper.GetCodeInfo(ctx, 1) + require.NotNil(t, cInfo) + assert.Equal(t, myActorAddress, cInfo.Creator) + assert.Equal(t, spec.pinCode, wasmKeeper.IsPinnedCode(ctx, 1)) + + storedCode, err := wasmKeeper.GetByteCode(ctx, 1) + require.NoError(t, err) + assert.Equal(t, wasmCode, storedCode) + }) + } } func TestInstantiateProposal(t *testing.T) { diff --git a/x/wasm/types/proposal.pb.go b/x/wasm/types/proposal.pb.go index c4b1d977a8..96eaa5f285 100644 --- a/x/wasm/types/proposal.pb.go +++ b/x/wasm/types/proposal.pb.go @@ -42,6 +42,8 @@ type StoreCodeProposal struct { WASMByteCode []byte `protobuf:"bytes,4,opt,name=wasm_byte_code,json=wasmByteCode,proto3" json:"wasm_byte_code,omitempty"` // InstantiatePermission to apply on contract creation, optional InstantiatePermission *AccessConfig `protobuf:"bytes,7,opt,name=instantiate_permission,json=instantiatePermission,proto3" json:"instantiate_permission,omitempty"` + // Pin code on upload, optional + PinCode bool `protobuf:"varint,8,opt,name=pin_code,json=pinCode,proto3" json:"pin_code,omitempty"` } func (m *StoreCodeProposal) Reset() { *m = StoreCodeProposal{} } @@ -598,58 +600,59 @@ func init() { func init() { proto.RegisterFile("cosmwasm/wasm/v1/proposal.proto", fileDescriptor_be6422d717c730cb) } var fileDescriptor_be6422d717c730cb = []byte{ - // 817 bytes of a gzipped FileDescriptorProto + // 833 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x56, 0x4f, 0x6f, 0xe3, 0x44, - 0x14, 0xcf, 0xe4, 0x8f, 0x93, 0x4e, 0x22, 0x08, 0xde, 0xb4, 0x1b, 0x0a, 0xb2, 0x23, 0x83, 0x56, - 0xbe, 0x60, 0x93, 0x22, 0x21, 0xe0, 0x16, 0x07, 0x0e, 0x5d, 0x51, 0xa9, 0x72, 0x55, 0xad, 0x04, - 0x12, 0xd6, 0xc4, 0x9e, 0x7a, 0x2d, 0x62, 0x8f, 0xe5, 0x99, 0x34, 0x9b, 0x6f, 0x01, 0x12, 0xe2, - 0xc4, 0x07, 0x40, 0x5c, 0x10, 0x77, 0x3e, 0x40, 0xc5, 0x69, 0x8f, 0x7b, 0x32, 0x6c, 0xf2, 0x0d, - 0x72, 0x44, 0x42, 0x42, 0x33, 0xe3, 0x84, 0x74, 0x97, 0x66, 0x17, 0xd1, 0x20, 0x71, 0x71, 0xf2, - 0xe6, 0xbd, 0x37, 0xef, 0x37, 0x3f, 0xfd, 0xde, 0xbc, 0x81, 0xba, 0x4f, 0x68, 0x3c, 0x45, 0x34, - 0xb6, 0xc5, 0xe7, 0xb2, 0x6f, 0xa7, 0x19, 0x49, 0x09, 0x45, 0x63, 0x2b, 0xcd, 0x08, 0x23, 0x6a, - 0x7b, 0x15, 0x60, 0x89, 0xcf, 0x65, 0xff, 0xb0, 0x13, 0x92, 0x90, 0x08, 0xa7, 0xcd, 0xff, 0xc9, - 0xb8, 0x43, 0x8d, 0xc7, 0x11, 0x6a, 0x8f, 0x10, 0xc5, 0xf6, 0x65, 0x7f, 0x84, 0x19, 0xea, 0xdb, - 0x3e, 0x89, 0x92, 0xc2, 0xff, 0xe6, 0x73, 0x85, 0xd8, 0x2c, 0xc5, 0x54, 0x7a, 0x8d, 0x3f, 0x00, - 0x7c, 0xed, 0x8c, 0x91, 0x0c, 0x0f, 0x49, 0x80, 0x4f, 0x0b, 0x04, 0x6a, 0x07, 0xd6, 0x58, 0xc4, - 0xc6, 0xb8, 0x0b, 0x7a, 0xc0, 0xdc, 0x73, 0xa5, 0xa1, 0xf6, 0x60, 0x33, 0xc0, 0xd4, 0xcf, 0xa2, - 0x94, 0x45, 0x24, 0xe9, 0x96, 0x85, 0x6f, 0x73, 0x49, 0xdd, 0x87, 0x4a, 0x36, 0x49, 0x3c, 0x44, - 0xbb, 0x15, 0x99, 0x98, 0x4d, 0x92, 0x01, 0x55, 0xdf, 0x87, 0xaf, 0xf0, 0xda, 0xde, 0x68, 0xc6, - 0xb0, 0xe7, 0x93, 0x00, 0x77, 0xab, 0x3d, 0x60, 0xb6, 0x9c, 0xf6, 0x3c, 0xd7, 0x5b, 0x0f, 0x06, - 0x67, 0x27, 0xce, 0x8c, 0x09, 0x00, 0x6e, 0x8b, 0xc7, 0xad, 0x2c, 0xf5, 0x1c, 0x1e, 0x44, 0x09, - 0x65, 0x28, 0x61, 0x11, 0x62, 0xd8, 0x4b, 0x71, 0x16, 0x47, 0x94, 0xf2, 0xda, 0xf5, 0x1e, 0x30, - 0x9b, 0x47, 0x9a, 0xf5, 0x2c, 0x47, 0xd6, 0xc0, 0xf7, 0x31, 0xa5, 0x43, 0x92, 0x5c, 0x44, 0xa1, - 0xbb, 0xbf, 0x91, 0x7d, 0xba, 0x4e, 0xbe, 0x5f, 0x6d, 0xd4, 0xda, 0xca, 0xfd, 0x6a, 0x43, 0x69, - 0xd7, 0x8d, 0x5f, 0xca, 0xf0, 0x8d, 0xe3, 0xbf, 0xa2, 0x86, 0x24, 0x61, 0x19, 0xf2, 0xd9, 0xae, - 0x98, 0xe8, 0xc0, 0x1a, 0x0a, 0xe2, 0x28, 0x11, 0x04, 0xec, 0xb9, 0xd2, 0x50, 0xdf, 0x82, 0x75, - 0xce, 0x8a, 0x17, 0x05, 0xdd, 0x5a, 0x0f, 0x98, 0x55, 0x07, 0xce, 0x73, 0x5d, 0xe1, 0x14, 0x1c, - 0x7f, 0xec, 0x2a, 0xdc, 0x75, 0x1c, 0xf0, 0xd4, 0x31, 0x1a, 0xe1, 0x71, 0x57, 0x91, 0xa9, 0xc2, - 0x50, 0x4d, 0x58, 0x89, 0x69, 0x28, 0xf8, 0x68, 0x39, 0x07, 0xbf, 0xe7, 0xba, 0xea, 0xa2, 0xe9, - 0xea, 0x14, 0x27, 0x98, 0x52, 0x14, 0x62, 0x97, 0x87, 0xa8, 0x08, 0xd6, 0x2e, 0x26, 0x49, 0x40, - 0xbb, 0x8d, 0x5e, 0xc5, 0x6c, 0x1e, 0xbd, 0x6e, 0x49, 0xdd, 0x58, 0x5c, 0x37, 0x56, 0xa1, 0x1b, - 0x6b, 0x48, 0xa2, 0xc4, 0x79, 0xf7, 0x2a, 0xd7, 0x4b, 0x3f, 0xfc, 0xaa, 0x9b, 0x61, 0xc4, 0x1e, - 0x4e, 0x46, 0x96, 0x4f, 0x62, 0xbb, 0x10, 0x99, 0xfc, 0x79, 0x87, 0x06, 0x5f, 0x16, 0x2a, 0xe2, - 0x09, 0xd4, 0x95, 0x3b, 0x1b, 0x3f, 0x03, 0x78, 0xf7, 0x24, 0x0a, 0xb3, 0xdb, 0x24, 0xf2, 0x10, - 0x36, 0xfc, 0x62, 0xaf, 0x82, 0xb4, 0xb5, 0xfd, 0x72, 0xbc, 0x15, 0x0c, 0x29, 0x2f, 0x64, 0xc8, - 0xf8, 0x06, 0xc0, 0xce, 0xd9, 0x24, 0x20, 0x3b, 0xc1, 0x5e, 0x79, 0x06, 0x7b, 0x01, 0xab, 0xfa, - 0x62, 0x58, 0x5f, 0x97, 0xe1, 0xdd, 0x4f, 0x1e, 0x61, 0x7f, 0xb2, 0x7b, 0x79, 0x6e, 0x23, 0xbb, - 0x00, 0x5c, 0xfb, 0x07, 0x4a, 0x53, 0x76, 0xa6, 0xb4, 0xef, 0x00, 0xbc, 0x73, 0x9e, 0x06, 0x88, - 0xe1, 0x01, 0xef, 0xa0, 0x7f, 0xcd, 0x47, 0x1f, 0xee, 0x25, 0x78, 0xea, 0xc9, 0xde, 0x14, 0x94, - 0x38, 0x9d, 0x65, 0xae, 0xb7, 0x67, 0x28, 0x1e, 0x7f, 0x64, 0xac, 0x5d, 0x86, 0xdb, 0x48, 0xf0, - 0x54, 0x94, 0xdc, 0xc6, 0x95, 0xf1, 0x10, 0xaa, 0xc3, 0x31, 0x46, 0xd9, 0xed, 0x80, 0xdb, 0x22, - 0x23, 0xe3, 0x47, 0x00, 0xdb, 0xa7, 0x51, 0xc2, 0x35, 0x4f, 0xd7, 0x85, 0xee, 0x5d, 0x2b, 0xe4, - 0xb4, 0x97, 0xb9, 0xde, 0x92, 0x27, 0x11, 0xcb, 0xc6, 0xaa, 0xf4, 0x07, 0x7f, 0x53, 0xda, 0x39, - 0x58, 0xe6, 0xba, 0x2a, 0xa3, 0x37, 0x9c, 0xc6, 0x75, 0x48, 0x1f, 0x72, 0x48, 0xa2, 0xf3, 0xb8, - 0x82, 0x2a, 0x66, 0xd5, 0xd1, 0xe6, 0xb9, 0x5e, 0x97, 0xad, 0x47, 0x97, 0xb9, 0xfe, 0xaa, 0xdc, - 0x61, 0x15, 0x64, 0xb8, 0x75, 0xd9, 0x8e, 0xd4, 0xf8, 0x09, 0x40, 0xf5, 0x3c, 0x49, 0xff, 0x57, - 0x98, 0xbf, 0x05, 0x50, 0xdd, 0x9c, 0x2c, 0x52, 0x7a, 0x9b, 0xf7, 0x0f, 0xb8, 0xf1, 0xfe, 0xf9, - 0xfc, 0xc6, 0x21, 0x56, 0x7e, 0x99, 0x21, 0xe6, 0x54, 0x79, 0x8f, 0xdc, 0x30, 0xca, 0x8c, 0x05, - 0x80, 0xba, 0x04, 0x73, 0x7d, 0x88, 0x5d, 0x44, 0xe1, 0x7f, 0xc8, 0xec, 0x17, 0x70, 0x1f, 0x09, - 0xc8, 0x9e, 0x2f, 0x4a, 0x7b, 0x13, 0x01, 0x49, 0xd2, 0xdc, 0x3c, 0x7a, 0x7b, 0xfb, 0x09, 0x25, - 0xfe, 0xe2, 0x9c, 0x77, 0xd0, 0x73, 0x1e, 0xea, 0x7c, 0x7a, 0xf5, 0x54, 0x2b, 0x3d, 0x79, 0xaa, - 0x95, 0xbe, 0x9f, 0x6b, 0xe0, 0x6a, 0xae, 0x81, 0xc7, 0x73, 0x0d, 0xfc, 0x36, 0xd7, 0xc0, 0x57, - 0x0b, 0xad, 0xf4, 0x78, 0xa1, 0x95, 0x9e, 0x2c, 0xb4, 0xd2, 0x67, 0xf7, 0x36, 0x2e, 0x91, 0x21, - 0xa1, 0xf1, 0x83, 0xd5, 0x9b, 0x27, 0xb0, 0x1f, 0xc9, 0xb7, 0x8f, 0xb8, 0x48, 0x46, 0x8a, 0x78, - 0xf9, 0xbc, 0xf7, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0x70, 0x3f, 0xe6, 0xf2, 0x82, 0x09, 0x00, + 0x14, 0xcf, 0xe4, 0x8f, 0x93, 0x4e, 0x23, 0x08, 0xde, 0xb4, 0x9b, 0x2d, 0xc8, 0x8e, 0x0c, 0x5a, + 0xf9, 0x82, 0x4d, 0x8a, 0x84, 0x80, 0x5b, 0x1d, 0x38, 0x74, 0x45, 0xa5, 0xca, 0x55, 0xb5, 0x12, + 0x48, 0x58, 0x13, 0x7b, 0xea, 0x1d, 0x11, 0xcf, 0x58, 0x9e, 0x49, 0xbb, 0xfd, 0x16, 0x20, 0x21, + 0xc4, 0x81, 0x0f, 0x80, 0xb8, 0x20, 0xee, 0x7c, 0x80, 0x8a, 0xd3, 0x1e, 0xf7, 0x64, 0xd8, 0xf4, + 0x1b, 0xf4, 0xc8, 0x09, 0xcd, 0x8c, 0x53, 0xd2, 0x5d, 0xda, 0x5d, 0xc4, 0x06, 0x69, 0x2f, 0x4e, + 0xc6, 0xef, 0xbd, 0xf9, 0xfd, 0xe6, 0xa7, 0xdf, 0x9b, 0x67, 0x68, 0xc7, 0x8c, 0x67, 0x27, 0x88, + 0x67, 0xbe, 0x7a, 0x1c, 0x8f, 0xfc, 0xbc, 0x60, 0x39, 0xe3, 0x68, 0xea, 0xe5, 0x05, 0x13, 0xcc, + 0xec, 0x2d, 0x12, 0x3c, 0xf5, 0x38, 0x1e, 0x6d, 0xf5, 0x53, 0x96, 0x32, 0x15, 0xf4, 0xe5, 0x3f, + 0x9d, 0xb7, 0x65, 0xc9, 0x3c, 0xc6, 0xfd, 0x09, 0xe2, 0xd8, 0x3f, 0x1e, 0x4d, 0xb0, 0x40, 0x23, + 0x3f, 0x66, 0x84, 0x56, 0xf1, 0xb7, 0x9e, 0x01, 0x12, 0xa7, 0x39, 0xe6, 0x3a, 0xea, 0x7c, 0x5f, + 0x87, 0x6f, 0x1c, 0x08, 0x56, 0xe0, 0x31, 0x4b, 0xf0, 0x7e, 0xc5, 0xc0, 0xec, 0xc3, 0x96, 0x20, + 0x62, 0x8a, 0x07, 0x60, 0x08, 0xdc, 0xb5, 0x50, 0x2f, 0xcc, 0x21, 0x5c, 0x4f, 0x30, 0x8f, 0x0b, + 0x92, 0x0b, 0xc2, 0xe8, 0xa0, 0xae, 0x62, 0xcb, 0xaf, 0xcc, 0x0d, 0x68, 0x14, 0x33, 0x1a, 0x21, + 0x3e, 0x68, 0xe8, 0xc2, 0x62, 0x46, 0x77, 0xb8, 0xf9, 0x01, 0x7c, 0x4d, 0x62, 0x47, 0x93, 0x53, + 0x81, 0xa3, 0x98, 0x25, 0x78, 0xd0, 0x1c, 0x02, 0xb7, 0x1b, 0xf4, 0xe6, 0xa5, 0xdd, 0xbd, 0xbf, + 0x73, 0xb0, 0x17, 0x9c, 0x0a, 0x45, 0x20, 0xec, 0xca, 0xbc, 0xc5, 0xca, 0x3c, 0x84, 0x9b, 0x84, + 0x72, 0x81, 0xa8, 0x20, 0x48, 0xe0, 0x28, 0xc7, 0x45, 0x46, 0x38, 0x97, 0xd8, 0xed, 0x21, 0x70, + 0xd7, 0xb7, 0x2d, 0xef, 0x69, 0x8d, 0xbc, 0x9d, 0x38, 0xc6, 0x9c, 0x8f, 0x19, 0x3d, 0x22, 0x69, + 0xb8, 0xb1, 0x54, 0xbd, 0x7f, 0x59, 0x6c, 0xde, 0x81, 0x9d, 0x9c, 0x50, 0x4d, 0xa4, 0x33, 0x04, + 0x6e, 0x27, 0x6c, 0xe7, 0x84, 0x4a, 0xc4, 0x7b, 0xcd, 0x4e, 0xab, 0x67, 0xdc, 0x6b, 0x76, 0x8c, + 0x5e, 0xdb, 0xf9, 0xad, 0x0e, 0xdf, 0xdc, 0xfd, 0x7b, 0x83, 0x31, 0xa3, 0xa2, 0x40, 0xb1, 0x58, + 0x95, 0x48, 0x7d, 0xd8, 0x42, 0x49, 0x46, 0xa8, 0xd2, 0x66, 0x2d, 0xd4, 0x0b, 0xf3, 0x6d, 0xd8, + 0x96, 0x3c, 0x23, 0x92, 0x0c, 0x5a, 0x43, 0xe0, 0x36, 0x03, 0x38, 0x2f, 0x6d, 0x43, 0x72, 0xdd, + 0xfd, 0x24, 0x34, 0x64, 0x68, 0x37, 0x91, 0xa5, 0x53, 0x34, 0xc1, 0xd3, 0x81, 0xa1, 0x4b, 0xd5, + 0xc2, 0x74, 0x61, 0x23, 0xe3, 0xa9, 0x92, 0xaa, 0x1b, 0x6c, 0xfe, 0x59, 0xda, 0x66, 0x88, 0x4e, + 0x16, 0xa7, 0xd8, 0xc3, 0x9c, 0xa3, 0x14, 0x87, 0x32, 0xc5, 0x44, 0xb0, 0x75, 0x34, 0xa3, 0x09, + 0x1f, 0x74, 0x86, 0x0d, 0x77, 0x7d, 0xfb, 0x8e, 0xa7, 0x2d, 0xe5, 0x49, 0x4b, 0x79, 0x95, 0xa5, + 0xbc, 0x31, 0x23, 0x34, 0x78, 0xef, 0xac, 0xb4, 0x6b, 0x3f, 0xfd, 0x6e, 0xbb, 0x29, 0x11, 0x0f, + 0x66, 0x13, 0x2f, 0x66, 0x99, 0x5f, 0xf9, 0x4f, 0xff, 0xbc, 0xcb, 0x93, 0xaf, 0x2a, 0x83, 0xc9, + 0x02, 0x1e, 0xea, 0x9d, 0x9d, 0x5f, 0x01, 0xbc, 0xbd, 0x47, 0xd2, 0xe2, 0x65, 0x0a, 0xb9, 0x05, + 0x3b, 0x71, 0xb5, 0x57, 0x25, 0xda, 0xe5, 0xfa, 0xc5, 0x74, 0xab, 0x14, 0x32, 0x9e, 0xab, 0x90, + 0xf3, 0x2d, 0x80, 0xfd, 0x83, 0x59, 0xc2, 0x56, 0xc2, 0xbd, 0xf1, 0x14, 0xf7, 0x8a, 0x56, 0xf3, + 0xf9, 0xb4, 0xbe, 0xa9, 0xc3, 0xdb, 0x9f, 0x3e, 0xc4, 0xf1, 0x6c, 0xf5, 0xf6, 0xbc, 0x49, 0xec, + 0x8a, 0x70, 0xeb, 0x5f, 0x38, 0xcd, 0x58, 0x99, 0xd3, 0x7e, 0x00, 0xf0, 0xd6, 0x61, 0x9e, 0x20, + 0x81, 0x77, 0x64, 0x07, 0xfd, 0x67, 0x3d, 0x46, 0x70, 0x8d, 0xe2, 0x93, 0x48, 0xf7, 0xa6, 0x92, + 0x24, 0xe8, 0x5f, 0x94, 0x76, 0xef, 0x14, 0x65, 0xd3, 0x8f, 0x9d, 0xcb, 0x90, 0x13, 0x76, 0x28, + 0x3e, 0x51, 0x90, 0x37, 0x69, 0xe5, 0x3c, 0x80, 0xe6, 0x78, 0x8a, 0x51, 0xf1, 0x72, 0xc8, 0xdd, + 0x60, 0x23, 0xe7, 0x67, 0x00, 0x7b, 0xfb, 0xfa, 0x5e, 0xe3, 0x97, 0x40, 0x77, 0xaf, 0x00, 0x05, + 0xbd, 0x8b, 0xd2, 0xee, 0xea, 0x93, 0xa8, 0xd7, 0xce, 0x02, 0xfa, 0xc3, 0x7f, 0x80, 0x0e, 0x36, + 0x2f, 0x4a, 0xdb, 0xd4, 0xd9, 0x4b, 0x41, 0xe7, 0x2a, 0xa5, 0x8f, 0x24, 0x25, 0xd5, 0x79, 0xd2, + 0x41, 0x0d, 0xb7, 0x19, 0x58, 0xf3, 0xd2, 0x6e, 0xeb, 0xd6, 0xe3, 0x17, 0xa5, 0xfd, 0xba, 0xde, + 0x61, 0x91, 0xe4, 0x84, 0x6d, 0xdd, 0x8e, 0xdc, 0xf9, 0x05, 0x40, 0xf3, 0x90, 0xe6, 0xaf, 0x14, + 0xe7, 0xef, 0x00, 0x34, 0x97, 0x87, 0x8e, 0xb6, 0xde, 0xf2, 0xfd, 0x03, 0xae, 0xbd, 0x7f, 0xbe, + 0xb8, 0x76, 0xbe, 0xd5, 0x5f, 0x64, 0xbe, 0x05, 0x4d, 0xd9, 0x23, 0xd7, 0x4c, 0x39, 0xe7, 0x1c, + 0x40, 0x5b, 0x93, 0xb9, 0x3a, 0xc4, 0x8e, 0x48, 0xfa, 0x3f, 0x2a, 0xfb, 0x25, 0xdc, 0x40, 0x8a, + 0x72, 0x14, 0x2b, 0xe8, 0x68, 0xa6, 0x28, 0x69, 0x99, 0xd7, 0xb7, 0xdf, 0xb9, 0xf9, 0x84, 0x9a, + 0x7f, 0x75, 0xce, 0x5b, 0xe8, 0x99, 0x08, 0x0f, 0x3e, 0x3b, 0x7b, 0x62, 0xd5, 0x1e, 0x3f, 0xb1, + 0x6a, 0x3f, 0xce, 0x2d, 0x70, 0x36, 0xb7, 0xc0, 0xa3, 0xb9, 0x05, 0xfe, 0x98, 0x5b, 0xe0, 0xeb, + 0x73, 0xab, 0xf6, 0xe8, 0xdc, 0xaa, 0x3d, 0x3e, 0xb7, 0x6a, 0x9f, 0xdf, 0x5d, 0xba, 0x44, 0xc6, + 0x8c, 0x67, 0xf7, 0x17, 0x9f, 0x43, 0x89, 0xff, 0x50, 0x7f, 0x16, 0xa9, 0x8b, 0x64, 0x62, 0xa8, + 0x8f, 0xa2, 0xf7, 0xff, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xad, 0xbf, 0x95, 0xf9, 0x9d, 0x09, 0x00, 0x00, } @@ -687,6 +690,9 @@ func (this *StoreCodeProposal) Equal(that interface{}) bool { if !this.InstantiatePermission.Equal(that1.InstantiatePermission) { return false } + if this.PinCode != that1.PinCode { + return false + } return true } @@ -1078,6 +1084,16 @@ func (m *StoreCodeProposal) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.PinCode { + i-- + if m.PinCode { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x40 + } if m.InstantiatePermission != nil { { size, err := m.InstantiatePermission.MarshalToSizedBuffer(dAtA[:i]) @@ -1716,6 +1732,9 @@ func (m *StoreCodeProposal) Size() (n int) { l = m.InstantiatePermission.Size() n += 1 + l + sovProposal(uint64(l)) } + if m.PinCode { + n += 2 + } return n } @@ -2183,6 +2202,26 @@ func (m *StoreCodeProposal) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PinCode", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProposal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.PinCode = bool(v != 0) default: iNdEx = preIndex skippy, err := skipProposal(dAtA[iNdEx:]) From cc9e74075ccac73221763f5eb172b9644abfe75a Mon Sep 17 00:00:00 2001 From: jhernandezb Date: Tue, 6 Sep 2022 08:13:41 -0600 Subject: [PATCH 068/120] change default behavior to always pin --- docs/proto/proto-docs.md | 2 +- proto/cosmwasm/wasm/v1/proposal.proto | 4 +- x/wasm/client/cli/gov_tx.go | 6 +- x/wasm/client/cli/tx.go | 2 +- x/wasm/client/rest/gov.go | 6 +- x/wasm/keeper/proposal_handler.go | 9 +- x/wasm/keeper/proposal_integration_test.go | 16 +-- x/wasm/types/proposal.pb.go | 124 ++++++++++----------- 8 files changed, 86 insertions(+), 83 deletions(-) diff --git a/docs/proto/proto-docs.md b/docs/proto/proto-docs.md index c32542db3f..e5cd7ec88f 100644 --- a/docs/proto/proto-docs.md +++ b/docs/proto/proto-docs.md @@ -776,7 +776,7 @@ StoreCodeProposal gov proposal content type to submit WASM code to the system | `run_as` | [string](#string) | | RunAs is the address that is passed to the contract's environment as sender | | `wasm_byte_code` | [bytes](#bytes) | | WASMByteCode can be raw or gzip compressed | | `instantiate_permission` | [AccessConfig](#cosmwasm.wasm.v1.AccessConfig) | | InstantiatePermission to apply on contract creation, optional | -| `pin_code` | [bool](#bool) | | Pin code on upload, optional | +| `unpin_code` | [bool](#bool) | | UnpinCode code on upload, optional | diff --git a/proto/cosmwasm/wasm/v1/proposal.proto b/proto/cosmwasm/wasm/v1/proposal.proto index 677f5d2566..25bf2700b1 100644 --- a/proto/cosmwasm/wasm/v1/proposal.proto +++ b/proto/cosmwasm/wasm/v1/proposal.proto @@ -24,8 +24,8 @@ message StoreCodeProposal { reserved 5, 6; // InstantiatePermission to apply on contract creation, optional AccessConfig instantiate_permission = 7; - // Pin code on upload, optional - bool pin_code = 8; + // UnpinCode code on upload, optional + bool unpin_code = 8; } // InstantiateContractProposal gov proposal content type to instantiate a diff --git a/x/wasm/client/cli/gov_tx.go b/x/wasm/client/cli/gov_tx.go index ec1b20a2d8..b619dbb8b1 100644 --- a/x/wasm/client/cli/gov_tx.go +++ b/x/wasm/client/cli/gov_tx.go @@ -56,7 +56,7 @@ func ProposalStoreCodeCmd() *cobra.Command { return err } - pinCode, err := cmd.Flags().GetBool(flagPinCode) + unpinCode, err := cmd.Flags().GetBool(flagUnpinCode) if err != nil { return err } @@ -67,7 +67,7 @@ func ProposalStoreCodeCmd() *cobra.Command { RunAs: runAs, WASMByteCode: src.WASMByteCode, InstantiatePermission: src.InstantiatePermission, - PinCode: pinCode, + UnpinCode: unpinCode, } msg, err := govtypes.NewMsgSubmitProposal(&content, deposit, clientCtx.GetFromAddress()) @@ -86,7 +86,7 @@ func ProposalStoreCodeCmd() *cobra.Command { cmd.Flags().String(flagInstantiateByEverybody, "", "Everybody can instantiate a contract from the code, optional") cmd.Flags().String(flagInstantiateNobody, "", "Nobody except the governance process can instantiate a contract from the code, optional") cmd.Flags().String(flagInstantiateByAddress, "", "Only this address can instantiate a contract instance from the code, optional") - cmd.Flags().Bool(flagPinCode, false, "Pin code on upload, optional") + cmd.Flags().Bool(flagUnpinCode, false, "Unpin code on upload, optional") // proposal flags cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") diff --git a/x/wasm/client/cli/tx.go b/x/wasm/client/cli/tx.go index dedbd18d06..28f0a1e2a2 100644 --- a/x/wasm/client/cli/tx.go +++ b/x/wasm/client/cli/tx.go @@ -27,7 +27,7 @@ const ( flagInstantiateByEverybody = "instantiate-everybody" flagInstantiateNobody = "instantiate-nobody" flagInstantiateByAddress = "instantiate-only-address" - flagPinCode = "pin-code" + flagUnpinCode = "unpin-code" ) // GetTxCmd returns the transaction commands for this module diff --git a/x/wasm/client/rest/gov.go b/x/wasm/client/rest/gov.go index 34047db4ce..ef688d9401 100644 --- a/x/wasm/client/rest/gov.go +++ b/x/wasm/client/rest/gov.go @@ -28,8 +28,8 @@ type StoreCodeProposalJSONReq struct { // InstantiatePermission to apply on contract creation, optional InstantiatePermission *types.AccessConfig `json:"instantiate_permission" yaml:"instantiate_permission"` - // PinCode indicates if the code should be pinned as part of the proposal. - PinCode bool `json:"pin_code" yaml:"pin_code"` + // UnpinCode indicates if the code should not be pinned as part of the proposal. + UnpinCode bool `json:"pin_code" yaml:"pin_code"` } func (s StoreCodeProposalJSONReq) Content() govtypes.Content { @@ -39,7 +39,7 @@ func (s StoreCodeProposalJSONReq) Content() govtypes.Content { RunAs: s.RunAs, WASMByteCode: s.WASMByteCode, InstantiatePermission: s.InstantiatePermission, - PinCode: s.PinCode, + UnpinCode: s.UnpinCode, } } diff --git a/x/wasm/keeper/proposal_handler.go b/x/wasm/keeper/proposal_handler.go index 8525677f53..f4cd8a4e1a 100644 --- a/x/wasm/keeper/proposal_handler.go +++ b/x/wasm/keeper/proposal_handler.go @@ -68,10 +68,13 @@ func handleStoreCodeProposal(ctx sdk.Context, k types.ContractOpsKeeper, p types if err != nil { return err } - if p.PinCode { - return k.PinCode(ctx, codeID) + + // if code should not be pinned return earlier + if p.UnpinCode { + return nil } - return nil + return k.PinCode(ctx, codeID) + } func handleInstantiateProposal(ctx sdk.Context, k types.ContractOpsKeeper, p types.InstantiateContractProposal) error { diff --git a/x/wasm/keeper/proposal_integration_test.go b/x/wasm/keeper/proposal_integration_test.go index 6e772f14ac..f7034db562 100644 --- a/x/wasm/keeper/proposal_integration_test.go +++ b/x/wasm/keeper/proposal_integration_test.go @@ -34,14 +34,14 @@ func TestStoreCodeProposal(t *testing.T) { require.NoError(t, err) specs := map[string]struct { - codeID int64 - pinCode bool + codeID int64 + unpinCode bool }{ - "upload without pinning": { - pinCode: false, + "upload with pinning (default)": { + unpinCode: false, }, - "upload with code pinning": { - pinCode: true, + "upload with code unpin": { + unpinCode: true, }, } @@ -53,7 +53,7 @@ func TestStoreCodeProposal(t *testing.T) { src := types.StoreCodeProposalFixture(func(p *types.StoreCodeProposal) { p.RunAs = myActorAddress p.WASMByteCode = wasmCode - p.PinCode = spec.pinCode + p.UnpinCode = spec.unpinCode }) // when stored @@ -69,7 +69,7 @@ func TestStoreCodeProposal(t *testing.T) { cInfo := wasmKeeper.GetCodeInfo(ctx, 1) require.NotNil(t, cInfo) assert.Equal(t, myActorAddress, cInfo.Creator) - assert.Equal(t, spec.pinCode, wasmKeeper.IsPinnedCode(ctx, 1)) + assert.Equal(t, !spec.unpinCode, wasmKeeper.IsPinnedCode(ctx, 1)) storedCode, err := wasmKeeper.GetByteCode(ctx, 1) require.NoError(t, err) diff --git a/x/wasm/types/proposal.pb.go b/x/wasm/types/proposal.pb.go index 96eaa5f285..7532a84e70 100644 --- a/x/wasm/types/proposal.pb.go +++ b/x/wasm/types/proposal.pb.go @@ -42,8 +42,8 @@ type StoreCodeProposal struct { WASMByteCode []byte `protobuf:"bytes,4,opt,name=wasm_byte_code,json=wasmByteCode,proto3" json:"wasm_byte_code,omitempty"` // InstantiatePermission to apply on contract creation, optional InstantiatePermission *AccessConfig `protobuf:"bytes,7,opt,name=instantiate_permission,json=instantiatePermission,proto3" json:"instantiate_permission,omitempty"` - // Pin code on upload, optional - PinCode bool `protobuf:"varint,8,opt,name=pin_code,json=pinCode,proto3" json:"pin_code,omitempty"` + // UnpinCode code on upload, optional + UnpinCode bool `protobuf:"varint,8,opt,name=unpin_code,json=unpinCode,proto3" json:"unpin_code,omitempty"` } func (m *StoreCodeProposal) Reset() { *m = StoreCodeProposal{} } @@ -600,60 +600,60 @@ func init() { func init() { proto.RegisterFile("cosmwasm/wasm/v1/proposal.proto", fileDescriptor_be6422d717c730cb) } var fileDescriptor_be6422d717c730cb = []byte{ - // 833 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x56, 0x4f, 0x6f, 0xe3, 0x44, - 0x14, 0xcf, 0xe4, 0x8f, 0x93, 0x4e, 0x23, 0x08, 0xde, 0xb4, 0x9b, 0x2d, 0xc8, 0x8e, 0x0c, 0x5a, - 0xf9, 0x82, 0x4d, 0x8a, 0x84, 0x80, 0x5b, 0x1d, 0x38, 0x74, 0x45, 0xa5, 0xca, 0x55, 0xb5, 0x12, - 0x48, 0x58, 0x13, 0x7b, 0xea, 0x1d, 0x11, 0xcf, 0x58, 0x9e, 0x49, 0xbb, 0xfd, 0x16, 0x20, 0x21, - 0xc4, 0x81, 0x0f, 0x80, 0xb8, 0x20, 0xee, 0x7c, 0x80, 0x8a, 0xd3, 0x1e, 0xf7, 0x64, 0xd8, 0xf4, - 0x1b, 0xf4, 0xc8, 0x09, 0xcd, 0x8c, 0x53, 0xd2, 0x5d, 0xda, 0x5d, 0xc4, 0x06, 0x69, 0x2f, 0x4e, - 0xc6, 0xef, 0xbd, 0xf9, 0xfd, 0xe6, 0xa7, 0xdf, 0x9b, 0x67, 0x68, 0xc7, 0x8c, 0x67, 0x27, 0x88, - 0x67, 0xbe, 0x7a, 0x1c, 0x8f, 0xfc, 0xbc, 0x60, 0x39, 0xe3, 0x68, 0xea, 0xe5, 0x05, 0x13, 0xcc, - 0xec, 0x2d, 0x12, 0x3c, 0xf5, 0x38, 0x1e, 0x6d, 0xf5, 0x53, 0x96, 0x32, 0x15, 0xf4, 0xe5, 0x3f, - 0x9d, 0xb7, 0x65, 0xc9, 0x3c, 0xc6, 0xfd, 0x09, 0xe2, 0xd8, 0x3f, 0x1e, 0x4d, 0xb0, 0x40, 0x23, - 0x3f, 0x66, 0x84, 0x56, 0xf1, 0xb7, 0x9e, 0x01, 0x12, 0xa7, 0x39, 0xe6, 0x3a, 0xea, 0x7c, 0x5f, - 0x87, 0x6f, 0x1c, 0x08, 0x56, 0xe0, 0x31, 0x4b, 0xf0, 0x7e, 0xc5, 0xc0, 0xec, 0xc3, 0x96, 0x20, - 0x62, 0x8a, 0x07, 0x60, 0x08, 0xdc, 0xb5, 0x50, 0x2f, 0xcc, 0x21, 0x5c, 0x4f, 0x30, 0x8f, 0x0b, - 0x92, 0x0b, 0xc2, 0xe8, 0xa0, 0xae, 0x62, 0xcb, 0xaf, 0xcc, 0x0d, 0x68, 0x14, 0x33, 0x1a, 0x21, - 0x3e, 0x68, 0xe8, 0xc2, 0x62, 0x46, 0x77, 0xb8, 0xf9, 0x01, 0x7c, 0x4d, 0x62, 0x47, 0x93, 0x53, - 0x81, 0xa3, 0x98, 0x25, 0x78, 0xd0, 0x1c, 0x02, 0xb7, 0x1b, 0xf4, 0xe6, 0xa5, 0xdd, 0xbd, 0xbf, - 0x73, 0xb0, 0x17, 0x9c, 0x0a, 0x45, 0x20, 0xec, 0xca, 0xbc, 0xc5, 0xca, 0x3c, 0x84, 0x9b, 0x84, - 0x72, 0x81, 0xa8, 0x20, 0x48, 0xe0, 0x28, 0xc7, 0x45, 0x46, 0x38, 0x97, 0xd8, 0xed, 0x21, 0x70, - 0xd7, 0xb7, 0x2d, 0xef, 0x69, 0x8d, 0xbc, 0x9d, 0x38, 0xc6, 0x9c, 0x8f, 0x19, 0x3d, 0x22, 0x69, - 0xb8, 0xb1, 0x54, 0xbd, 0x7f, 0x59, 0x6c, 0xde, 0x81, 0x9d, 0x9c, 0x50, 0x4d, 0xa4, 0x33, 0x04, - 0x6e, 0x27, 0x6c, 0xe7, 0x84, 0x4a, 0xc4, 0x7b, 0xcd, 0x4e, 0xab, 0x67, 0xdc, 0x6b, 0x76, 0x8c, - 0x5e, 0xdb, 0xf9, 0xad, 0x0e, 0xdf, 0xdc, 0xfd, 0x7b, 0x83, 0x31, 0xa3, 0xa2, 0x40, 0xb1, 0x58, - 0x95, 0x48, 0x7d, 0xd8, 0x42, 0x49, 0x46, 0xa8, 0xd2, 0x66, 0x2d, 0xd4, 0x0b, 0xf3, 0x6d, 0xd8, - 0x96, 0x3c, 0x23, 0x92, 0x0c, 0x5a, 0x43, 0xe0, 0x36, 0x03, 0x38, 0x2f, 0x6d, 0x43, 0x72, 0xdd, - 0xfd, 0x24, 0x34, 0x64, 0x68, 0x37, 0x91, 0xa5, 0x53, 0x34, 0xc1, 0xd3, 0x81, 0xa1, 0x4b, 0xd5, - 0xc2, 0x74, 0x61, 0x23, 0xe3, 0xa9, 0x92, 0xaa, 0x1b, 0x6c, 0xfe, 0x59, 0xda, 0x66, 0x88, 0x4e, - 0x16, 0xa7, 0xd8, 0xc3, 0x9c, 0xa3, 0x14, 0x87, 0x32, 0xc5, 0x44, 0xb0, 0x75, 0x34, 0xa3, 0x09, - 0x1f, 0x74, 0x86, 0x0d, 0x77, 0x7d, 0xfb, 0x8e, 0xa7, 0x2d, 0xe5, 0x49, 0x4b, 0x79, 0x95, 0xa5, - 0xbc, 0x31, 0x23, 0x34, 0x78, 0xef, 0xac, 0xb4, 0x6b, 0x3f, 0xfd, 0x6e, 0xbb, 0x29, 0x11, 0x0f, - 0x66, 0x13, 0x2f, 0x66, 0x99, 0x5f, 0xf9, 0x4f, 0xff, 0xbc, 0xcb, 0x93, 0xaf, 0x2a, 0x83, 0xc9, - 0x02, 0x1e, 0xea, 0x9d, 0x9d, 0x5f, 0x01, 0xbc, 0xbd, 0x47, 0xd2, 0xe2, 0x65, 0x0a, 0xb9, 0x05, - 0x3b, 0x71, 0xb5, 0x57, 0x25, 0xda, 0xe5, 0xfa, 0xc5, 0x74, 0xab, 0x14, 0x32, 0x9e, 0xab, 0x90, - 0xf3, 0x2d, 0x80, 0xfd, 0x83, 0x59, 0xc2, 0x56, 0xc2, 0xbd, 0xf1, 0x14, 0xf7, 0x8a, 0x56, 0xf3, - 0xf9, 0xb4, 0xbe, 0xa9, 0xc3, 0xdb, 0x9f, 0x3e, 0xc4, 0xf1, 0x6c, 0xf5, 0xf6, 0xbc, 0x49, 0xec, - 0x8a, 0x70, 0xeb, 0x5f, 0x38, 0xcd, 0x58, 0x99, 0xd3, 0x7e, 0x00, 0xf0, 0xd6, 0x61, 0x9e, 0x20, - 0x81, 0x77, 0x64, 0x07, 0xfd, 0x67, 0x3d, 0x46, 0x70, 0x8d, 0xe2, 0x93, 0x48, 0xf7, 0xa6, 0x92, - 0x24, 0xe8, 0x5f, 0x94, 0x76, 0xef, 0x14, 0x65, 0xd3, 0x8f, 0x9d, 0xcb, 0x90, 0x13, 0x76, 0x28, - 0x3e, 0x51, 0x90, 0x37, 0x69, 0xe5, 0x3c, 0x80, 0xe6, 0x78, 0x8a, 0x51, 0xf1, 0x72, 0xc8, 0xdd, - 0x60, 0x23, 0xe7, 0x67, 0x00, 0x7b, 0xfb, 0xfa, 0x5e, 0xe3, 0x97, 0x40, 0x77, 0xaf, 0x00, 0x05, - 0xbd, 0x8b, 0xd2, 0xee, 0xea, 0x93, 0xa8, 0xd7, 0xce, 0x02, 0xfa, 0xc3, 0x7f, 0x80, 0x0e, 0x36, - 0x2f, 0x4a, 0xdb, 0xd4, 0xd9, 0x4b, 0x41, 0xe7, 0x2a, 0xa5, 0x8f, 0x24, 0x25, 0xd5, 0x79, 0xd2, - 0x41, 0x0d, 0xb7, 0x19, 0x58, 0xf3, 0xd2, 0x6e, 0xeb, 0xd6, 0xe3, 0x17, 0xa5, 0xfd, 0xba, 0xde, - 0x61, 0x91, 0xe4, 0x84, 0x6d, 0xdd, 0x8e, 0xdc, 0xf9, 0x05, 0x40, 0xf3, 0x90, 0xe6, 0xaf, 0x14, - 0xe7, 0xef, 0x00, 0x34, 0x97, 0x87, 0x8e, 0xb6, 0xde, 0xf2, 0xfd, 0x03, 0xae, 0xbd, 0x7f, 0xbe, - 0xb8, 0x76, 0xbe, 0xd5, 0x5f, 0x64, 0xbe, 0x05, 0x4d, 0xd9, 0x23, 0xd7, 0x4c, 0x39, 0xe7, 0x1c, - 0x40, 0x5b, 0x93, 0xb9, 0x3a, 0xc4, 0x8e, 0x48, 0xfa, 0x3f, 0x2a, 0xfb, 0x25, 0xdc, 0x40, 0x8a, - 0x72, 0x14, 0x2b, 0xe8, 0x68, 0xa6, 0x28, 0x69, 0x99, 0xd7, 0xb7, 0xdf, 0xb9, 0xf9, 0x84, 0x9a, - 0x7f, 0x75, 0xce, 0x5b, 0xe8, 0x99, 0x08, 0x0f, 0x3e, 0x3b, 0x7b, 0x62, 0xd5, 0x1e, 0x3f, 0xb1, - 0x6a, 0x3f, 0xce, 0x2d, 0x70, 0x36, 0xb7, 0xc0, 0xa3, 0xb9, 0x05, 0xfe, 0x98, 0x5b, 0xe0, 0xeb, - 0x73, 0xab, 0xf6, 0xe8, 0xdc, 0xaa, 0x3d, 0x3e, 0xb7, 0x6a, 0x9f, 0xdf, 0x5d, 0xba, 0x44, 0xc6, - 0x8c, 0x67, 0xf7, 0x17, 0x9f, 0x43, 0x89, 0xff, 0x50, 0x7f, 0x16, 0xa9, 0x8b, 0x64, 0x62, 0xa8, - 0x8f, 0xa2, 0xf7, 0xff, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xad, 0xbf, 0x95, 0xf9, 0x9d, 0x09, 0x00, - 0x00, + // 834 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x56, 0x4f, 0x8f, 0xdb, 0x44, + 0x14, 0xcf, 0xe4, 0x8f, 0x93, 0x9d, 0x8d, 0x20, 0xb8, 0xd9, 0x6d, 0x58, 0xc0, 0x8e, 0x0c, 0xaa, + 0x7c, 0xc1, 0x26, 0x8b, 0x84, 0x80, 0xdb, 0x3a, 0x70, 0xd8, 0x8a, 0x95, 0x56, 0x5e, 0xad, 0x2a, + 0x81, 0x84, 0x35, 0xb1, 0x67, 0x5d, 0x8b, 0xd8, 0x63, 0x79, 0xc6, 0x9b, 0xe6, 0x5b, 0x80, 0x84, + 0x38, 0xf5, 0x03, 0x20, 0x2e, 0x88, 0x3b, 0x1f, 0x60, 0xc5, 0xa9, 0xc7, 0x9e, 0x0c, 0x4d, 0xbe, + 0x41, 0x8e, 0x9c, 0xd0, 0xcc, 0x38, 0x21, 0xdb, 0xb2, 0x69, 0x11, 0x0d, 0x52, 0x2f, 0x4e, 0x66, + 0xde, 0x7b, 0xf3, 0x7e, 0xf3, 0xd3, 0xef, 0xbd, 0x37, 0x50, 0xf7, 0x09, 0x8d, 0x27, 0x88, 0xc6, + 0xb6, 0xf8, 0x5c, 0x0e, 0xec, 0x34, 0x23, 0x29, 0xa1, 0x68, 0x6c, 0xa5, 0x19, 0x61, 0x44, 0xed, + 0x2c, 0x1d, 0x2c, 0xf1, 0xb9, 0x1c, 0x1c, 0x74, 0x43, 0x12, 0x12, 0x61, 0xb4, 0xf9, 0x3f, 0xe9, + 0x77, 0xa0, 0x71, 0x3f, 0x42, 0xed, 0x11, 0xa2, 0xd8, 0xbe, 0x1c, 0x8c, 0x30, 0x43, 0x03, 0xdb, + 0x27, 0x51, 0x52, 0xda, 0xdf, 0x7e, 0x26, 0x11, 0x9b, 0xa6, 0x98, 0x4a, 0xab, 0xf1, 0xb0, 0x0a, + 0xdf, 0x38, 0x63, 0x24, 0xc3, 0x43, 0x12, 0xe0, 0xd3, 0x12, 0x81, 0xda, 0x85, 0x0d, 0x16, 0xb1, + 0x31, 0xee, 0x81, 0x3e, 0x30, 0x77, 0x5c, 0xb9, 0x50, 0xfb, 0x70, 0x37, 0xc0, 0xd4, 0xcf, 0xa2, + 0x94, 0x45, 0x24, 0xe9, 0x55, 0x85, 0x6d, 0x7d, 0x4b, 0xdd, 0x83, 0x4a, 0x96, 0x27, 0x1e, 0xa2, + 0xbd, 0x9a, 0x0c, 0xcc, 0xf2, 0xe4, 0x88, 0xaa, 0x1f, 0xc1, 0xd7, 0x78, 0x6e, 0x6f, 0x34, 0x65, + 0xd8, 0xf3, 0x49, 0x80, 0x7b, 0xf5, 0x3e, 0x30, 0xdb, 0x4e, 0x67, 0x56, 0xe8, 0xed, 0x7b, 0x47, + 0x67, 0x27, 0xce, 0x94, 0x09, 0x00, 0x6e, 0x9b, 0xfb, 0x2d, 0x57, 0xea, 0x39, 0xdc, 0x8f, 0x12, + 0xca, 0x50, 0xc2, 0x22, 0xc4, 0xb0, 0x97, 0xe2, 0x2c, 0x8e, 0x28, 0xe5, 0xb9, 0x9b, 0x7d, 0x60, + 0xee, 0x1e, 0x6a, 0xd6, 0xd3, 0x1c, 0x59, 0x47, 0xbe, 0x8f, 0x29, 0x1d, 0x92, 0xe4, 0x22, 0x0a, + 0xdd, 0xbd, 0xb5, 0xe8, 0xd3, 0x55, 0xb0, 0xfa, 0x0e, 0x84, 0x79, 0x92, 0x46, 0x89, 0x84, 0xd2, + 0xea, 0x03, 0xb3, 0xe5, 0xee, 0x88, 0x1d, 0x9e, 0xf5, 0x6e, 0xbd, 0xd5, 0xe8, 0x28, 0x77, 0xeb, + 0x2d, 0xa5, 0xd3, 0x34, 0x7e, 0xab, 0xc2, 0xb7, 0x8e, 0xff, 0x3e, 0x64, 0x48, 0x12, 0x96, 0x21, + 0x9f, 0x6d, 0x8b, 0xa8, 0x2e, 0x6c, 0xa0, 0x20, 0x8e, 0x12, 0xc1, 0xcf, 0x8e, 0x2b, 0x17, 0xea, + 0xbb, 0xb0, 0xc9, 0x91, 0x7a, 0x51, 0xd0, 0x6b, 0xf4, 0x81, 0x59, 0x77, 0xe0, 0xac, 0xd0, 0x15, + 0x8e, 0xf5, 0xf8, 0x33, 0x57, 0xe1, 0xa6, 0xe3, 0x80, 0x87, 0x8e, 0xd1, 0x08, 0x8f, 0x7b, 0x8a, + 0x0c, 0x15, 0x0b, 0xd5, 0x84, 0xb5, 0x98, 0x86, 0x82, 0xae, 0xb6, 0xb3, 0xff, 0x67, 0xa1, 0xab, + 0x2e, 0x9a, 0x2c, 0x6f, 0x71, 0x82, 0x29, 0x45, 0x21, 0x76, 0xb9, 0x8b, 0x8a, 0x60, 0xe3, 0x22, + 0x4f, 0x02, 0xda, 0x6b, 0xf5, 0x6b, 0xe6, 0xee, 0xe1, 0x9b, 0x96, 0x94, 0x95, 0xc5, 0x65, 0x65, + 0x95, 0xb2, 0xb2, 0x86, 0x24, 0x4a, 0x9c, 0x0f, 0xae, 0x0a, 0xbd, 0xf2, 0xd3, 0xef, 0xba, 0x19, + 0x46, 0xec, 0x7e, 0x3e, 0xb2, 0x7c, 0x12, 0xdb, 0xa5, 0x06, 0xe5, 0xcf, 0xfb, 0x34, 0xf8, 0xa6, + 0x14, 0x19, 0x0f, 0xa0, 0xae, 0x3c, 0xd9, 0xf8, 0x15, 0xc0, 0xdb, 0x27, 0x51, 0x98, 0xbd, 0x4c, + 0x22, 0x0f, 0x60, 0xcb, 0x2f, 0xcf, 0x2a, 0x49, 0x5b, 0xad, 0x5f, 0x8c, 0xb7, 0x92, 0x21, 0xe5, + 0xb9, 0x0c, 0x19, 0xdf, 0x03, 0xd8, 0x3d, 0xcb, 0x03, 0xb2, 0x15, 0xec, 0xb5, 0xa7, 0xb0, 0x97, + 0xb0, 0xea, 0xcf, 0x87, 0xf5, 0x5d, 0x15, 0xde, 0xfe, 0xfc, 0x01, 0xf6, 0xf3, 0xed, 0xcb, 0x73, + 0x13, 0xd9, 0x25, 0xe0, 0xc6, 0xbf, 0x50, 0x9a, 0xb2, 0x35, 0xa5, 0x3d, 0x04, 0xf0, 0xd6, 0x79, + 0x1a, 0x20, 0x86, 0x8f, 0x78, 0x05, 0xfd, 0x67, 0x3e, 0x06, 0x70, 0x27, 0xc1, 0x13, 0x4f, 0xd6, + 0xa6, 0xa0, 0xc4, 0xe9, 0x2e, 0x0a, 0xbd, 0x33, 0x45, 0xf1, 0xf8, 0x53, 0x63, 0x65, 0x32, 0xdc, + 0x56, 0x82, 0x27, 0x22, 0xe5, 0x26, 0xae, 0x8c, 0xfb, 0x50, 0x1d, 0x8e, 0x31, 0xca, 0x5e, 0x0e, + 0xb8, 0x0d, 0x32, 0x32, 0x7e, 0x06, 0xb0, 0x73, 0x2a, 0xfb, 0x1a, 0x5d, 0x25, 0xba, 0x73, 0x2d, + 0x91, 0xd3, 0x59, 0x14, 0x7a, 0x5b, 0xde, 0x44, 0x6c, 0x1b, 0xcb, 0xd4, 0x1f, 0xff, 0x43, 0x6a, + 0x67, 0x7f, 0x51, 0xe8, 0xaa, 0xf4, 0x5e, 0x33, 0x1a, 0xd7, 0x21, 0x7d, 0xc2, 0x21, 0x89, 0xca, + 0xe3, 0x0a, 0xaa, 0x99, 0x75, 0x47, 0x9b, 0x15, 0x7a, 0x53, 0x96, 0x1e, 0x5d, 0x14, 0xfa, 0xeb, + 0xf2, 0x84, 0xa5, 0x93, 0xe1, 0x36, 0x65, 0x39, 0x52, 0xe3, 0x17, 0x00, 0xd5, 0xf3, 0x65, 0x2f, + 0x7e, 0x45, 0x30, 0xff, 0x00, 0xa0, 0xba, 0x3e, 0x78, 0xa4, 0xf4, 0xd6, 0xfb, 0x0f, 0xb8, 0xb1, + 0xff, 0x7c, 0x75, 0xe3, 0x8c, 0xab, 0xbe, 0xc8, 0x8c, 0x73, 0xea, 0xbc, 0x46, 0x6e, 0x98, 0x74, + 0xc6, 0x1c, 0x40, 0x5d, 0x82, 0xb9, 0x3e, 0xc4, 0x2e, 0xa2, 0xf0, 0x7f, 0x64, 0xf6, 0x6b, 0xb8, + 0x87, 0x04, 0x64, 0xcf, 0x17, 0xa9, 0xbd, 0x5c, 0x40, 0x92, 0x34, 0xef, 0x1e, 0xbe, 0xb7, 0xf9, + 0x86, 0x12, 0x7f, 0x79, 0xcf, 0x5b, 0xe8, 0x19, 0x0b, 0x75, 0xbe, 0xb8, 0x7a, 0xa2, 0x55, 0x1e, + 0x3f, 0xd1, 0x2a, 0x3f, 0xce, 0x34, 0x70, 0x35, 0xd3, 0xc0, 0xa3, 0x99, 0x06, 0xfe, 0x98, 0x69, + 0xe0, 0xdb, 0xb9, 0x56, 0x79, 0x34, 0xd7, 0x2a, 0x8f, 0xe7, 0x5a, 0xe5, 0xcb, 0x3b, 0x6b, 0x4d, + 0x64, 0x48, 0x68, 0x7c, 0x6f, 0xf9, 0x24, 0x0a, 0xec, 0x07, 0xf2, 0x69, 0x24, 0x1a, 0xc9, 0x48, + 0x11, 0x0f, 0xa3, 0x0f, 0xff, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x4f, 0xac, 0x4a, 0xb0, 0xa1, 0x09, + 0x00, 0x00, } func (this *StoreCodeProposal) Equal(that interface{}) bool { @@ -690,7 +690,7 @@ func (this *StoreCodeProposal) Equal(that interface{}) bool { if !this.InstantiatePermission.Equal(that1.InstantiatePermission) { return false } - if this.PinCode != that1.PinCode { + if this.UnpinCode != that1.UnpinCode { return false } return true @@ -1084,9 +1084,9 @@ func (m *StoreCodeProposal) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.PinCode { + if m.UnpinCode { i-- - if m.PinCode { + if m.UnpinCode { dAtA[i] = 1 } else { dAtA[i] = 0 @@ -1732,7 +1732,7 @@ func (m *StoreCodeProposal) Size() (n int) { l = m.InstantiatePermission.Size() n += 1 + l + sovProposal(uint64(l)) } - if m.PinCode { + if m.UnpinCode { n += 2 } return n @@ -2204,7 +2204,7 @@ func (m *StoreCodeProposal) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 8: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PinCode", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field UnpinCode", wireType) } var v int for shift := uint(0); ; shift += 7 { @@ -2221,7 +2221,7 @@ func (m *StoreCodeProposal) Unmarshal(dAtA []byte) error { break } } - m.PinCode = bool(v != 0) + m.UnpinCode = bool(v != 0) default: iNdEx = preIndex skippy, err := skipProposal(dAtA[iNdEx:]) From 352e408b70bebc6abf107c32c3aae96c2252baac Mon Sep 17 00:00:00 2001 From: jhernandezb Date: Tue, 6 Sep 2022 08:18:45 -0600 Subject: [PATCH 069/120] fix tag --- x/wasm/client/rest/gov.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/wasm/client/rest/gov.go b/x/wasm/client/rest/gov.go index ef688d9401..f730cb4696 100644 --- a/x/wasm/client/rest/gov.go +++ b/x/wasm/client/rest/gov.go @@ -29,7 +29,7 @@ type StoreCodeProposalJSONReq struct { InstantiatePermission *types.AccessConfig `json:"instantiate_permission" yaml:"instantiate_permission"` // UnpinCode indicates if the code should not be pinned as part of the proposal. - UnpinCode bool `json:"pin_code" yaml:"pin_code"` + UnpinCode bool `json:"unpin_code" yaml:"unpin_code"` } func (s StoreCodeProposalJSONReq) Content() govtypes.Content { From 91cba511a183043897852aee8a821e487a78136d Mon Sep 17 00:00:00 2001 From: faddat Date: Wed, 7 Sep 2022 01:04:39 +0000 Subject: [PATCH 070/120] turbo 46 --- go.mod | 27 +++++++++--- go.sum | 137 ++++++++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 142 insertions(+), 22 deletions(-) diff --git a/go.mod b/go.mod index ebd120d2a2..5505377442 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( cosmossdk.io/math v1.0.0-beta.3 github.com/CosmWasm/wasmvm v1.0.0 github.com/cosmos/cosmos-sdk v0.46.1 - github.com/cosmos/iavl v0.19.1 + github.com/cosmos/iavl v0.19.2-0.20220831121246-807f8c542e48 github.com/cosmos/ibc-go/v5 v5.0.0-rc1 github.com/cosmos/interchain-accounts v0.3.2 github.com/dvsekhvalnov/jose2go v1.5.0 @@ -42,6 +42,8 @@ require ( filippo.io/edwards25519 v1.0.0-rc.1 // indirect github.com/99designs/keyring v1.2.1 // indirect github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect + github.com/DataDog/zstd v1.5.0 // indirect + github.com/HdrHistogram/hdrhistogram-go v1.1.2 // indirect github.com/Workiva/go-datastructures v1.0.53 // indirect github.com/armon/go-metrics v0.4.0 // indirect github.com/aws/aws-sdk-go v1.40.45 // indirect @@ -53,9 +55,15 @@ require ( github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect + github.com/cockroachdb/errors v1.8.1 // indirect + github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f // indirect + github.com/cockroachdb/pebble v0.0.0-20220817183557-09c6e030a677 // indirect + github.com/cockroachdb/redact v1.0.8 // indirect + github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2 // indirect github.com/coinbase/rosetta-sdk-go v0.7.9 // indirect github.com/confio/ics23/go v0.7.0 // indirect github.com/cosmos/btcutil v1.0.4 // indirect + github.com/cosmos/cosmos-db v0.0.0-20220901120321-77d98dabb5d3 // indirect github.com/cosmos/cosmos-proto v1.0.0-alpha7 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gorocksdb v1.2.0 // indirect @@ -79,7 +87,7 @@ require ( github.com/golang/glog v1.0.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/snappy v0.0.4 // indirect - github.com/google/btree v1.0.1 // indirect + github.com/google/btree v1.1.2 // indirect github.com/google/orderedcode v0.0.1 // indirect github.com/googleapis/gax-go/v2 v2.4.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect @@ -102,11 +110,14 @@ require ( github.com/jmhodges/levigo v1.0.0 // indirect github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d // indirect github.com/klauspost/compress v1.15.9 // indirect + github.com/kr/pretty v0.3.0 // indirect + github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.6 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect + github.com/linxGnu/grocksdb v1.7.5 // indirect github.com/magiconair/properties v1.8.6 // indirect - github.com/mattn/go-colorable v0.1.12 // indirect - github.com/mattn/go-isatty v0.0.14 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.16 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 // indirect github.com/minio/highwayhash v1.0.2 // indirect @@ -122,6 +133,7 @@ require ( github.com/prometheus/common v0.37.0 // indirect github.com/prometheus/procfs v0.8.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 // indirect + github.com/rogpeppe/go-internal v1.8.1 // indirect github.com/rs/cors v1.8.2 // indirect github.com/rs/zerolog v1.27.0 // indirect github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa // indirect @@ -135,11 +147,11 @@ require ( github.com/zondax/hid v0.9.1-0.20220302062450-5552068d2266 // indirect go.etcd.io/bbolt v1.3.6 // indirect go.opencensus.io v0.23.0 // indirect - golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect + golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa // indirect golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect - golang.org/x/net v0.0.0-20220726230323-06994584191e // indirect + golang.org/x/net v0.0.0-20220812174116-3211cb980234 // indirect golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 // indirect - golang.org/x/sys v0.0.0-20220727055044-e65921a090b8 // indirect + golang.org/x/sys v0.0.0-20220817070843-5a390386f1f2 // indirect golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 // indirect golang.org/x/text v0.3.7 // indirect golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df // indirect @@ -155,6 +167,7 @@ require ( replace ( // Use the cosmos-flavored keyring library github.com/99designs/keyring => github.com/cosmos/keyring v1.1.7-0.20210622111912-ef00f8ac3d76 + github.com/cosmos/cosmos-sdk => github.com/notional-labs/cosmos-sdk v0.46.0-craft.0.20220907004034-2a40a2ecd9c5 // Fix upstream GHSA-h395-qcrw-5vmq vulnerability. // TODO Remove it: https://github.com/cosmos/cosmos-sdk/issues/10409 github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.7.0 diff --git a/go.sum b/go.sum index 828a21f44c..b8fb65037a 100644 --- a/go.sum +++ b/go.sum @@ -70,6 +70,7 @@ filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmG filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= git.sr.ht/~sircmpwn/getopt v0.0.0-20191230200459-23622cc906b3/go.mod h1:wMEGFFFNuPos7vHmWXfszqImLppbc0wEhh6JBfJIUgw= git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9/go.mod h1:BVJwbDfVjCjoFiKrhkei6NdGcZYpkDkdyCdg1ukytRA= +github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= @@ -78,16 +79,25 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= +github.com/CloudyKit/fastprinter v0.0.0-20170127035650-74b38d55f37a/go.mod h1:EFZQ978U7x8IRnstaskI3IysnWY5Ao3QgZUKOXlsAdw= +github.com/CloudyKit/jet v2.1.3-0.20180809161101-62edd43e4f88+incompatible/go.mod h1:HPYO+50pSWkPoj9Q/eq0aRGByCL6ScRlUmiEX5Zgm+w= github.com/CosmWasm/wasmvm v1.0.0 h1:NRmnHe3xXsKn2uEcB1F5Ha323JVAhON+BI6L177dlKc= github.com/CosmWasm/wasmvm v1.0.0/go.mod h1:ei0xpvomwSdONsxDuONzV7bL1jSET1M8brEx0FCXc+A= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= +github.com/DataDog/zstd v1.5.0 h1:+K/VEwIAaPcHiMtQvpLD4lqW7f0Gk3xdYZmI1hD+CXo= github.com/DataDog/zstd v1.5.0/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= +github.com/Joker/jade v1.0.1-0.20190614124447-d475f43051e7/go.mod h1:6E6s8o2AE4KhCrqr6GRJjdC/gNfTdxkIXvuGZZda2VM= 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/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= +github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= @@ -100,6 +110,7 @@ github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1: github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -134,6 +145,7 @@ github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7 github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= +github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -204,7 +216,20 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/cockroachdb/datadriven v1.0.0/go.mod h1:5Ib8Meh+jk1RlHIXej6Pzevx/NLlNvQB9pmSBZErGA4= +github.com/cockroachdb/errors v1.6.1/go.mod h1:tm6FTP5G81vwJ5lC0SizQo374JNCOPrHyXGitRJoDqM= +github.com/cockroachdb/errors v1.8.1 h1:A5+txlVZfOqFBDa4mGz2bUWSp0aHElvHX2bKkdbQu+Y= +github.com/cockroachdb/errors v1.8.1/go.mod h1:qGwQn6JmZ+oMjuLwjWzUNqblqk0xl4CVV3SQbGwK7Ac= +github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f h1:o/kfcElHqOiXqcou5a3rIlMc7oJbMQkeLk0VQJ7zgqY= +github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= +github.com/cockroachdb/pebble v0.0.0-20220817183557-09c6e030a677 h1:qbb/AE938DFhOajUYh9+OXELpSF9KZw2ZivtmW6eX1Q= +github.com/cockroachdb/pebble v0.0.0-20220817183557-09c6e030a677/go.mod h1:890yq1fUb9b6dGNwssgeUO5vQV9qfXnCPxAJhBQfXw0= +github.com/cockroachdb/redact v1.0.8 h1:8QG/764wK+vmEYoOlfobpe12EQcS81ukx/a4hdVMxNw= +github.com/cockroachdb/redact v1.0.8/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2 h1:IKgmqgMQlVJIZj19CdocBeSfSaiCbEBZGKODaixqtHM= +github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2/go.mod h1:8BT+cPK6xvFOcRlk0R8eg+OTkcqI6baNH4xAkpiYVvQ= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= github.com/coinbase/kryptology v1.8.0/go.mod h1:RYXOAPdzOGUe3qlSFkMGn58i3xUA8hmxYHksuq+8ciI= github.com/coinbase/rosetta-sdk-go v0.7.9 h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZr9ZvoCcA= github.com/coinbase/rosetta-sdk-go v0.7.9/go.mod h1:0/knutI7XGVqXmmH4OQD8OckFrbQ8yMsUZTG7FXCR2M= @@ -223,17 +248,17 @@ github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1 github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.4 h1:n7C2ngKXo7UC9gNyMNLbzqz7Asuf+7Qv4gnX/rOdQ44= github.com/cosmos/btcutil v1.0.4/go.mod h1:Ffqc8Hn6TJUdDgHBwIZLtrLQC1KdJ9jGJl/TvgUaxbU= +github.com/cosmos/cosmos-db v0.0.0-20220901120321-77d98dabb5d3 h1:h2ENpR9rZnqLE85EdN+OoGZ3DUH9Xjfozz44wnA3Or8= +github.com/cosmos/cosmos-db v0.0.0-20220901120321-77d98dabb5d3/go.mod h1:5DZPX2HFdg4n1PWFXRR/q7J2e1mxRc+A7g3UMnrKHkM= github.com/cosmos/cosmos-proto v1.0.0-alpha7 h1:yqYUOHF2jopwZh4dVQp3xgqwftE5/2hkrwIV6vkUbO0= github.com/cosmos/cosmos-proto v1.0.0-alpha7/go.mod h1:dosO4pSAbJF8zWCzCoTWP7nNsjcvSUBQmniFxDg5daw= -github.com/cosmos/cosmos-sdk v0.46.1 h1:7vUZXMyrmEb4xtBYpz1TobtrcnpgiZTi+tVjc0XWB4o= -github.com/cosmos/cosmos-sdk v0.46.1/go.mod h1:2+o8Qw8qnE02V+lQVZDJFQ8tri/hsiA5GmWaPERqVa0= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= -github.com/cosmos/iavl v0.19.1 h1:3gaq9b6SjiB0KBTygRnAvEGml2pQlu1TH8uma5g63Ys= -github.com/cosmos/iavl v0.19.1/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= +github.com/cosmos/iavl v0.19.2-0.20220831121246-807f8c542e48 h1:EsahAnhcFjgBEw5YmpKC4WPIXuq+/wtfv8wILvlzH7M= +github.com/cosmos/iavl v0.19.2-0.20220831121246-807f8c542e48/go.mod h1:QDVpRN0MG85An81kvRwB/yhAA6AuMvlTRM+CJTdslpg= github.com/cosmos/ibc-go/v5 v5.0.0-rc1 h1:9cgpYmHh2jodB/t3LwB/pYA2sG9rdKB9cmXP0D5M0Fs= github.com/cosmos/ibc-go/v5 v5.0.0-rc1/go.mod h1:Wqsguq98Iuns8tgTv8+xaGYbC+Q8zJfbpjzT6IgMJbs= github.com/cosmos/interchain-accounts v0.3.2 h1:7S5rSndahpjkzUvG00kKZrTZsEuVHuVC9a7p0qDVcF8= @@ -268,6 +293,7 @@ github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= +github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= @@ -299,6 +325,7 @@ github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1 github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -310,15 +337,19 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m 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= +github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= +github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= +github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4/go.mod h1:T9YF2M40nIgbVgp3rreNmTged+9HrbNTIQf1PsaIiTA= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= @@ -328,9 +359,11 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= +github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9/go.mod h1:106OIgooyS7OzLDOpUGgm9fA3bQENb/cFSyyBmMoJDs= 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= @@ -338,7 +371,10 @@ github.com/gin-gonic/gin v1.7.0 h1:jGB9xAJQ12AIGNB4HguylppmDK1Am9ppF7XnGXXJuoU= github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= +github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= +github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= +github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= 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= @@ -356,6 +392,7 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V 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-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= @@ -382,7 +419,9 @@ github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5x github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= +github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= @@ -429,10 +468,11 @@ github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= +github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= -github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= +github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= +github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -449,6 +489,7 @@ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -500,6 +541,7 @@ github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= @@ -568,8 +610,10 @@ github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpO github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/huin/goupnp v1.0.3-0.20220313090229-ca81a64b4204/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= +github.com/hydrogen18/memlistener v0.0.0-20141126152155-54553eb933fb/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= 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 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= @@ -586,6 +630,10 @@ github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19y github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= +github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= +github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= +github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0/go.mod h1:pMCz62A0xJL6I+umB2YTlFRwWXaDFA0jy+5HzGiJjqI= +github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= @@ -614,17 +662,27 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= +github.com/juju/loggo v0.0.0-20180524022052-584905176618/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U= +github.com/juju/testing v0.0.0-20180920084828-472a3e8b2073/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= +github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= +github.com/kataras/golog v0.0.9/go.mod h1:12HJgwBIZFNGL0EJnMRhmvGA0PQGx8VFwrZtM4CqbAk= +github.com/kataras/iris/v12 v12.0.1/go.mod h1:udK4vLQKkdDqMGJJVd/msuMtN6hpYJhg/lSzuxjhO+U= +github.com/kataras/neffos v0.0.10/go.mod h1:ZYmJC07hQPW67eKuzlfY7SO3bC0mw83A3j6im82hfqw= +github.com/kataras/pio v0.0.0-20190103105442-ea782b38602d/go.mod h1:NV88laa9UiiDuX9AhMbDPkGYSPugBOV6yTZB1l2K9Z0= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d h1:Z+RDyXzjKE0i2sTjZ/b1uxiGtPhFy34Ou/Tk0qwN0kM= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc= 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/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.9.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= 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= @@ -632,6 +690,7 @@ github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8 github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY= github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -641,11 +700,13 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g= github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= @@ -658,6 +719,8 @@ github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6 github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/linxGnu/grocksdb v1.7.5 h1:nB/Z6OsxvO4VJqn4CYaUubYh0523YBsAPvrW5Gc7cnY= +github.com/linxGnu/grocksdb v1.7.5/go.mod h1:8RUIOKch4MgftfkmgG4FPVkPUwvbLWlX/FcDkJFXIbo= github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -671,24 +734,30 @@ github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVc github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= 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.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= 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-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= +github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= 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/mediocregopher/mediocre-go-lib v0.0.0-20181029021733-cb65787f37ed/go.mod h1:dSsfyI2zABAdhcbvkXqgxOxrCsbYeHCPgrZkku60dSg= +github.com/mediocregopher/radix/v3 v3.3.0/go.mod h1:EmfVyvspXz1uZEyPBMyGK+kjWiKQGvsUt6O3Pj+LDCQ= +github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 h1:hLDRPB66XQT/8+wG9WsDpiCvZf1yKO7sz7scAjSlBa0= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= @@ -717,6 +786,7 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= +github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= 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= @@ -729,12 +799,16 @@ github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats.go v1.8.1/go.mod h1:BrFz9vVn0fU3AcH9Vn4Kd7W0NpJ651tD5omQ3M8LwxM= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nkeys v0.0.2/go.mod h1:dab7URMsZm6Z/jp9Z5UGa87Uutgc2mVpXLC4B7TDb/4= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/neilotoole/errgroup v0.1.6/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/notional-labs/cosmos-sdk v0.46.0-craft.0.20220907004034-2a40a2ecd9c5 h1:5GNz1gNr/gRaTxWjzlw3a708ZvKsPmDZDPWoHhlyWJQ= +github.com/notional-labs/cosmos-sdk v0.46.0-craft.0.20220907004034-2a40a2ecd9c5/go.mod h1:1ewwrHQB6DXP6jmMDyF1u8TwBbZ9INgyjNAT+KKzKkg= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= @@ -745,6 +819,7 @@ github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0= github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= @@ -786,6 +861,9 @@ github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -850,7 +928,9 @@ github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRr github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rs/cors 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= @@ -861,14 +941,17 @@ github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa h1:0U2s5loxrTy6/VgfVoLuVLFJcURKLH49ie0zSch7gh4= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= +github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -963,16 +1046,26 @@ github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oW 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/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= +github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE= +github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= +github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= +github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -1027,8 +1120,8 @@ golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa h1:zuSxTR4o9y82ebqCUJYNGJbGPo6sKVl54f/TVDObg1c= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1043,6 +1136,7 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= +golang.org/x/exp v0.0.0-20200513190911-00229845015e/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= @@ -1083,6 +1177,7 @@ golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -1092,6 +1187,7 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1132,8 +1228,8 @@ golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220726230323-06994584191e h1:wOQNKh1uuDGRnmgF0jDxh7ctgGy/3P4rYWQRVJD4/Yg= -golang.org/x/net v0.0.0-20220726230323-06994584191e/go.mod h1:AaygXjzTFtRAg2ttMY5RMuhpJ3cNnI0XpyFJD1iQRSM= +golang.org/x/net v0.0.0-20220812174116-3211cb980234 h1:RDqmgfe7SvlMWoqC3xwQ2blLO3fcWcxMa3eBLRdRW7E= +golang.org/x/net v0.0.0-20220812174116-3211cb980234/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= 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= @@ -1166,6 +1262,7 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1252,6 +1349,7 @@ golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/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-20210909193231-528a39cd75f3/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-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1266,8 +1364,9 @@ golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/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-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220727055044-e65921a090b8 h1:dyU22nBWzrmTQxtNrr4dzVOvaw35nUYE279vF9UmsI8= -golang.org/x/sys v0.0.0-20220727055044-e65921a090b8/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-20220817070843-5a390386f1f2 h1:fqTvyMIIj+HRzMmnzr9NtpHP6uVpvB5fkHcgPDC4nu8= +golang.org/x/sys v0.0.0-20220817070843-5a390386f1f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1292,12 +1391,14 @@ golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -1362,6 +1463,8 @@ golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNq gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= +gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= @@ -1414,6 +1517,7 @@ google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1499,6 +1603,7 @@ google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b h1:SfSkJugek6xm7lWywqth4r2iTrYLpD8lOj1nMIIhMNM= google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= 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.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -1559,6 +1664,7 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= @@ -1569,6 +1675,7 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI= gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= From f452fd1c44292608ecece6c3460e52acc15bdf8d Mon Sep 17 00:00:00 2001 From: faddat Date: Wed, 7 Sep 2022 01:09:45 +0000 Subject: [PATCH 071/120] turbo46 --- app/app.go | 2 +- app/app_test.go | 2 +- app/sim_test.go | 2 +- app/test_helpers.go | 2 +- benchmarks/app_test.go | 2 +- benchmarks/bench_test.go | 2 +- cmd/wasmd/root.go | 2 +- go.mod | 4 ++-- x/wasm/keeper/ante_test.go | 2 +- x/wasm/keeper/bench_test.go | 2 +- x/wasm/keeper/genesis_test.go | 2 +- x/wasm/keeper/query_plugins_test.go | 2 +- x/wasm/keeper/test_common.go | 2 +- x/wasm/types/iavl_range_test.go | 2 +- 14 files changed, 15 insertions(+), 15 deletions(-) diff --git a/app/app.go b/app/app.go index baeb5df62b..62dfb5a631 100644 --- a/app/app.go +++ b/app/app.go @@ -95,6 +95,7 @@ import ( // Note: please do your research before using this in production app, this is a demo and not an officially // supported IBC team implementation. It has no known issues, but do your own research before using it. + dbm "github.com/cosmos/cosmos-db" storetypes "github.com/cosmos/cosmos-sdk/store/types" intertx "github.com/cosmos/interchain-accounts/x/inter-tx" intertxkeeper "github.com/cosmos/interchain-accounts/x/inter-tx/keeper" @@ -107,7 +108,6 @@ import ( "github.com/tendermint/tendermint/libs/log" tmos "github.com/tendermint/tendermint/libs/os" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - dbm "github.com/tendermint/tm-db" wasmappparams "github.com/CosmWasm/wasmd/app/params" "github.com/CosmWasm/wasmd/x/wasm" diff --git a/app/app_test.go b/app/app_test.go index 46f0725262..23bcf45e7f 100644 --- a/app/app_test.go +++ b/app/app_test.go @@ -6,6 +6,7 @@ import ( "testing" "time" + db "github.com/cosmos/cosmos-db" codectypes "github.com/cosmos/cosmos-sdk/codec/types" cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" @@ -18,7 +19,6 @@ import ( "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/libs/log" tmtypes "github.com/tendermint/tendermint/types" - db "github.com/tendermint/tm-db" abci "github.com/tendermint/tendermint/abci/types" diff --git a/app/sim_test.go b/app/sim_test.go index 925bc03ec5..31e9cd94e6 100644 --- a/app/sim_test.go +++ b/app/sim_test.go @@ -11,6 +11,7 @@ import ( "github.com/cosmos/cosmos-sdk/store" "github.com/cosmos/cosmos-sdk/store/prefix" + dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" @@ -37,7 +38,6 @@ import ( "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/libs/log" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - dbm "github.com/tendermint/tm-db" "github.com/CosmWasm/wasmd/x/wasm" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" diff --git a/app/test_helpers.go b/app/test_helpers.go index 6c2e8133cb..20952d642d 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -12,6 +12,7 @@ import ( "time" "cosmossdk.io/math" + dbm "github.com/cosmos/cosmos-db" bam "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" codectypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -33,7 +34,6 @@ import ( "github.com/tendermint/tendermint/libs/log" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" - dbm "github.com/tendermint/tm-db" "github.com/CosmWasm/wasmd/x/wasm" ) diff --git a/benchmarks/app_test.go b/benchmarks/app_test.go index 6a1c98dda3..99538cc2f2 100644 --- a/benchmarks/app_test.go +++ b/benchmarks/app_test.go @@ -9,11 +9,11 @@ import ( "github.com/stretchr/testify/require" + dbm "github.com/cosmos/cosmos-db" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" - dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/simapp/helpers" diff --git a/benchmarks/bench_test.go b/benchmarks/bench_test.go index 0cd181f5d1..9f8198d45d 100644 --- a/benchmarks/bench_test.go +++ b/benchmarks/bench_test.go @@ -8,9 +8,9 @@ import ( "github.com/stretchr/testify/require" "github.com/syndtr/goleveldb/leveldb/opt" + dbm "github.com/cosmos/cosmos-db" abci "github.com/tendermint/tendermint/abci/types" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/cmd/wasmd/root.go b/cmd/wasmd/root.go index 5a6e6accf1..ca0b3db74c 100644 --- a/cmd/wasmd/root.go +++ b/cmd/wasmd/root.go @@ -6,6 +6,7 @@ import ( "os" "path/filepath" + dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/config" @@ -31,7 +32,6 @@ import ( tmcfg "github.com/tendermint/tendermint/config" tmcli "github.com/tendermint/tendermint/libs/cli" "github.com/tendermint/tendermint/libs/log" - dbm "github.com/tendermint/tm-db" "github.com/CosmWasm/wasmd/app" "github.com/CosmWasm/wasmd/app/params" diff --git a/go.mod b/go.mod index 5505377442..f04d86a1fa 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( cosmossdk.io/errors v1.0.0-beta.7 cosmossdk.io/math v1.0.0-beta.3 github.com/CosmWasm/wasmvm v1.0.0 + github.com/cosmos/cosmos-db v0.0.0-20220901120321-77d98dabb5d3 github.com/cosmos/cosmos-sdk v0.46.1 github.com/cosmos/iavl v0.19.2-0.20220831121246-807f8c542e48 github.com/cosmos/ibc-go/v5 v5.0.0-rc1 @@ -28,7 +29,6 @@ require ( github.com/stretchr/testify v1.8.0 github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 github.com/tendermint/tendermint v0.34.21 - github.com/tendermint/tm-db v0.6.7 google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b google.golang.org/grpc v1.49.0 gopkg.in/yaml.v2 v2.4.0 @@ -63,7 +63,6 @@ require ( github.com/coinbase/rosetta-sdk-go v0.7.9 // indirect github.com/confio/ics23/go v0.7.0 // indirect github.com/cosmos/btcutil v1.0.4 // indirect - github.com/cosmos/cosmos-db v0.0.0-20220901120321-77d98dabb5d3 // indirect github.com/cosmos/cosmos-proto v1.0.0-alpha7 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gorocksdb v1.2.0 // indirect @@ -143,6 +142,7 @@ require ( github.com/tendermint/btcd v0.1.1 // indirect github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 // indirect github.com/tendermint/go-amino v0.16.0 // indirect + github.com/tendermint/tm-db v0.6.7 // indirect github.com/ulikunitz/xz v0.5.8 // indirect github.com/zondax/hid v0.9.1-0.20220302062450-5552068d2266 // indirect go.etcd.io/bbolt v1.3.6 // indirect diff --git a/x/wasm/keeper/ante_test.go b/x/wasm/keeper/ante_test.go index e96332c9fe..092b1aa397 100644 --- a/x/wasm/keeper/ante_test.go +++ b/x/wasm/keeper/ante_test.go @@ -8,6 +8,7 @@ import ( "github.com/CosmWasm/wasmd/x/wasm/keeper" + dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/store" storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -15,7 +16,6 @@ import ( "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/libs/log" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - dbm "github.com/tendermint/tm-db" "github.com/CosmWasm/wasmd/x/wasm/types" ) diff --git a/x/wasm/keeper/bench_test.go b/x/wasm/keeper/bench_test.go index 1ad1693bb5..cfed0f2bdc 100644 --- a/x/wasm/keeper/bench_test.go +++ b/x/wasm/keeper/bench_test.go @@ -4,9 +4,9 @@ import ( "os" "testing" + dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" "github.com/stretchr/testify/require" - dbm "github.com/tendermint/tm-db" "github.com/CosmWasm/wasmd/x/wasm/types" ) diff --git a/x/wasm/keeper/genesis_test.go b/x/wasm/keeper/genesis_test.go index 001e4c5edc..e3e99be1aa 100644 --- a/x/wasm/keeper/genesis_test.go +++ b/x/wasm/keeper/genesis_test.go @@ -11,6 +11,7 @@ import ( "testing" "time" + dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/store" "github.com/cosmos/cosmos-sdk/store/prefix" storetypes "github.com/cosmos/cosmos-sdk/store/types" @@ -28,7 +29,6 @@ import ( "github.com/tendermint/tendermint/libs/log" "github.com/tendermint/tendermint/proto/tendermint/crypto" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - dbm "github.com/tendermint/tm-db" "github.com/CosmWasm/wasmd/x/wasm/types" wasmTypes "github.com/CosmWasm/wasmd/x/wasm/types" diff --git a/x/wasm/keeper/query_plugins_test.go b/x/wasm/keeper/query_plugins_test.go index 555521d68f..e64a1a9595 100644 --- a/x/wasm/keeper/query_plugins_test.go +++ b/x/wasm/keeper/query_plugins_test.go @@ -4,8 +4,8 @@ import ( "encoding/json" "testing" + dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/store" - dbm "github.com/tendermint/tm-db" wasmvmtypes "github.com/CosmWasm/wasmvm/types" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/wasm/keeper/test_common.go b/x/wasm/keeper/test_common.go index b1d6edcb40..2909429002 100644 --- a/x/wasm/keeper/test_common.go +++ b/x/wasm/keeper/test_common.go @@ -10,6 +10,7 @@ import ( "github.com/CosmWasm/wasmd/x/wasm/keeper/testdata" + dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/std" @@ -70,7 +71,6 @@ import ( "github.com/tendermint/tendermint/libs/log" "github.com/tendermint/tendermint/libs/rand" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - dbm "github.com/tendermint/tm-db" wasmappparams "github.com/CosmWasm/wasmd/app/params" diff --git a/x/wasm/types/iavl_range_test.go b/x/wasm/types/iavl_range_test.go index 1e5bdc92ab..2d6472b986 100644 --- a/x/wasm/types/iavl_range_test.go +++ b/x/wasm/types/iavl_range_test.go @@ -3,11 +3,11 @@ package types import ( "testing" + dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/store" "github.com/cosmos/cosmos-sdk/store/iavl" iavl2 "github.com/cosmos/iavl" "github.com/stretchr/testify/require" - dbm "github.com/tendermint/tm-db" ) // This is modeled close to From 8fbce82f3cdc351907800b08c9e9bef3b9126acf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Sep 2022 08:19:57 +0000 Subject: [PATCH 072/120] Bump github.com/spf13/viper from 1.12.0 to 1.13.0 Bumps [github.com/spf13/viper](https://github.com/spf13/viper) from 1.12.0 to 1.13.0. - [Release notes](https://github.com/spf13/viper/releases) - [Commits](https://github.com/spf13/viper/compare/v1.12.0...v1.13.0) --- updated-dependencies: - dependency-name: github.com/spf13/viper dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 8 ++++---- go.sum | 17 ++++++++--------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/go.mod b/go.mod index bbeeeefca6..5ae79705ba 100644 --- a/go.mod +++ b/go.mod @@ -22,7 +22,7 @@ require ( github.com/spf13/cast v1.5.0 github.com/spf13/cobra v1.5.0 github.com/spf13/pflag v1.0.5 - github.com/spf13/viper v1.12.0 + github.com/spf13/viper v1.13.0 github.com/stretchr/testify v1.8.0 github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca github.com/tendermint/tendermint v0.34.21 @@ -95,7 +95,7 @@ require ( github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect github.com/pelletier/go-toml v1.9.5 // indirect - github.com/pelletier/go-toml/v2 v2.0.2 // indirect + github.com/pelletier/go-toml/v2 v2.0.5 // indirect github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.2.0 // indirect @@ -107,7 +107,7 @@ require ( github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa // indirect github.com/spf13/afero v1.8.2 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect - github.com/subosito/gotenv v1.4.0 // indirect + github.com/subosito/gotenv v1.4.1 // indirect github.com/tendermint/btcd v0.1.1 // indirect github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 // indirect github.com/tendermint/go-amino v0.16.0 // indirect @@ -120,7 +120,7 @@ require ( golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 // indirect golang.org/x/text v0.3.7 // indirect google.golang.org/protobuf v1.28.1 // indirect - gopkg.in/ini.v1 v1.66.6 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect nhooyr.io/websocket v1.8.6 // indirect ) diff --git a/go.sum b/go.sum index 2b287c95b0..5cfe6dd202 100644 --- a/go.sum +++ b/go.sum @@ -592,8 +592,8 @@ github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtP 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.2 h1:+jQXlF3scKIcSEKkdHzXhCTDLPFi5r1wnK6yPS+49Gw= -github.com/pelletier/go-toml/v2 v2.0.2/go.mod h1:MovirKjgVRESsAvNZlAjtFwV867yGuwRkXbG66OzopI= +github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg= +github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= @@ -714,8 +714,8 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ= -github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= +github.com/spf13/viper v1.13.0 h1:BWSJ/M+f+3nmdz9bxB+bWX28kkALN2ok11D0rSo8EJU= +github.com/spf13/viper v1.13.0/go.mod h1:Icm2xNL3/8uyh/wFuB1jI7TiTNKp8632Nwegu+zgdYw= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= @@ -734,11 +734,10 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/subosito/gotenv v1.4.0 h1:yAzM1+SmVcz5R4tXGsNMu1jUl2aOJXoiWUCEwwnGrvs= -github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo= +github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs= +github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca h1:Ld/zXl5t4+D69SiV4JoN7kkfvJdOWlPpfxrzxpLMoUk= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= github.com/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s= @@ -1176,8 +1175,8 @@ gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qS gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI= -gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= From a40a10643d26c9a29895385a56173bd5903a733e Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Wed, 7 Sep 2022 10:25:44 +0200 Subject: [PATCH 073/120] Upgrade to wasmvm v1.1.0 --- Dockerfile | 8 ++++---- README.md | 4 +++- go.mod | 16 ++++++++-------- go.sum | 28 +++++++++++++++++----------- x/wasm/keeper/proposal_handler.go | 1 - x/wasm/keeper/recurse_test.go | 4 ++-- 6 files changed, 34 insertions(+), 27 deletions(-) diff --git a/Dockerfile b/Dockerfile index ea887a4d31..0fac41b100 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,10 +16,10 @@ WORKDIR /code COPY . /code/ # See https://github.com/CosmWasm/wasmvm/releases -ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.0.0/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a -ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.0.0/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a -RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep 7d2239e9f25e96d0d4daba982ce92367aacf0cbd95d2facb8442268f2b1cc1fc -RUN sha256sum /lib/libwasmvm_muslc.x86_64.a | grep f6282df732a13dec836cda1f399dd874b1e3163504dbd9607c6af915b2740479 +ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.1.0/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a +ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.1.0/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a +RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep 728993b91b35037ae8d9933c3a9ee018e49a7926571ce4109f55d9954efcbe9a +RUN sha256sum /lib/libwasmvm_muslc.x86_64.a | grep d06607db7bda6d3981f0717133584dd5480a6bca7b1e208b4526e68f3ccf3b31 # Copy the library you want to the final location that will be found by the linker flag `-lwasmvm_muslc` RUN cp /lib/libwasmvm_muslc.${arch}.a /lib/libwasmvm_muslc.a diff --git a/README.md b/README.md index 2c4944dd35..8deccd01dc 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,9 @@ version is communicated by the contract via a Wasm export. This is the current compatibility list: | wasmd | wasmvm | cosmwasm-vm | cosmwasm-std | -| ----- | ------------ | ----------- | ------------ | +|-------|--------------|-------------|--------------| +| 0.29 | v1.1.0 | | 1.1 | +| 0.28 | v1.0.0 | | 1.0 | | 0.27 | v1.0.0 | | 1.0 | | 0.26 | 1.0.0-beta10 | | 1.0 | | 0.25 | 1.0.0-beta10 | | 1.0 | diff --git a/go.mod b/go.mod index bbeeeefca6..f93697ccc3 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/CosmWasm/wasmd go 1.18 require ( - github.com/CosmWasm/wasmvm v1.0.0 + github.com/CosmWasm/wasmvm v1.1.0 github.com/cosmos/cosmos-sdk v0.45.8 github.com/cosmos/iavl v0.19.1 github.com/cosmos/ibc-go/v3 v3.0.0 @@ -36,7 +36,6 @@ require ( filippo.io/edwards25519 v1.0.0-beta.2 // indirect github.com/99designs/keyring v1.1.6 // indirect github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect - github.com/DataDog/zstd v1.4.5 // indirect github.com/Workiva/go-datastructures v1.0.53 // indirect github.com/armon/go-metrics v0.4.0 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -55,8 +54,8 @@ require ( github.com/danieljoos/wincred v1.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect - github.com/dgraph-io/badger/v2 v2.2007.2 // indirect - github.com/dgraph-io/ristretto v0.0.3 // indirect + github.com/dgraph-io/badger/v2 v2.2007.4 // indirect + github.com/dgraph-io/ristretto v0.1.0 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/dustin/go-humanize v1.0.0 // indirect github.com/felixge/httpsnoop v1.0.1 // indirect @@ -66,8 +65,9 @@ require ( github.com/go-logfmt/logfmt v0.5.1 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/gateway v1.1.0 // indirect - github.com/golang/snappy v0.0.3 // indirect - github.com/google/btree v1.0.0 // indirect + github.com/golang/glog v1.0.0 // 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/gorilla/handlers v1.5.1 // indirect github.com/gorilla/websocket v1.5.0 // indirect @@ -115,8 +115,8 @@ require ( go.etcd.io/bbolt v1.3.6 // indirect golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect - golang.org/x/net v0.0.0-20220726230323-06994584191e // indirect - golang.org/x/sys v0.0.0-20220727055044-e65921a090b8 // indirect + golang.org/x/net v0.0.0-20220906165146-f3363e06e74c // indirect + golang.org/x/sys v0.0.0-20220907062415-87db552b00fd // indirect golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 // indirect golang.org/x/text v0.3.7 // indirect google.golang.org/protobuf v1.28.1 // indirect diff --git a/go.sum b/go.sum index 2b287c95b0..efc49e6d07 100644 --- a/go.sum +++ b/go.sum @@ -55,11 +55,10 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/CosmWasm/wasmvm v1.0.0 h1:NRmnHe3xXsKn2uEcB1F5Ha323JVAhON+BI6L177dlKc= -github.com/CosmWasm/wasmvm v1.0.0/go.mod h1:ei0xpvomwSdONsxDuONzV7bL1jSET1M8brEx0FCXc+A= +github.com/CosmWasm/wasmvm v1.1.0 h1:FLd2njaJcZPgq/yLrXtQdndg0oG/QySKpWyVP2tBCnQ= +github.com/CosmWasm/wasmvm v1.1.0/go.mod h1:ei0xpvomwSdONsxDuONzV7bL1jSET1M8brEx0FCXc+A= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= -github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= 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= @@ -194,11 +193,13 @@ github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vs github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= -github.com/dgraph-io/badger/v2 v2.2007.2 h1:EjjK0KqwaFMlPin1ajhP943VPENHJdEz1KLIegjaI3k= github.com/dgraph-io/badger/v2 v2.2007.2/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= +github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= +github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.0.3 h1:jh22xisGBjrEVnRZ1DVTpBVQm0Xndu8sMl0CWDzSIBI= github.com/dgraph-io/ristretto v0.0.3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= +github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= @@ -286,6 +287,8 @@ github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5x github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= github.com/golang/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/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= @@ -318,11 +321,13 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= +github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -468,6 +473,7 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY= github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -907,8 +913,8 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210525063256-abc453219eb5/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-20220726230323-06994584191e h1:wOQNKh1uuDGRnmgF0jDxh7ctgGy/3P4rYWQRVJD4/Yg= -golang.org/x/net v0.0.0-20220726230323-06994584191e/go.mod h1:AaygXjzTFtRAg2ttMY5RMuhpJ3cNnI0XpyFJD1iQRSM= +golang.org/x/net v0.0.0-20220906165146-f3363e06e74c h1:yKufUcDwucU5urd+50/Opbt4AYpqthk7wHpHok8f1lo= +golang.org/x/net v0.0.0-20220906165146-f3363e06e74c/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= 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= @@ -1001,8 +1007,8 @@ golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBc 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-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220727055044-e65921a090b8 h1:dyU22nBWzrmTQxtNrr4dzVOvaw35nUYE279vF9UmsI8= -golang.org/x/sys v0.0.0-20220727055044-e65921a090b8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220907062415-87db552b00fd h1:AZeIEzg+8RCELJYq8w+ODLVxFgLMMigSwO/ffKPEd9U= +golang.org/x/sys v0.0.0-20220907062415-87db552b00fd/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 h1:Q5284mrmYTpACcm+eAKjKJH48BBwSyfJqmmGDTtT8Vc= diff --git a/x/wasm/keeper/proposal_handler.go b/x/wasm/keeper/proposal_handler.go index f4cd8a4e1a..905b073d5e 100644 --- a/x/wasm/keeper/proposal_handler.go +++ b/x/wasm/keeper/proposal_handler.go @@ -74,7 +74,6 @@ func handleStoreCodeProposal(ctx sdk.Context, k types.ContractOpsKeeper, p types return nil } return k.PinCode(ctx, codeID) - } func handleInstantiateProposal(ctx sdk.Context, k types.ContractOpsKeeper, p types.InstantiateContractProposal) error { diff --git a/x/wasm/keeper/recurse_test.go b/x/wasm/keeper/recurse_test.go index cfb49e0ac1..18778a52d7 100644 --- a/x/wasm/keeper/recurse_test.go +++ b/x/wasm/keeper/recurse_test.go @@ -91,7 +91,7 @@ func TestGasCostOnQuery(t *testing.T) { Depth: 1, Work: 50, }, - expectedGas: 2*GasWork50 + GasReturnHashed, + expectedGas: 2*GasWork50 + GasReturnHashed + 1, // +1 for rounding }, "recursion 4, some work": { gasLimit: 400_000, @@ -99,7 +99,7 @@ func TestGasCostOnQuery(t *testing.T) { Depth: 4, Work: 50, }, - expectedGas: 5*GasWork50 + 4*GasReturnHashed, + expectedGas: 5*GasWork50 + 4*GasReturnHashed + 1, }, } From 8f7dfb1d27522d1465c49aac138e37428999fe00 Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Wed, 7 Sep 2022 10:37:16 +0200 Subject: [PATCH 074/120] Update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a735308f23..3fee812325 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ## [Unreleased](https://github.com/CosmWasm/wasmd/tree/HEAD) - Upgrade go to v1.18 [\#866]https://github.com/CosmWasm/wasmd/pull/866/) ([faddat](https://github.com/faddat)) - Upgrade to cosmos-sdk v0.45.8 [\#964](https://github.com/CosmWasm/wasmd/pull/964/) ([faddat](https://github.com/faddat)) - +- Upgrade wasmvm to v1.1.0 [\#984](https://github.com/CosmWasm/wasmd/pull/984), see [wasmvm v1.1.0](https://github.com/CosmWasm/wasmvm/releases/tag/v1.1.0) [Full Changelog](https://github.com/CosmWasm/wasmd/compare/v0.28.0...HEAD) From ed308054edd13fc442fe322b4fbb4004a47061da Mon Sep 17 00:00:00 2001 From: Alexander Peters Date: Wed, 7 Sep 2022 10:47:02 +0200 Subject: [PATCH 075/120] Update README.md Co-authored-by: Simon Warta <2603011+webmaster128@users.noreply.github.com> --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8deccd01dc..ca44b55d11 100644 --- a/README.md +++ b/README.md @@ -26,8 +26,8 @@ compatibility list: | wasmd | wasmvm | cosmwasm-vm | cosmwasm-std | |-------|--------------|-------------|--------------| -| 0.29 | v1.1.0 | | 1.1 | -| 0.28 | v1.0.0 | | 1.0 | +| 0.29 | v1.1.0 | | 1.0-1.1 | +| 0.28 | v1.0.0 | | 1.0-1.1 | | 0.27 | v1.0.0 | | 1.0 | | 0.26 | 1.0.0-beta10 | | 1.0 | | 0.25 | 1.0.0-beta10 | | 1.0 | From 2674c53d7b1c06f365a2e30728808d4661d524de Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Fri, 2 Sep 2022 10:18:16 +0200 Subject: [PATCH 076/120] Introduce AccessTypeAnyOfAddresses --- docs/proto/proto-docs.md | 6 +- proto/cosmwasm/wasm/v1/types.proto | 10 +- x/wasm/types/params.go | 50 +++++- x/wasm/types/params_test.go | 64 ++++++-- x/wasm/types/types.go | 32 +++- x/wasm/types/types.pb.go | 222 ++++++++++++++++--------- x/wasm/types/types_test.go | 252 ++++++++++++++++++++++++----- 7 files changed, 501 insertions(+), 135 deletions(-) diff --git a/docs/proto/proto-docs.md b/docs/proto/proto-docs.md index e5cd7ec88f..e62564dc73 100644 --- a/docs/proto/proto-docs.md +++ b/docs/proto/proto-docs.md @@ -119,7 +119,8 @@ AccessConfig access control type. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | `permission` | [AccessType](#cosmwasm.wasm.v1.AccessType) | | | -| `address` | [string](#string) | | | +| `address` | [string](#string) | | Address Deprecated: replaced by addresses | +| `addresses` | [string](#string) | repeated | | @@ -240,8 +241,9 @@ AccessType permission types | ---- | ------ | ----------- | | ACCESS_TYPE_UNSPECIFIED | 0 | AccessTypeUnspecified placeholder for empty value | | ACCESS_TYPE_NOBODY | 1 | AccessTypeNobody forbidden | -| ACCESS_TYPE_ONLY_ADDRESS | 2 | AccessTypeOnlyAddress restricted to an address | +| ACCESS_TYPE_ONLY_ADDRESS | 2 | AccessTypeOnlyAddress restricted to a single address Deprecated: use AccessTypeAnyOfAddresses instead | | ACCESS_TYPE_EVERYBODY | 3 | AccessTypeEverybody unrestricted | +| ACCESS_TYPE_ANY_OF_ADDRESSES | 4 | AccessTypeAnyOfAddresses allow any of the addresses | diff --git a/proto/cosmwasm/wasm/v1/types.proto b/proto/cosmwasm/wasm/v1/types.proto index 739aed2af7..8d140248a8 100644 --- a/proto/cosmwasm/wasm/v1/types.proto +++ b/proto/cosmwasm/wasm/v1/types.proto @@ -19,12 +19,16 @@ enum AccessType { // AccessTypeNobody forbidden ACCESS_TYPE_NOBODY = 1 [ (gogoproto.enumvalue_customname) = "AccessTypeNobody" ]; - // AccessTypeOnlyAddress restricted to an address + // AccessTypeOnlyAddress restricted to a single address + // Deprecated: use AccessTypeAnyOfAddresses instead ACCESS_TYPE_ONLY_ADDRESS = 2 [ (gogoproto.enumvalue_customname) = "AccessTypeOnlyAddress" ]; // AccessTypeEverybody unrestricted ACCESS_TYPE_EVERYBODY = 3 [ (gogoproto.enumvalue_customname) = "AccessTypeEverybody" ]; + // AccessTypeAnyOfAddresses allow any of the addresses + ACCESS_TYPE_ANY_OF_ADDRESSES = 4 + [ (gogoproto.enumvalue_customname) = "AccessTypeAnyOfAddresses" ]; } // AccessTypeParam @@ -37,7 +41,11 @@ message AccessTypeParam { message AccessConfig { option (gogoproto.goproto_stringer) = true; AccessType permission = 1 [ (gogoproto.moretags) = "yaml:\"permission\"" ]; + + // Address + // Deprecated: replaced by addresses string address = 2 [ (gogoproto.moretags) = "yaml:\"address\"" ]; + repeated string addresses = 3 [ (gogoproto.moretags) = "yaml:\"addresses\"" ]; } // Params defines the set of wasm parameters. diff --git a/x/wasm/types/params.go b/x/wasm/types/params.go index ea8046cf3d..1fbf3fe605 100644 --- a/x/wasm/types/params.go +++ b/x/wasm/types/params.go @@ -20,20 +20,33 @@ var ( var AllAccessTypes = []AccessType{ AccessTypeNobody, AccessTypeOnlyAddress, + AccessTypeAnyOfAddresses, AccessTypeEverybody, } -func (a AccessType) With(addr sdk.AccAddress) AccessConfig { +func (a AccessType) With(addrs ...sdk.AccAddress) AccessConfig { switch a { case AccessTypeNobody: return AllowNobody case AccessTypeOnlyAddress: - if err := sdk.VerifyAddressFormat(addr); err != nil { + if n := len(addrs); n != 1 { + panic(fmt.Sprintf("expected exactly 1 address but got %d", n)) + } + if err := sdk.VerifyAddressFormat(addrs[0]); err != nil { panic(err) } - return AccessConfig{Permission: AccessTypeOnlyAddress, Address: addr.String()} + return AccessConfig{Permission: AccessTypeOnlyAddress, Address: addrs[0].String()} case AccessTypeEverybody: return AllowEverybody + case AccessTypeAnyOfAddresses: + bech32Addrs := make([]string, len(addrs)) + for i, v := range addrs { + bech32Addrs[i] = v.String() + } + if err := assertValidAddresses(bech32Addrs); err != nil { + panic(err) + } + return AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: bech32Addrs} } panic("unsupported access type") } @@ -46,6 +59,8 @@ func (a AccessType) String() string { return "OnlyAddress" case AccessTypeEverybody: return "Everybody" + case AccessTypeAnyOfAddresses: + return "AnyOfAddresses" } return "Unspecified" } @@ -157,12 +172,34 @@ func (a AccessConfig) ValidateBasic() error { } return nil case AccessTypeOnlyAddress: + if len(a.Addresses) != 0 { + return ErrInvalid.Wrap("addresses field set") + } _, err := sdk.AccAddressFromBech32(a.Address) return err + case AccessTypeAnyOfAddresses: + if a.Address != "" { + return ErrInvalid.Wrap("address field set") + } + return assertValidAddresses(a.Addresses) } return sdkerrors.Wrapf(ErrInvalid, "unknown type: %q", a.Permission) } +func assertValidAddresses(addrs []string) error { + idx := make(map[string]struct{}, len(addrs)) + for _, a := range addrs { + if _, err := sdk.AccAddressFromBech32(a); err != nil { + return sdkerrors.Wrapf(err, "address: %s", a) + } + if _, exists := idx[a]; exists { + return ErrDuplicate.Wrapf("address: %s", a) + } + idx[a] = struct{}{} + } + return nil +} + func (a AccessConfig) Allowed(actor sdk.AccAddress) bool { switch a.Permission { case AccessTypeNobody: @@ -171,6 +208,13 @@ func (a AccessConfig) Allowed(actor sdk.AccAddress) bool { return true case AccessTypeOnlyAddress: return a.Address == actor.String() + case AccessTypeAnyOfAddresses: + for _, v := range a.Addresses { + if v == actor.String() { + return true + } + } + return false default: panic("unknown type") } diff --git a/x/wasm/types/params_test.go b/x/wasm/types/params_test.go index 35799cb48b..d4abcfd7cc 100644 --- a/x/wasm/types/params_test.go +++ b/x/wasm/types/params_test.go @@ -1,6 +1,7 @@ package types import ( + "bytes" "encoding/json" "testing" @@ -14,6 +15,7 @@ import ( func TestValidateParams(t *testing.T) { var ( anyAddress sdk.AccAddress = make([]byte, ContractAddrLen) + otherAddress sdk.AccAddress = bytes.Repeat([]byte{1}, ContractAddrLen) invalidAddress = "invalid address" ) @@ -42,6 +44,18 @@ func TestValidateParams(t *testing.T) { InstantiateDefaultPermission: AccessTypeOnlyAddress, }, }, + "all good with anyOf address": { + src: Params{ + CodeUploadAccess: AccessTypeAnyOfAddresses.With(anyAddress), + InstantiateDefaultPermission: AccessTypeAnyOfAddresses, + }, + }, + "all good with anyOf addresses": { + src: Params{ + CodeUploadAccess: AccessTypeAnyOfAddresses.With(anyAddress, otherAddress), + InstantiateDefaultPermission: AccessTypeAnyOfAddresses, + }, + }, "reject empty type in instantiate permission": { src: Params{ CodeUploadAccess: AllowNobody, @@ -62,6 +76,13 @@ func TestValidateParams(t *testing.T) { }, expErr: true, }, + "reject wrong field addresses in only address": { + src: Params{ + CodeUploadAccess: AccessConfig{Permission: AccessTypeOnlyAddress, Address: anyAddress.String(), Addresses: []string{anyAddress.String()}}, + InstantiateDefaultPermission: AccessTypeOnlyAddress, + }, + expErr: true, + }, "reject CodeUploadAccess Everybody with obsolete address": { src: Params{ CodeUploadAccess: AccessConfig{Permission: AccessTypeEverybody, Address: anyAddress.String()}, @@ -89,6 +110,27 @@ func TestValidateParams(t *testing.T) { }, expErr: true, }, + "reject invalid address in any of addresses": { + src: Params{ + CodeUploadAccess: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{invalidAddress}}, + InstantiateDefaultPermission: AccessTypeAnyOfAddresses, + }, + expErr: true, + }, + "reject duplicate address in any of addresses": { + src: Params{ + CodeUploadAccess: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{anyAddress.String(), anyAddress.String()}}, + InstantiateDefaultPermission: AccessTypeAnyOfAddresses, + }, + expErr: true, + }, + "reject wrong field address in any of addresses": { + src: Params{ + CodeUploadAccess: AccessConfig{Permission: AccessTypeAnyOfAddresses, Address: anyAddress.String(), Addresses: []string{anyAddress.String()}}, + InstantiateDefaultPermission: AccessTypeAnyOfAddresses, + }, + expErr: true, + }, } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { @@ -107,11 +149,12 @@ func TestAccessTypeMarshalJson(t *testing.T) { src AccessType exp string }{ - "Unspecified": {src: AccessTypeUnspecified, exp: `"Unspecified"`}, - "Nobody": {src: AccessTypeNobody, exp: `"Nobody"`}, - "OnlyAddress": {src: AccessTypeOnlyAddress, exp: `"OnlyAddress"`}, - "Everybody": {src: AccessTypeEverybody, exp: `"Everybody"`}, - "unknown": {src: 999, exp: `"Unspecified"`}, + "Unspecified": {src: AccessTypeUnspecified, exp: `"Unspecified"`}, + "Nobody": {src: AccessTypeNobody, exp: `"Nobody"`}, + "OnlyAddress": {src: AccessTypeOnlyAddress, exp: `"OnlyAddress"`}, + "AccessTypeAnyOfAddresses": {src: AccessTypeAnyOfAddresses, exp: `"AnyOfAddresses"`}, + "Everybody": {src: AccessTypeEverybody, exp: `"Everybody"`}, + "unknown": {src: 999, exp: `"Unspecified"`}, } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { @@ -127,11 +170,12 @@ func TestAccessTypeUnmarshalJson(t *testing.T) { src string exp AccessType }{ - "Unspecified": {src: `"Unspecified"`, exp: AccessTypeUnspecified}, - "Nobody": {src: `"Nobody"`, exp: AccessTypeNobody}, - "OnlyAddress": {src: `"OnlyAddress"`, exp: AccessTypeOnlyAddress}, - "Everybody": {src: `"Everybody"`, exp: AccessTypeEverybody}, - "unknown": {src: `""`, exp: AccessTypeUnspecified}, + "Unspecified": {src: `"Unspecified"`, exp: AccessTypeUnspecified}, + "Nobody": {src: `"Nobody"`, exp: AccessTypeNobody}, + "OnlyAddress": {src: `"OnlyAddress"`, exp: AccessTypeOnlyAddress}, + "AnyOfAddresses": {src: `"AnyOfAddresses"`, exp: AccessTypeAnyOfAddresses}, + "Everybody": {src: `"Everybody"`, exp: AccessTypeEverybody}, + "unknown": {src: `""`, exp: AccessTypeUnspecified}, } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { diff --git a/x/wasm/types/types.go b/x/wasm/types/types.go index cdf669e5c9..3712af192c 100644 --- a/x/wasm/types/types.go +++ b/x/wasm/types/types.go @@ -342,9 +342,9 @@ func (a AccessType) IsSubset(superSet AccessType) bool { case AccessTypeNobody: // Only an exact match is a subset of this return a == AccessTypeNobody - case AccessTypeOnlyAddress: - // An exact match or nobody - return a == AccessTypeNobody || a == AccessTypeOnlyAddress + case AccessTypeOnlyAddress, AccessTypeAnyOfAddresses: + // Nobody or address(es) + return a == AccessTypeNobody || a == AccessTypeOnlyAddress || a == AccessTypeAnyOfAddresses default: return false } @@ -356,8 +356,32 @@ func (a AccessConfig) IsSubset(superSet AccessConfig) bool { switch superSet.Permission { case AccessTypeOnlyAddress: // An exact match or nobody - return a.Permission == AccessTypeNobody || (a.Permission == AccessTypeOnlyAddress && a.Address == superSet.Address) + return a.Permission == AccessTypeNobody || (a.Permission == AccessTypeOnlyAddress && a.Address == superSet.Address) || + (a.Permission == AccessTypeAnyOfAddresses && isSubset([]string{superSet.Address}, a.Addresses)) + case AccessTypeAnyOfAddresses: + // An exact match or nobody + return a.Permission == AccessTypeNobody || (a.Permission == AccessTypeOnlyAddress && isSubset(superSet.Addresses, []string{a.Address})) || + a.Permission == AccessTypeAnyOfAddresses && isSubset(superSet.Addresses, a.Addresses) + case AccessTypeUnspecified: + return false default: return a.Permission.IsSubset(superSet.Permission) } } + +// return true when all elements in sub are also part of super +func isSubset(super, sub []string) bool { + if len(sub) == 0 { + return true + } + var matches int + for _, o := range sub { + for _, s := range super { + if o == s { + matches++ + break + } + } + } + return matches == len(sub) +} diff --git a/x/wasm/types/types.pb.go b/x/wasm/types/types.pb.go index 05ff057a0d..f7dc08b405 100644 --- a/x/wasm/types/types.pb.go +++ b/x/wasm/types/types.pb.go @@ -39,10 +39,13 @@ const ( AccessTypeUnspecified AccessType = 0 // AccessTypeNobody forbidden AccessTypeNobody AccessType = 1 - // AccessTypeOnlyAddress restricted to an address + // AccessTypeOnlyAddress restricted to a single address + // Deprecated: use AccessTypeAnyOfAddresses instead AccessTypeOnlyAddress AccessType = 2 // AccessTypeEverybody unrestricted AccessTypeEverybody AccessType = 3 + // AccessTypeAnyOfAddresses allow any of the addresses + AccessTypeAnyOfAddresses AccessType = 4 ) var AccessType_name = map[int32]string{ @@ -50,13 +53,15 @@ var AccessType_name = map[int32]string{ 1: "ACCESS_TYPE_NOBODY", 2: "ACCESS_TYPE_ONLY_ADDRESS", 3: "ACCESS_TYPE_EVERYBODY", + 4: "ACCESS_TYPE_ANY_OF_ADDRESSES", } var AccessType_value = map[string]int32{ - "ACCESS_TYPE_UNSPECIFIED": 0, - "ACCESS_TYPE_NOBODY": 1, - "ACCESS_TYPE_ONLY_ADDRESS": 2, - "ACCESS_TYPE_EVERYBODY": 3, + "ACCESS_TYPE_UNSPECIFIED": 0, + "ACCESS_TYPE_NOBODY": 1, + "ACCESS_TYPE_ONLY_ADDRESS": 2, + "ACCESS_TYPE_EVERYBODY": 3, + "ACCESS_TYPE_ANY_OF_ADDRESSES": 4, } func (AccessType) EnumDescriptor() ([]byte, []int) { @@ -145,7 +150,10 @@ var xxx_messageInfo_AccessTypeParam proto.InternalMessageInfo // AccessConfig access control type. type AccessConfig struct { Permission AccessType `protobuf:"varint,1,opt,name=permission,proto3,enum=cosmwasm.wasm.v1.AccessType" json:"permission,omitempty" yaml:"permission"` - Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty" yaml:"address"` + // Address + // Deprecated: replaced by addresses + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty" yaml:"address"` + Addresses []string `protobuf:"bytes,3,rep,name=addresses,proto3" json:"addresses,omitempty" yaml:"addresses"` } func (m *AccessConfig) Reset() { *m = AccessConfig{} } @@ -493,78 +501,81 @@ func init() { func init() { proto.RegisterFile("cosmwasm/wasm/v1/types.proto", fileDescriptor_e6155d98fa173e02) } var fileDescriptor_e6155d98fa173e02 = []byte{ - // 1123 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xcd, 0x8f, 0xdb, 0x44, - 0x14, 0x8f, 0x93, 0xec, 0xd7, 0x34, 0x14, 0x77, 0xd8, 0xa5, 0x49, 0xa8, 0x9c, 0xd4, 0x14, 0xd8, - 0x7e, 0x25, 0x74, 0x41, 0x80, 0x7a, 0xa8, 0x94, 0x0f, 0xd3, 0xb8, 0x62, 0x93, 0x68, 0x92, 0x52, - 0x2d, 0x52, 0x65, 0x39, 0xf6, 0x6c, 0x62, 0xd5, 0xf1, 0x44, 0x9e, 0xc9, 0x36, 0xfe, 0x0f, 0x50, - 0x24, 0x04, 0x37, 0xb8, 0x44, 0x42, 0x80, 0x50, 0xff, 0x00, 0xae, 0xdc, 0x2b, 0x4e, 0x3d, 0x72, - 0x8a, 0x20, 0xbd, 0xc0, 0x75, 0x8f, 0xe5, 0x82, 0x3c, 0x93, 0x10, 0xab, 0xdd, 0x76, 0xc3, 0xc5, - 0xf2, 0xbc, 0xf7, 0x7e, 0xbf, 0xf7, 0xde, 0x6f, 0xde, 0xb3, 0x0c, 0x2e, 0x58, 0x84, 0xf6, 0x1f, - 0x9a, 0xb4, 0x5f, 0xe4, 0x8f, 0xa3, 0x1b, 0x45, 0x16, 0x0c, 0x30, 0x2d, 0x0c, 0x7c, 0xc2, 0x08, - 0x94, 0x17, 0xde, 0x02, 0x7f, 0x1c, 0xdd, 0xc8, 0x66, 0x42, 0x0b, 0xa1, 0x06, 0xf7, 0x17, 0xc5, - 0x41, 0x04, 0x67, 0xb7, 0xbb, 0xa4, 0x4b, 0x84, 0x3d, 0x7c, 0x9b, 0x5b, 0x33, 0x5d, 0x42, 0xba, - 0x2e, 0x2e, 0xf2, 0x53, 0x67, 0x78, 0x58, 0x34, 0xbd, 0x40, 0xb8, 0xd4, 0xfb, 0xe0, 0xf5, 0x92, - 0x65, 0x61, 0x4a, 0xdb, 0xc1, 0x00, 0x37, 0x4d, 0xdf, 0xec, 0xc3, 0x2a, 0x58, 0x3b, 0x32, 0xdd, - 0x21, 0x4e, 0x4b, 0x79, 0x69, 0xf7, 0xec, 0xde, 0x85, 0xc2, 0xf3, 0x05, 0x14, 0x96, 0x88, 0xb2, - 0x7c, 0x3c, 0xcd, 0xa5, 0x02, 0xb3, 0xef, 0xde, 0x54, 0x39, 0x48, 0x45, 0x02, 0x7c, 0x33, 0xf9, - 0xdd, 0xf7, 0x39, 0x49, 0xfd, 0x56, 0x02, 0x29, 0x11, 0x5d, 0x21, 0xde, 0xa1, 0xd3, 0x85, 0x2d, - 0x00, 0x06, 0xd8, 0xef, 0x3b, 0x94, 0x3a, 0xc4, 0x5b, 0x29, 0xc3, 0xce, 0xf1, 0x34, 0x77, 0x4e, - 0x64, 0x58, 0x22, 0x55, 0x14, 0xa1, 0x81, 0xd7, 0xc0, 0x86, 0x69, 0xdb, 0x3e, 0xa6, 0x34, 0x1d, - 0xcf, 0x4b, 0xbb, 0x5b, 0x65, 0x78, 0x3c, 0xcd, 0x9d, 0x15, 0x98, 0xb9, 0x43, 0x45, 0x8b, 0x90, - 0x79, 0x65, 0x5f, 0xc7, 0xc1, 0x3a, 0xef, 0x97, 0x42, 0x02, 0xa0, 0x45, 0x6c, 0x6c, 0x0c, 0x07, - 0x2e, 0x31, 0x6d, 0xc3, 0xe4, 0xb9, 0x79, 0x6d, 0x67, 0xf6, 0x94, 0x97, 0xd5, 0x26, 0xfa, 0x29, - 0x5f, 0x7c, 0x3c, 0xcd, 0xc5, 0x8e, 0xa7, 0xb9, 0x8c, 0xc8, 0xf6, 0x22, 0x8f, 0x8a, 0xe4, 0xd0, - 0x78, 0x97, 0xdb, 0x04, 0x14, 0x7e, 0x25, 0x01, 0xc5, 0xf1, 0x28, 0x33, 0x3d, 0xe6, 0x98, 0x0c, - 0x1b, 0x36, 0x3e, 0x34, 0x87, 0x2e, 0x33, 0x22, 0xca, 0xc4, 0x57, 0x50, 0xe6, 0xf2, 0xf1, 0x34, - 0xf7, 0x8e, 0xc8, 0xfb, 0x6a, 0x36, 0x15, 0x5d, 0x88, 0x04, 0x54, 0x85, 0xbf, 0xf9, 0x9f, 0x9b, - 0x2b, 0x12, 0x53, 0x7f, 0x90, 0xc0, 0x66, 0x85, 0xd8, 0x58, 0xf7, 0x0e, 0x09, 0x7c, 0x0b, 0x6c, - 0xf1, 0x5e, 0x7a, 0x26, 0xed, 0x71, 0x29, 0x52, 0x68, 0x33, 0x34, 0xd4, 0x4c, 0xda, 0x83, 0x69, - 0xb0, 0x61, 0xf9, 0xd8, 0x64, 0xc4, 0x17, 0x7a, 0xa3, 0xc5, 0x11, 0xb6, 0x00, 0x8c, 0x96, 0x62, - 0x71, 0x91, 0xd2, 0x6b, 0x2b, 0x49, 0x99, 0x0c, 0xa5, 0x44, 0xe7, 0x22, 0x78, 0xe1, 0xb8, 0x93, - 0xdc, 0x4c, 0xc8, 0xc9, 0x3b, 0xc9, 0xcd, 0xa4, 0xbc, 0xa6, 0xfe, 0x1a, 0x07, 0xa9, 0x0a, 0xf1, - 0x98, 0x6f, 0x5a, 0x8c, 0x17, 0xfa, 0x36, 0xd8, 0xe0, 0x85, 0x3a, 0x36, 0x2f, 0x33, 0x59, 0x06, - 0xb3, 0x69, 0x6e, 0x9d, 0xf7, 0x51, 0x45, 0xeb, 0xa1, 0x4b, 0xb7, 0x5f, 0x51, 0xf0, 0x36, 0x58, - 0x33, 0xed, 0xbe, 0xe3, 0xa5, 0x13, 0xdc, 0x2e, 0x0e, 0xa1, 0xd5, 0x35, 0x3b, 0xd8, 0x4d, 0x27, - 0x85, 0x95, 0x1f, 0xe0, 0xad, 0x39, 0x0b, 0xb6, 0xe7, 0x1d, 0x5d, 0x3a, 0xa1, 0xa3, 0x0e, 0x25, - 0xee, 0x90, 0xe1, 0xf6, 0xa8, 0x49, 0xa8, 0xc3, 0x1c, 0xe2, 0xa1, 0x05, 0x08, 0x5e, 0x07, 0x67, - 0x9c, 0x8e, 0x65, 0x0c, 0x88, 0xcf, 0xc2, 0x72, 0xd7, 0xf9, 0xa8, 0xbe, 0x36, 0x9b, 0xe6, 0xb6, - 0xf4, 0x72, 0xa5, 0x49, 0x7c, 0xa6, 0x57, 0xd1, 0x96, 0xd3, 0xb1, 0xf8, 0xab, 0x0d, 0xf7, 0xc1, - 0x16, 0x1e, 0x31, 0xec, 0xf1, 0x79, 0xd8, 0xe0, 0x09, 0xb7, 0x0b, 0x62, 0x93, 0x0b, 0x8b, 0x4d, - 0x2e, 0x94, 0xbc, 0xa0, 0x9c, 0xf9, 0xed, 0x97, 0xeb, 0x3b, 0x51, 0x51, 0xb4, 0x05, 0x0c, 0x2d, - 0x19, 0x6e, 0x26, 0xff, 0x0a, 0xc7, 0xfe, 0x1f, 0x09, 0xa4, 0x17, 0xa1, 0xa1, 0x48, 0x35, 0x87, - 0x32, 0xe2, 0x07, 0x9a, 0xc7, 0xfc, 0x00, 0x36, 0xc1, 0x16, 0x19, 0x60, 0xdf, 0x64, 0xcb, 0xdd, - 0xdc, 0x7b, 0xb1, 0xc5, 0x13, 0xe0, 0x8d, 0x05, 0x2a, 0x9c, 0x4b, 0xb4, 0x24, 0x89, 0xde, 0x4e, - 0xfc, 0xa5, 0xb7, 0x73, 0x0b, 0x6c, 0x0c, 0x07, 0x36, 0xd7, 0x35, 0xf1, 0x7f, 0x74, 0x9d, 0x83, - 0xe0, 0x2e, 0x48, 0xf4, 0x69, 0x97, 0xdf, 0x55, 0xaa, 0xfc, 0xe6, 0xb3, 0x69, 0x0e, 0x22, 0xf3, - 0xe1, 0xa2, 0xca, 0x7d, 0x4c, 0xa9, 0xd9, 0xc5, 0x28, 0x0c, 0x51, 0x11, 0x80, 0x2f, 0x12, 0xc1, - 0x8b, 0x20, 0xd5, 0x71, 0x89, 0xf5, 0xc0, 0xe8, 0x61, 0xa7, 0xdb, 0x63, 0x62, 0x8e, 0xd0, 0x19, - 0x6e, 0xab, 0x71, 0x13, 0xcc, 0x80, 0x4d, 0x36, 0x32, 0x1c, 0xcf, 0xc6, 0x23, 0xd1, 0x08, 0xda, - 0x60, 0x23, 0x3d, 0x3c, 0xaa, 0x0e, 0x58, 0xdb, 0x27, 0x36, 0x76, 0xe1, 0x1d, 0x90, 0x78, 0x80, - 0x03, 0xb1, 0x2c, 0xe5, 0x4f, 0x9e, 0x4d, 0x73, 0x1f, 0x76, 0x1d, 0xd6, 0x1b, 0x76, 0x0a, 0x16, - 0xe9, 0x17, 0x19, 0xf6, 0xec, 0x70, 0xe1, 0x3c, 0x16, 0x7d, 0x75, 0x9d, 0x0e, 0x2d, 0x76, 0x02, - 0x86, 0x69, 0xa1, 0x86, 0x47, 0xe5, 0xf0, 0x05, 0x85, 0x24, 0xe1, 0x00, 0x8a, 0x6f, 0x70, 0x9c, - 0xaf, 0x9e, 0x38, 0x5c, 0xf9, 0x5b, 0x02, 0x60, 0xb9, 0xff, 0xf0, 0x23, 0x70, 0xbe, 0x54, 0xa9, - 0x68, 0xad, 0x96, 0xd1, 0x3e, 0x68, 0x6a, 0xc6, 0xdd, 0x7a, 0xab, 0xa9, 0x55, 0xf4, 0x4f, 0x75, - 0xad, 0x2a, 0xc7, 0xb2, 0x99, 0xf1, 0x24, 0xbf, 0xb3, 0x0c, 0xbe, 0xeb, 0xd1, 0x01, 0xb6, 0x9c, - 0x43, 0x07, 0xdb, 0xf0, 0x1a, 0x80, 0x51, 0x5c, 0xbd, 0x51, 0x6e, 0x54, 0x0f, 0x64, 0x29, 0xbb, - 0x3d, 0x9e, 0xe4, 0xe5, 0x25, 0xa4, 0x4e, 0x3a, 0xc4, 0x0e, 0xe0, 0xc7, 0x20, 0x1d, 0x8d, 0x6e, - 0xd4, 0x3f, 0x3b, 0x30, 0x4a, 0xd5, 0x2a, 0xd2, 0x5a, 0x2d, 0x39, 0xfe, 0x7c, 0x9a, 0x86, 0xe7, - 0x06, 0x25, 0xf1, 0x9d, 0x85, 0x7b, 0x60, 0x27, 0x0a, 0xd4, 0x3e, 0xd7, 0xd0, 0x01, 0xcf, 0x94, - 0xc8, 0x9e, 0x1f, 0x4f, 0xf2, 0x6f, 0x2c, 0x51, 0xda, 0x11, 0xf6, 0x83, 0x30, 0x59, 0x76, 0xf3, - 0xcb, 0x1f, 0x95, 0xd8, 0xa3, 0x9f, 0x94, 0xd8, 0x95, 0x9f, 0x13, 0x20, 0x7f, 0xda, 0xa4, 0x41, - 0x0c, 0xde, 0xaf, 0x34, 0xea, 0x6d, 0x54, 0xaa, 0xb4, 0x8d, 0x4a, 0xa3, 0xaa, 0x19, 0x35, 0xbd, - 0xd5, 0x6e, 0xa0, 0x03, 0xa3, 0xd1, 0xd4, 0x50, 0xa9, 0xad, 0x37, 0xea, 0x27, 0x49, 0x53, 0x1c, - 0x4f, 0xf2, 0x57, 0x4f, 0xe3, 0x8e, 0x0a, 0x76, 0x0f, 0x5c, 0x5e, 0x29, 0x8d, 0x5e, 0xd7, 0xdb, - 0xb2, 0x94, 0xdd, 0x1d, 0x4f, 0xf2, 0x97, 0x4e, 0xe3, 0xd7, 0x3d, 0x87, 0xc1, 0xfb, 0xe0, 0xda, - 0x4a, 0xc4, 0xfb, 0xfa, 0x6d, 0x54, 0x6a, 0x6b, 0x72, 0x3c, 0x7b, 0x75, 0x3c, 0xc9, 0xbf, 0x77, - 0x1a, 0xf7, 0xbe, 0xd3, 0xf5, 0x4d, 0x86, 0x57, 0xa6, 0xbf, 0xad, 0xd5, 0xb5, 0x96, 0xde, 0x92, - 0x13, 0xab, 0xd1, 0xdf, 0xc6, 0x1e, 0xa6, 0x0e, 0xcd, 0x26, 0xc3, 0xcb, 0x2a, 0xd7, 0x1e, 0xff, - 0xa9, 0xc4, 0x1e, 0xcd, 0x14, 0xe9, 0xf1, 0x4c, 0x91, 0x9e, 0xcc, 0x14, 0xe9, 0x8f, 0x99, 0x22, - 0x7d, 0xf3, 0x54, 0x89, 0x3d, 0x79, 0xaa, 0xc4, 0x7e, 0x7f, 0xaa, 0xc4, 0xbe, 0x78, 0x37, 0xb2, - 0x07, 0x15, 0x42, 0xfb, 0xf7, 0x16, 0xbf, 0x3a, 0x76, 0x71, 0x24, 0x7e, 0x79, 0xf8, 0xff, 0x4e, - 0x67, 0x9d, 0x7f, 0xd5, 0x3e, 0xf8, 0x37, 0x00, 0x00, 0xff, 0xff, 0x21, 0x8c, 0xa0, 0x70, 0x10, - 0x09, 0x00, 0x00, + // 1178 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xcf, 0x8f, 0xdb, 0xc4, + 0x17, 0x8f, 0x93, 0xec, 0x8f, 0x4c, 0xf7, 0xdb, 0xaf, 0x3b, 0xec, 0xd2, 0x6c, 0x58, 0x25, 0xa9, + 0x29, 0xb0, 0xfd, 0x95, 0xd0, 0x05, 0x01, 0xea, 0xa1, 0x52, 0x7e, 0xb8, 0x5d, 0x57, 0x6c, 0x1c, + 0x4d, 0x52, 0xaa, 0x45, 0xaa, 0x2c, 0xc7, 0x9e, 0xcd, 0x5a, 0x75, 0x3c, 0x91, 0x67, 0xb2, 0x8d, + 0xff, 0x03, 0x14, 0x09, 0xc1, 0x91, 0x4b, 0x24, 0x04, 0x08, 0x95, 0x3b, 0x57, 0xee, 0x15, 0x5c, + 0x7a, 0xe4, 0x14, 0xc1, 0xf6, 0xc2, 0x39, 0xc7, 0x72, 0x41, 0x9e, 0x89, 0x1b, 0xd3, 0x6e, 0xbb, + 0xe1, 0x62, 0xcd, 0xbc, 0xf7, 0x3e, 0x9f, 0xf7, 0xde, 0x67, 0xe6, 0x8d, 0x0c, 0xb6, 0x2c, 0x42, + 0x7b, 0x0f, 0x4d, 0xda, 0x2b, 0xf3, 0xcf, 0xd1, 0xf5, 0x32, 0x0b, 0xfa, 0x98, 0x96, 0xfa, 0x3e, + 0x61, 0x04, 0xca, 0x91, 0xb7, 0xc4, 0x3f, 0x47, 0xd7, 0x73, 0x9b, 0xa1, 0x85, 0x50, 0x83, 0xfb, + 0xcb, 0x62, 0x23, 0x82, 0x73, 0xeb, 0x5d, 0xd2, 0x25, 0xc2, 0x1e, 0xae, 0x66, 0xd6, 0xcd, 0x2e, + 0x21, 0x5d, 0x17, 0x97, 0xf9, 0xae, 0x33, 0x38, 0x28, 0x9b, 0x5e, 0x20, 0x5c, 0xca, 0x7d, 0xf0, + 0xff, 0x8a, 0x65, 0x61, 0x4a, 0xdb, 0x41, 0x1f, 0x37, 0x4d, 0xdf, 0xec, 0xc1, 0x3a, 0x58, 0x3a, + 0x32, 0xdd, 0x01, 0xce, 0x4a, 0x45, 0x69, 0xfb, 0xec, 0xce, 0x56, 0xe9, 0xc5, 0x02, 0x4a, 0x73, + 0x44, 0x55, 0x9e, 0x4e, 0x0a, 0x6b, 0x81, 0xd9, 0x73, 0x6f, 0x28, 0x1c, 0xa4, 0x20, 0x01, 0xbe, + 0x91, 0xfe, 0xe6, 0xdb, 0x82, 0xa4, 0xfc, 0x26, 0x81, 0x35, 0x11, 0x5d, 0x23, 0xde, 0x81, 0xd3, + 0x85, 0x2d, 0x00, 0xfa, 0xd8, 0xef, 0x39, 0x94, 0x3a, 0xc4, 0x5b, 0x28, 0xc3, 0xc6, 0x74, 0x52, + 0x38, 0x27, 0x32, 0xcc, 0x91, 0x0a, 0x8a, 0xd1, 0xc0, 0xab, 0x60, 0xc5, 0xb4, 0x6d, 0x1f, 0x53, + 0x9a, 0x4d, 0x16, 0xa5, 0xed, 0x4c, 0x15, 0x4e, 0x27, 0x85, 0xb3, 0x02, 0x33, 0x73, 0x28, 0x28, + 0x0a, 0x81, 0x3b, 0x20, 0x33, 0x5b, 0x62, 0x9a, 0x4d, 0x15, 0x53, 0xdb, 0x99, 0xea, 0xfa, 0x74, + 0x52, 0x90, 0xff, 0x15, 0x8f, 0xa9, 0x82, 0xe6, 0x61, 0xb3, 0x6e, 0xbe, 0x4a, 0x82, 0x65, 0xae, + 0x11, 0x85, 0x04, 0x40, 0x8b, 0xd8, 0xd8, 0x18, 0xf4, 0x5d, 0x62, 0xda, 0x86, 0xc9, 0xeb, 0xe5, + 0xfd, 0x9c, 0xd9, 0xc9, 0xbf, 0xaa, 0x1f, 0xa1, 0x41, 0xf5, 0xc2, 0xe3, 0x49, 0x21, 0x31, 0x9d, + 0x14, 0x36, 0x45, 0xc6, 0x97, 0x79, 0x14, 0x24, 0x87, 0xc6, 0xbb, 0xdc, 0x26, 0xa0, 0xf0, 0x4b, + 0x09, 0xe4, 0x1d, 0x8f, 0x32, 0xd3, 0x63, 0x8e, 0xc9, 0xb0, 0x61, 0xe3, 0x03, 0x73, 0xe0, 0x32, + 0x23, 0xa6, 0x66, 0x72, 0x01, 0x35, 0x2f, 0x4d, 0x27, 0x85, 0x77, 0x44, 0xde, 0xd7, 0xb3, 0x29, + 0x68, 0x2b, 0x16, 0x50, 0x17, 0xfe, 0xe6, 0x73, 0x37, 0x57, 0x24, 0xa1, 0x7c, 0x27, 0x81, 0xd5, + 0x1a, 0xb1, 0xb1, 0xe6, 0x1d, 0x10, 0xf8, 0x16, 0xc8, 0xf0, 0x5e, 0x0e, 0x4d, 0x7a, 0xc8, 0xa5, + 0x58, 0x43, 0xab, 0xa1, 0x61, 0xd7, 0xa4, 0x87, 0x30, 0x0b, 0x56, 0x2c, 0x1f, 0x9b, 0x8c, 0xf8, + 0xe2, 0x8c, 0x50, 0xb4, 0x85, 0x2d, 0x00, 0xe3, 0xa5, 0x58, 0x5c, 0xa4, 0xec, 0xd2, 0x42, 0x52, + 0xa6, 0x43, 0x29, 0xd1, 0xb9, 0x18, 0x5e, 0x38, 0xee, 0xa4, 0x57, 0x53, 0x72, 0xfa, 0x4e, 0x7a, + 0x35, 0x2d, 0x2f, 0x29, 0xbf, 0x24, 0xc1, 0x5a, 0x8d, 0x78, 0xcc, 0x37, 0x2d, 0xc6, 0x0b, 0x7d, + 0x1b, 0xac, 0xf0, 0x42, 0x1d, 0x9b, 0x97, 0x99, 0xae, 0x82, 0xe3, 0x49, 0x61, 0x99, 0xf7, 0x51, + 0x47, 0xcb, 0xa1, 0x4b, 0xb3, 0x5f, 0x53, 0xf0, 0x3a, 0x58, 0x32, 0xed, 0x9e, 0xe3, 0x65, 0x53, + 0xdc, 0x2e, 0x36, 0xa1, 0xd5, 0x35, 0x3b, 0xd8, 0xcd, 0xa6, 0x85, 0x95, 0x6f, 0xe0, 0xcd, 0x19, + 0x0b, 0xb6, 0x67, 0x1d, 0x5d, 0x3c, 0xa1, 0xa3, 0x0e, 0x25, 0xee, 0x80, 0xe1, 0xf6, 0xb0, 0x49, + 0xa8, 0xc3, 0x1c, 0xe2, 0xa1, 0x08, 0x04, 0xaf, 0x81, 0x33, 0x4e, 0xc7, 0x32, 0xfa, 0xc4, 0x67, + 0x61, 0xb9, 0xcb, 0xfc, 0x7a, 0xff, 0xef, 0x78, 0x52, 0xc8, 0x68, 0xd5, 0x5a, 0x93, 0xf8, 0x4c, + 0xab, 0xa3, 0x8c, 0xd3, 0xb1, 0xf8, 0xd2, 0x86, 0x7b, 0x20, 0x83, 0x87, 0x0c, 0x7b, 0xfc, 0x3e, + 0xac, 0xf0, 0x84, 0xeb, 0x25, 0x31, 0xfd, 0xa5, 0x68, 0xfa, 0x4b, 0x15, 0x2f, 0xa8, 0x6e, 0xfe, + 0xfa, 0xf3, 0xb5, 0x8d, 0xb8, 0x28, 0x6a, 0x04, 0x43, 0x73, 0x86, 0x1b, 0xe9, 0xbf, 0xc2, 0x6b, + 0xff, 0xb7, 0x04, 0xb2, 0x51, 0x68, 0x28, 0xd2, 0xae, 0x43, 0x19, 0xf1, 0x03, 0xd5, 0x63, 0x7e, + 0x00, 0x9b, 0x20, 0x43, 0xfa, 0xd8, 0x37, 0xd9, 0x7c, 0x9e, 0x77, 0x5e, 0x6e, 0xf1, 0x04, 0xb8, + 0x1e, 0xa1, 0xc2, 0x7b, 0x89, 0xe6, 0x24, 0xf1, 0xd3, 0x49, 0xbe, 0xf2, 0x74, 0x6e, 0x82, 0x95, + 0x41, 0xdf, 0xe6, 0xba, 0xa6, 0xfe, 0x8b, 0xae, 0x33, 0x10, 0xdc, 0x06, 0xa9, 0x1e, 0xed, 0xf2, + 0xb3, 0x5a, 0xab, 0xbe, 0xf9, 0x6c, 0x52, 0x80, 0xc8, 0x7c, 0x18, 0x55, 0xb9, 0x87, 0x29, 0x35, + 0xbb, 0x18, 0x85, 0x21, 0x0a, 0x02, 0xf0, 0x65, 0x22, 0x78, 0x01, 0xac, 0x75, 0x5c, 0x62, 0x3d, + 0x30, 0x0e, 0xb1, 0xd3, 0x3d, 0x64, 0xe2, 0x1e, 0xa1, 0x33, 0xdc, 0xb6, 0xcb, 0x4d, 0x70, 0x13, + 0xac, 0xb2, 0xa1, 0xe1, 0x78, 0x36, 0x1e, 0x8a, 0x46, 0xd0, 0x0a, 0x1b, 0x6a, 0xe1, 0x56, 0x71, + 0xc0, 0xd2, 0x1e, 0xb1, 0xb1, 0x0b, 0xef, 0x80, 0xd4, 0x03, 0x1c, 0x88, 0x61, 0xa9, 0x7e, 0xf2, + 0x6c, 0x52, 0xf8, 0xb0, 0xeb, 0xb0, 0xc3, 0x41, 0xa7, 0x64, 0x91, 0x5e, 0x99, 0x61, 0xcf, 0x0e, + 0x07, 0xce, 0x63, 0xf1, 0xa5, 0xeb, 0x74, 0x68, 0xb9, 0x13, 0x30, 0x4c, 0x4b, 0xbb, 0x78, 0x58, + 0x0d, 0x17, 0x28, 0x24, 0x09, 0x2f, 0xa0, 0x78, 0xb7, 0x93, 0x7c, 0xf4, 0xc4, 0xe6, 0xf2, 0x4f, + 0x49, 0x00, 0xe6, 0xf3, 0x0f, 0x3f, 0x02, 0xe7, 0x2b, 0xb5, 0x9a, 0xda, 0x6a, 0x19, 0xed, 0xfd, + 0xa6, 0x6a, 0xdc, 0x6d, 0xb4, 0x9a, 0x6a, 0x4d, 0xbb, 0xa5, 0xa9, 0x75, 0x39, 0x91, 0xdb, 0x1c, + 0x8d, 0x8b, 0x1b, 0xf3, 0xe0, 0xbb, 0x1e, 0xed, 0x63, 0xcb, 0x39, 0x70, 0xb0, 0x0d, 0xaf, 0x02, + 0x18, 0xc7, 0x35, 0xf4, 0xaa, 0x5e, 0xdf, 0x97, 0xa5, 0xdc, 0xfa, 0x68, 0x5c, 0x94, 0xe7, 0x90, + 0x06, 0xe9, 0x10, 0x3b, 0x80, 0x1f, 0x83, 0x6c, 0x3c, 0x5a, 0x6f, 0x7c, 0xba, 0x6f, 0x54, 0xea, + 0x75, 0xa4, 0xb6, 0x5a, 0x72, 0xf2, 0xc5, 0x34, 0xba, 0xe7, 0x06, 0x95, 0xe7, 0x6f, 0xf3, 0x46, + 0x1c, 0xa8, 0x7e, 0xa6, 0xa2, 0x7d, 0x9e, 0x29, 0x95, 0x3b, 0x3f, 0x1a, 0x17, 0xdf, 0x98, 0xa3, + 0xd4, 0x23, 0xec, 0x07, 0x3c, 0xd9, 0x4d, 0xb0, 0x15, 0xc7, 0x54, 0x1a, 0xfb, 0x86, 0x7e, 0x2b, + 0x4a, 0xa7, 0xb6, 0xe4, 0x74, 0x6e, 0x6b, 0x34, 0x2e, 0x66, 0xe7, 0xd0, 0x8a, 0x17, 0xe8, 0x07, + 0x95, 0xe8, 0x6d, 0xcf, 0xad, 0x7e, 0xf1, 0x7d, 0x3e, 0xf1, 0xe8, 0x87, 0x7c, 0xe2, 0xf2, 0x8f, + 0x29, 0x50, 0x3c, 0xed, 0xa6, 0x42, 0x0c, 0xde, 0xaf, 0xe9, 0x8d, 0x36, 0xaa, 0xd4, 0xda, 0x46, + 0x4d, 0xaf, 0xab, 0xc6, 0xae, 0xd6, 0x6a, 0xeb, 0x68, 0xdf, 0xd0, 0x9b, 0x2a, 0xaa, 0xb4, 0x35, + 0xbd, 0x71, 0x92, 0xb4, 0xe5, 0xd1, 0xb8, 0x78, 0xe5, 0x34, 0xee, 0xb8, 0xe0, 0xf7, 0xc0, 0xa5, + 0x85, 0xd2, 0x68, 0x0d, 0xad, 0x2d, 0x4b, 0xb9, 0xed, 0xd1, 0xb8, 0x78, 0xf1, 0x34, 0x7e, 0xcd, + 0x73, 0x18, 0xbc, 0x0f, 0xae, 0x2e, 0x44, 0xbc, 0xa7, 0xdd, 0x46, 0x95, 0xb6, 0x2a, 0x27, 0x73, + 0x57, 0x46, 0xe3, 0xe2, 0x7b, 0xa7, 0x71, 0xef, 0x39, 0x5d, 0xdf, 0x64, 0x78, 0x61, 0xfa, 0xdb, + 0x6a, 0x43, 0x6d, 0x69, 0x2d, 0x39, 0xb5, 0x18, 0xfd, 0x6d, 0xec, 0x61, 0xea, 0xd0, 0x5c, 0x3a, + 0x3c, 0xac, 0xea, 0xee, 0xe3, 0x3f, 0xf3, 0x89, 0x47, 0xc7, 0x79, 0xe9, 0xf1, 0x71, 0x5e, 0x7a, + 0x72, 0x9c, 0x97, 0xfe, 0x38, 0xce, 0x4b, 0x5f, 0x3f, 0xcd, 0x27, 0x9e, 0x3c, 0xcd, 0x27, 0x7e, + 0x7f, 0x9a, 0x4f, 0x7c, 0xfe, 0x6e, 0x6c, 0x8e, 0x6a, 0x84, 0xf6, 0xee, 0x45, 0xbf, 0x57, 0x76, + 0x79, 0x28, 0x7e, 0xb3, 0xf8, 0x3f, 0x56, 0x67, 0x99, 0xbf, 0x8a, 0x1f, 0xfc, 0x13, 0x00, 0x00, + 0xff, 0xff, 0x7a, 0x16, 0x8c, 0xd9, 0x84, 0x09, 0x00, 0x00, } func (this *AccessTypeParam) Equal(that interface{}) bool { @@ -617,6 +628,14 @@ func (this *AccessConfig) Equal(that interface{}) bool { if this.Address != that1.Address { return false } + if len(this.Addresses) != len(that1.Addresses) { + return false + } + for i := range this.Addresses { + if this.Addresses[i] != that1.Addresses[i] { + return false + } + } return true } @@ -860,6 +879,15 @@ func (m *AccessConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.Addresses) > 0 { + for iNdEx := len(m.Addresses) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Addresses[iNdEx]) + copy(dAtA[i:], m.Addresses[iNdEx]) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Addresses[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } if len(m.Address) > 0 { i -= len(m.Address) copy(dAtA[i:], m.Address) @@ -1199,6 +1227,12 @@ func (m *AccessConfig) Size() (n int) { if l > 0 { n += 1 + l + sovTypes(uint64(l)) } + if len(m.Addresses) > 0 { + for _, s := range m.Addresses { + l = len(s) + n += 1 + l + sovTypes(uint64(l)) + } + } return n } @@ -1484,6 +1518,38 @@ func (m *AccessConfig) Unmarshal(dAtA []byte) error { } m.Address = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Addresses", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Addresses = append(m.Addresses, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) diff --git a/x/wasm/types/types_test.go b/x/wasm/types/types_test.go index 91b39419c5..be270ddeb3 100644 --- a/x/wasm/types/types_test.go +++ b/x/wasm/types/types_test.go @@ -374,78 +374,186 @@ func TestVerifyAddressLen(t *testing.T) { } func TestAccessConfigSubset(t *testing.T) { + // read + // <, <= is subset of + // !< is not subset of specs := map[string]struct { check AccessConfig superSet AccessConfig isSubSet bool }{ + // nobody "nobody <= nobody": { superSet: AccessConfig{Permission: AccessTypeNobody}, check: AccessConfig{Permission: AccessTypeNobody}, isSubSet: true, }, - "only > nobody": { + "only !< nobody": { superSet: AccessConfig{Permission: AccessTypeNobody}, check: AccessConfig{Permission: AccessTypeOnlyAddress, Address: "foobar"}, isSubSet: false, }, - "everybody > nobody": { + "anyOf !< nobody": { + superSet: AccessConfig{Permission: AccessTypeNobody}, + check: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{"foobar"}}, + isSubSet: false, + }, + "everybody !< nobody ": { superSet: AccessConfig{Permission: AccessTypeNobody}, check: AccessConfig{Permission: AccessTypeEverybody}, isSubSet: false, }, - "unspecified > nobody": { + "unspecified !< nobody": { superSet: AccessConfig{Permission: AccessTypeNobody}, check: AccessConfig{Permission: AccessTypeUnspecified}, isSubSet: false, }, - "nobody <= everybody": { + // only + "nobody < only": { + superSet: AccessConfig{Permission: AccessTypeOnlyAddress, Address: "owner"}, + check: AccessConfig{Permission: AccessTypeNobody}, + isSubSet: true, + }, + "only <= only(same)": { + superSet: AccessConfig{Permission: AccessTypeOnlyAddress, Address: "owner"}, + check: AccessConfig{Permission: AccessTypeOnlyAddress, Address: "owner"}, + isSubSet: true, + }, + "only !< only(other)": { + superSet: AccessConfig{Permission: AccessTypeOnlyAddress, Address: "owner"}, + check: AccessConfig{Permission: AccessTypeOnlyAddress, Address: "other"}, + isSubSet: false, + }, + "anyOf(same) <= only": { + superSet: AccessConfig{Permission: AccessTypeOnlyAddress, Address: "owner"}, + check: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{"owner"}}, + isSubSet: true, + }, + "anyOf(other) !< only": { + superSet: AccessConfig{Permission: AccessTypeOnlyAddress, Address: "owner"}, + check: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{"foobar"}}, + isSubSet: false, + }, + "anyOf(same, other) !< only": { + superSet: AccessConfig{Permission: AccessTypeOnlyAddress, Address: "owner"}, + check: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{"owner", "foobar"}}, + isSubSet: false, + }, + "everybody !< only": { + superSet: AccessConfig{Permission: AccessTypeOnlyAddress, Address: "owner"}, + check: AccessConfig{Permission: AccessTypeEverybody}, + isSubSet: false, + }, + "unspecified !<= only": { + superSet: AccessConfig{Permission: AccessTypeOnlyAddress, Address: "owner"}, + check: AccessConfig{Permission: AccessTypeUnspecified}, + isSubSet: false, + }, + + // any of + "nobody < anyOf": { + superSet: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{"owner"}}, + check: AccessConfig{Permission: AccessTypeNobody}, + isSubSet: true, + }, + "only(same) < anyOf(same)": { + superSet: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{"owner"}}, + check: AccessConfig{Permission: AccessTypeOnlyAddress, Address: "owner"}, + isSubSet: true, + }, + "only(same) < anyOf(same, other)": { + superSet: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{"owner", "other"}}, + check: AccessConfig{Permission: AccessTypeOnlyAddress, Address: "owner"}, + isSubSet: true, + }, + "only(other) !< anyOf": { + superSet: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{"owner"}}, + check: AccessConfig{Permission: AccessTypeOnlyAddress, Address: "other"}, + isSubSet: false, + }, + "anyOf < anyOf": { + superSet: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{"owner"}}, + check: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{"owner"}}, + isSubSet: true, + }, + "anyOf(multiple) < anyOf(multiple)": { + superSet: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{"owner", "other"}}, + check: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{"owner", "other"}}, + isSubSet: true, + }, + "anyOf(multiple, other) !< anyOf(multiple)": { + superSet: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{"owner", "other", "foo"}}, + check: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{"owner", "other", "bar"}}, + isSubSet: false, + }, + "anyOf(multiple) !< anyOf": { + superSet: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{"owner"}}, + check: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{"owner", "other"}}, + isSubSet: false, + }, + "everybody !< anyOf": { + superSet: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{"owner"}}, + check: AccessConfig{Permission: AccessTypeEverybody}, + isSubSet: false, + }, + "unspecified !< anyOf ": { + superSet: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{"owner"}}, + check: AccessConfig{Permission: AccessTypeUnspecified}, + isSubSet: false, + }, + // everybody + "nobody < everybody": { superSet: AccessConfig{Permission: AccessTypeEverybody}, check: AccessConfig{Permission: AccessTypeNobody}, isSubSet: true, }, - "only <= everybody": { + "only < everybody": { superSet: AccessConfig{Permission: AccessTypeEverybody}, check: AccessConfig{Permission: AccessTypeOnlyAddress, Address: "foobar"}, isSubSet: true, }, + "anyOf < everybody": { + superSet: AccessConfig{Permission: AccessTypeEverybody}, + check: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{"foobar"}}, + isSubSet: true, + }, "everybody <= everybody": { superSet: AccessConfig{Permission: AccessTypeEverybody}, check: AccessConfig{Permission: AccessTypeEverybody}, isSubSet: true, }, - "unspecified > everybody": { + "unspecified !< everybody ": { superSet: AccessConfig{Permission: AccessTypeEverybody}, check: AccessConfig{Permission: AccessTypeUnspecified}, isSubSet: false, }, - "nobody <= only": { - superSet: AccessConfig{Permission: AccessTypeOnlyAddress, Address: "owner"}, + // unspecified + "nobody !< unspecified": { + superSet: AccessConfig{Permission: AccessTypeUnspecified}, check: AccessConfig{Permission: AccessTypeNobody}, - isSubSet: true, + isSubSet: false, }, - "only <= only(same)": { - superSet: AccessConfig{Permission: AccessTypeOnlyAddress, Address: "owner"}, - check: AccessConfig{Permission: AccessTypeOnlyAddress, Address: "owner"}, - isSubSet: true, + "only !< unspecified": { + superSet: AccessConfig{Permission: AccessTypeUnspecified}, + check: AccessConfig{Permission: AccessTypeOnlyAddress, Address: "foobar"}, + isSubSet: false, }, - "only > only(other)": { - superSet: AccessConfig{Permission: AccessTypeOnlyAddress, Address: "owner"}, - check: AccessConfig{Permission: AccessTypeOnlyAddress, Address: "other"}, + "anyOf !< unspecified": { + superSet: AccessConfig{Permission: AccessTypeUnspecified}, + check: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{"foobar"}}, isSubSet: false, }, - "everybody > only": { - superSet: AccessConfig{Permission: AccessTypeOnlyAddress, Address: "owner"}, + "everybody !< unspecified": { + superSet: AccessConfig{Permission: AccessTypeUnspecified}, check: AccessConfig{Permission: AccessTypeEverybody}, isSubSet: false, }, - "nobody > unspecified": { + "unspecified !< unspecified ": { superSet: AccessConfig{Permission: AccessTypeUnspecified}, - check: AccessConfig{Permission: AccessTypeNobody}, + check: AccessConfig{Permission: AccessTypeUnspecified}, isSubSet: false, }, } - for name, spec := range specs { t.Run(name, func(t *testing.T) { subset := spec.check.IsSubset(spec.superSet) @@ -460,64 +568,134 @@ func TestAccessTypeSubset(t *testing.T) { superSet AccessType isSubSet bool }{ + // nobody "nobody <= nobody": { superSet: AccessTypeNobody, check: AccessTypeNobody, isSubSet: true, }, - "only > nobody": { + "only !< nobody": { superSet: AccessTypeNobody, check: AccessTypeOnlyAddress, isSubSet: false, }, - "everybody > nobody": { + "any !< nobody": { + superSet: AccessTypeNobody, + check: AccessTypeAnyOfAddresses, + isSubSet: false, + }, + "everybody !< nobody": { superSet: AccessTypeNobody, check: AccessTypeEverybody, isSubSet: false, }, - "unspecified > nobody": { + "unspecified !< nobody": { superSet: AccessTypeNobody, check: AccessTypeUnspecified, isSubSet: false, }, - "nobody <= everybody": { + // only + "nobody < only": { + superSet: AccessTypeOnlyAddress, + check: AccessTypeNobody, + isSubSet: true, + }, + "only <= only": { + superSet: AccessTypeOnlyAddress, + check: AccessTypeOnlyAddress, + isSubSet: true, + }, + "anyOf !< only": { + superSet: AccessTypeOnlyAddress, + check: AccessTypeAnyOfAddresses, + isSubSet: true, + }, + "everybody !< only": { + superSet: AccessTypeOnlyAddress, + check: AccessTypeEverybody, + isSubSet: false, + }, + "unspecified !< only": { + superSet: AccessTypeOnlyAddress, + check: AccessTypeUnspecified, + isSubSet: false, + }, + // any of + "nobody < anyOf": { + superSet: AccessTypeAnyOfAddresses, + check: AccessTypeNobody, + isSubSet: true, + }, + "only <= anyOf": { + superSet: AccessTypeAnyOfAddresses, + check: AccessTypeOnlyAddress, + isSubSet: true, + }, + "anyOf <= anyOf": { + superSet: AccessTypeAnyOfAddresses, + check: AccessTypeAnyOfAddresses, + isSubSet: true, + }, + "everybody !< anyOf": { + superSet: AccessTypeAnyOfAddresses, + check: AccessTypeEverybody, + isSubSet: false, + }, + "unspecified !< anyOf": { + superSet: AccessTypeAnyOfAddresses, + check: AccessTypeUnspecified, + isSubSet: false, + }, + // everybody + "nobody < everybody": { superSet: AccessTypeEverybody, check: AccessTypeNobody, isSubSet: true, }, - "only <= everybody": { + "only < everybody": { superSet: AccessTypeEverybody, check: AccessTypeOnlyAddress, isSubSet: true, }, + "anyOf < everybody": { + superSet: AccessTypeEverybody, + check: AccessTypeAnyOfAddresses, + isSubSet: true, + }, "everybody <= everybody": { superSet: AccessTypeEverybody, check: AccessTypeEverybody, isSubSet: true, }, - "unspecified > everybody": { + "unspecified !< everybody": { superSet: AccessTypeEverybody, check: AccessTypeUnspecified, isSubSet: false, }, - "nobody <= only": { - superSet: AccessTypeOnlyAddress, + // unspecified + "nobody !< unspecified": { + superSet: AccessTypeUnspecified, check: AccessTypeNobody, - isSubSet: true, + isSubSet: false, }, - "only <= only(same)": { - superSet: AccessTypeOnlyAddress, + "only !< unspecified": { + superSet: AccessTypeUnspecified, check: AccessTypeOnlyAddress, - isSubSet: true, + isSubSet: false, }, - "everybody > only": { - superSet: AccessTypeOnlyAddress, + "anyOf !< unspecified": { + superSet: AccessTypeUnspecified, + check: AccessTypeAnyOfAddresses, + isSubSet: false, + }, + "everybody !< unspecified": { + superSet: AccessTypeUnspecified, check: AccessTypeEverybody, isSubSet: false, }, - "nobody > unspecified": { + "unspecified !< unspecified": { superSet: AccessTypeUnspecified, - check: AccessTypeNobody, + check: AccessTypeUnspecified, isSubSet: false, }, } From 743c1c34e04ad3291c82a78f3c37da231aeeff1f Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Wed, 7 Sep 2022 11:59:29 +0200 Subject: [PATCH 077/120] Prevent empty addresses list --- x/wasm/types/params.go | 7 +++++-- x/wasm/types/params_test.go | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/x/wasm/types/params.go b/x/wasm/types/params.go index 1fbf3fe605..5680cc9f46 100644 --- a/x/wasm/types/params.go +++ b/x/wasm/types/params.go @@ -44,7 +44,7 @@ func (a AccessType) With(addrs ...sdk.AccAddress) AccessConfig { bech32Addrs[i] = v.String() } if err := assertValidAddresses(bech32Addrs); err != nil { - panic(err) + panic(sdkerrors.Wrap(err, "addresses")) } return AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: bech32Addrs} } @@ -181,12 +181,15 @@ func (a AccessConfig) ValidateBasic() error { if a.Address != "" { return ErrInvalid.Wrap("address field set") } - return assertValidAddresses(a.Addresses) + return sdkerrors.Wrap(assertValidAddresses(a.Addresses), "addresses") } return sdkerrors.Wrapf(ErrInvalid, "unknown type: %q", a.Permission) } func assertValidAddresses(addrs []string) error { + if len(addrs) == 0 { + return ErrEmpty + } idx := make(map[string]struct{}, len(addrs)) for _, a := range addrs { if _, err := sdk.AccAddressFromBech32(a); err != nil { diff --git a/x/wasm/types/params_test.go b/x/wasm/types/params_test.go index d4abcfd7cc..a05872243d 100644 --- a/x/wasm/types/params_test.go +++ b/x/wasm/types/params_test.go @@ -110,6 +110,20 @@ func TestValidateParams(t *testing.T) { }, expErr: true, }, + "reject empty addresses in any of addresses": { + src: Params{ + CodeUploadAccess: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{}}, + InstantiateDefaultPermission: AccessTypeAnyOfAddresses, + }, + expErr: true, + }, + "reject addresses not set in any of addresses": { + src: Params{ + CodeUploadAccess: AccessConfig{Permission: AccessTypeAnyOfAddresses}, + InstantiateDefaultPermission: AccessTypeAnyOfAddresses, + }, + expErr: true, + }, "reject invalid address in any of addresses": { src: Params{ CodeUploadAccess: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{invalidAddress}}, From 089076d065586f36250482cbff4a4696c2edea6a Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Wed, 7 Sep 2022 12:02:53 +0200 Subject: [PATCH 078/120] Formatting only --- x/wasm/keeper/proposal_handler.go | 1 - 1 file changed, 1 deletion(-) diff --git a/x/wasm/keeper/proposal_handler.go b/x/wasm/keeper/proposal_handler.go index f4cd8a4e1a..905b073d5e 100644 --- a/x/wasm/keeper/proposal_handler.go +++ b/x/wasm/keeper/proposal_handler.go @@ -74,7 +74,6 @@ func handleStoreCodeProposal(ctx sdk.Context, k types.ContractOpsKeeper, p types return nil } return k.PinCode(ctx, codeID) - } func handleInstantiateProposal(ctx sdk.Context, k types.ContractOpsKeeper, p types.InstantiateContractProposal) error { From 2567927d097f6a47c7e23aef4c8ce97a300134d2 Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Wed, 7 Sep 2022 15:46:27 +0200 Subject: [PATCH 079/120] Parse any of address in CLI; more tests --- x/wasm/client/cli/genesis_msg.go | 1 + x/wasm/client/cli/gov_tx.go | 30 +-- x/wasm/client/cli/gov_tx_test.go | 85 ++++++++ x/wasm/client/cli/tx.go | 109 ++++++---- x/wasm/client/cli/tx_test.go | 59 ++++++ x/wasm/keeper/authz_policy_test.go | 311 +++++++++++++++++++++++++++++ x/wasm/types/params.go | 3 + x/wasm/types/params_test.go | 80 ++++++++ 8 files changed, 623 insertions(+), 55 deletions(-) create mode 100644 x/wasm/client/cli/gov_tx_test.go create mode 100644 x/wasm/client/cli/tx_test.go create mode 100644 x/wasm/keeper/authz_policy_test.go diff --git a/x/wasm/client/cli/genesis_msg.go b/x/wasm/client/cli/genesis_msg.go index f4ba94fbd2..7ed5a7f290 100644 --- a/x/wasm/client/cli/genesis_msg.go +++ b/x/wasm/client/cli/genesis_msg.go @@ -73,6 +73,7 @@ func GenesisStoreCodeCmd(defaultNodeHome string, genesisMutator GenesisMutator) cmd.Flags().String(flagInstantiateByEverybody, "", "Everybody can instantiate a contract from the code, optional") cmd.Flags().String(flagInstantiateNobody, "", "Nobody except the governance process can instantiate a contract from the code, optional") cmd.Flags().String(flagInstantiateByAddress, "", "Only this address can instantiate a contract instance from the code, optional") + cmd.Flags().StringSlice(flagInstantiateByAnyOfAddress, []string{}, "Any of the addresses can instantiate a contract from the code, optional") cmd.Flags().String(flags.FlagHome, defaultNodeHome, "The application home directory") cmd.Flags().String(flags.FlagKeyringBackend, flags.DefaultKeyringBackend, "Select keyring's backend (os|file|kwallet|pass|test)") diff --git a/x/wasm/client/cli/gov_tx.go b/x/wasm/client/cli/gov_tx.go index b619dbb8b1..300d0017a7 100644 --- a/x/wasm/client/cli/gov_tx.go +++ b/x/wasm/client/cli/gov_tx.go @@ -597,27 +597,33 @@ func ProposalUnpinCodesCmd() *cobra.Command { return cmd } -func parseAccessConfig(config string) (types.AccessConfig, error) { - switch config { +func parseAccessConfig(raw string) (types.AccessConfig, error) { + switch raw { case "nobody": return types.AllowNobody, nil case "everybody": return types.AllowEverybody, nil default: - address, err := sdk.AccAddressFromBech32(config) - if err != nil { - return types.AccessConfig{}, fmt.Errorf("unable to parse address %s", config) + parts := strings.Split(raw, ",") + addrs := make([]sdk.AccAddress, len(parts)) + for i, v := range parts { + addr, err := sdk.AccAddressFromBech32(v) + if err != nil { + return types.AccessConfig{}, fmt.Errorf("unable to parse address %q: %s", v, err) + } + addrs[i] = addr } - return types.AccessTypeOnlyAddress.With(address), nil + cfg := types.AccessTypeAnyOfAddresses.With(addrs...) + return cfg, cfg.ValidateBasic() } } func parseAccessConfigUpdates(args []string) ([]types.AccessConfigUpdate, error) { updates := make([]types.AccessConfigUpdate, len(args)) for i, c := range args { - // format: code_id,access_config - // access_config: nobody|everybody|address - parts := strings.Split(c, ",") + // format: code_id:access_config + // access_config: nobody|everybody|address(es) + parts := strings.Split(c, ":") if len(parts) != 2 { return nil, fmt.Errorf("invalid format") } @@ -642,15 +648,15 @@ func parseAccessConfigUpdates(args []string) ([]types.AccessConfigUpdate, error) func ProposalUpdateInstantiateConfigCmd() *cobra.Command { bech32Prefix := sdk.GetConfig().GetBech32AccountAddrPrefix() cmd := &cobra.Command{ - Use: "update-instantiate-config [code-id,permission]...", + Use: "update-instantiate-config [code-id:permission]...", Short: "Submit an update instantiate config proposal.", Args: cobra.MinimumNArgs(1), Long: strings.TrimSpace( fmt.Sprintf(`Submit an update instantiate config proposal for multiple code ids. Example: -$ %s tx gov submit-proposal update-instantiate-config 1,nobody 2,everybody 3,%s1l2rsakp388kuv9k8qzq6lrm9taddae7fpx59wm -`, version.AppName, bech32Prefix)), +$ %s tx gov submit-proposal update-instantiate-config 1:nobody 2:everybody 3:%s1l2rsakp388kuv9k8qzq6lrm9taddae7fpx59wm,%s1vx8knpllrj7n963p9ttd80w47kpacrhuts497x +`, version.AppName, bech32Prefix, bech32Prefix)), RunE: func(cmd *cobra.Command, args []string) error { clientCtx, err := client.GetClientTxContext(cmd) if err != nil { diff --git a/x/wasm/client/cli/gov_tx_test.go b/x/wasm/client/cli/gov_tx_test.go new file mode 100644 index 0000000000..b4b0274189 --- /dev/null +++ b/x/wasm/client/cli/gov_tx_test.go @@ -0,0 +1,85 @@ +package cli + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/CosmWasm/wasmd/x/wasm/types" +) + +func TestParseAccessConfigUpdates(t *testing.T) { + specs := map[string]struct { + src []string + exp []types.AccessConfigUpdate + expErr bool + }{ + "nobody": { + src: []string{"1:nobody"}, + exp: []types.AccessConfigUpdate{{ + CodeID: 1, + InstantiatePermission: types.AccessConfig{Permission: types.AccessTypeNobody}, + }}, + }, + "everybody": { + src: []string{"1:everybody"}, + exp: []types.AccessConfigUpdate{{ + CodeID: 1, + InstantiatePermission: types.AccessConfig{Permission: types.AccessTypeEverybody}, + }}, + }, + "any of addresses - single": { + src: []string{"1:cosmos1vx8knpllrj7n963p9ttd80w47kpacrhuts497x"}, + exp: []types.AccessConfigUpdate{ + { + CodeID: 1, + InstantiatePermission: types.AccessConfig{ + Permission: types.AccessTypeAnyOfAddresses, + Addresses: []string{"cosmos1vx8knpllrj7n963p9ttd80w47kpacrhuts497x"}, + }, + }, + }, + }, + "any of addresses - multiple": { + src: []string{"1:cosmos1vx8knpllrj7n963p9ttd80w47kpacrhuts497x,cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr"}, + exp: []types.AccessConfigUpdate{ + { + CodeID: 1, + InstantiatePermission: types.AccessConfig{ + Permission: types.AccessTypeAnyOfAddresses, + Addresses: []string{"cosmos1vx8knpllrj7n963p9ttd80w47kpacrhuts497x", "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr"}, + }, + }, + }, + }, + "multiple code ids with different permissions": { + src: []string{"1:cosmos1vx8knpllrj7n963p9ttd80w47kpacrhuts497x,cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr", "2:nobody"}, + exp: []types.AccessConfigUpdate{ + { + CodeID: 1, + InstantiatePermission: types.AccessConfig{ + Permission: types.AccessTypeAnyOfAddresses, + Addresses: []string{"cosmos1vx8knpllrj7n963p9ttd80w47kpacrhuts497x", "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr"}, + }, + }, { + CodeID: 2, + InstantiatePermission: types.AccessConfig{ + Permission: types.AccessTypeNobody, + }, + }, + }, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + got, gotErr := parseAccessConfigUpdates(spec.src) + if spec.expErr { + require.Error(t, gotErr) + return + } + require.NoError(t, gotErr) + assert.Equal(t, spec.exp, got) + }) + } +} diff --git a/x/wasm/client/cli/tx.go b/x/wasm/client/cli/tx.go index 28f0a1e2a2..c4dfa473f4 100644 --- a/x/wasm/client/cli/tx.go +++ b/x/wasm/client/cli/tx.go @@ -19,15 +19,16 @@ import ( ) const ( - flagAmount = "amount" - flagLabel = "label" - flagAdmin = "admin" - flagNoAdmin = "no-admin" - flagRunAs = "run-as" - flagInstantiateByEverybody = "instantiate-everybody" - flagInstantiateNobody = "instantiate-nobody" - flagInstantiateByAddress = "instantiate-only-address" - flagUnpinCode = "unpin-code" + flagAmount = "amount" + flagLabel = "label" + flagAdmin = "admin" + flagNoAdmin = "no-admin" + flagRunAs = "run-as" + flagInstantiateByEverybody = "instantiate-everybody" + flagInstantiateNobody = "instantiate-nobody" + flagInstantiateByAddress = "instantiate-only-address" + flagInstantiateByAnyOfAddress = "instantiate-anyof-addresses" + flagUnpinCode = "unpin-code" ) // GetTxCmd returns the transaction commands for this module @@ -75,7 +76,8 @@ func StoreCodeCmd() *cobra.Command { cmd.Flags().String(flagInstantiateByEverybody, "", "Everybody can instantiate a contract from the code, optional") cmd.Flags().String(flagInstantiateNobody, "", "Nobody except the governance process can instantiate a contract from the code, optional") - cmd.Flags().String(flagInstantiateByAddress, "", "Only this address can instantiate a contract instance from the code, optional") + cmd.Flags().String(flagInstantiateByAddress, "", "Deprecated: Only this address can instantiate a contract from the code, optional") + cmd.Flags().StringSlice(flagInstantiateByAnyOfAddress, []string{}, "Any of the addresses can instantiate a contract from the code, optional") flags.AddTxFlagsToCmd(cmd) return cmd } @@ -97,55 +99,76 @@ func parseStoreCodeArgs(file string, sender sdk.AccAddress, flags *flag.FlagSet) return types.MsgStoreCode{}, fmt.Errorf("invalid input file. Use wasm binary or gzip") } - var perm *types.AccessConfig + perm, err := parseAccessConfigFlags(flags) + if err != nil { + return types.MsgStoreCode{}, err + } + + msg := types.MsgStoreCode{ + Sender: sender.String(), + WASMByteCode: wasm, + InstantiatePermission: perm, + } + return msg, nil +} + +func parseAccessConfigFlags(flags *flag.FlagSet) (*types.AccessConfig, error) { + addrs, err := flags.GetStringSlice(flagInstantiateByAnyOfAddress) + if err != nil { + return nil, fmt.Errorf("flag any of: %s", err) + } + if len(addrs) != 0 { + acceptedAddrs := make([]sdk.AccAddress, len(addrs)) + for i, v := range addrs { + acceptedAddrs[i], err = sdk.AccAddressFromBech32(v) + if err != nil { + return nil, fmt.Errorf("parse %q: %w", v, err) + } + } + x := types.AccessTypeAnyOfAddresses.With(acceptedAddrs...) + return &x, nil + } + onlyAddrStr, err := flags.GetString(flagInstantiateByAddress) if err != nil { - return types.MsgStoreCode{}, fmt.Errorf("instantiate by address: %s", err) + return nil, fmt.Errorf("instantiate by address: %s", err) } if onlyAddrStr != "" { allowedAddr, err := sdk.AccAddressFromBech32(onlyAddrStr) if err != nil { - return types.MsgStoreCode{}, sdkerrors.Wrap(err, flagInstantiateByAddress) + return nil, sdkerrors.Wrap(err, flagInstantiateByAddress) } x := types.AccessTypeOnlyAddress.With(allowedAddr) - perm = &x - } else { - everybodyStr, err := flags.GetString(flagInstantiateByEverybody) + return &x, nil + } + everybodyStr, err := flags.GetString(flagInstantiateByEverybody) + if err != nil { + return nil, fmt.Errorf("instantiate by everybody: %s", err) + } + if everybodyStr != "" { + ok, err := strconv.ParseBool(everybodyStr) if err != nil { - return types.MsgStoreCode{}, fmt.Errorf("instantiate by everybody: %s", err) + return nil, fmt.Errorf("boolean value expected for instantiate by everybody: %s", err) } - if everybodyStr != "" { - ok, err := strconv.ParseBool(everybodyStr) - if err != nil { - return types.MsgStoreCode{}, fmt.Errorf("boolean value expected for instantiate by everybody: %s", err) - } - if ok { - perm = &types.AllowEverybody - } + if ok { + return &types.AllowEverybody, nil } + } - nobodyStr, err := flags.GetString(flagInstantiateNobody) + nobodyStr, err := flags.GetString(flagInstantiateNobody) + if err != nil { + return nil, fmt.Errorf("instantiate by nobody: %s", err) + } + if nobodyStr != "" { + ok, err := strconv.ParseBool(nobodyStr) if err != nil { - return types.MsgStoreCode{}, fmt.Errorf("instantiate by nobody: %s", err) + return nil, fmt.Errorf("boolean value expected for instantiate by nobody: %s", err) } - if nobodyStr != "" { - ok, err := strconv.ParseBool(nobodyStr) - if err != nil { - return types.MsgStoreCode{}, fmt.Errorf("boolean value expected for instantiate by nobody: %s", err) - } - if ok { - perm = &types.AllowNobody - } + if ok { + return &types.AllowNobody, nil } - } - - msg := types.MsgStoreCode{ - Sender: sender.String(), - WASMByteCode: wasm, - InstantiatePermission: perm, - } - return msg, nil + return nil, nil } // InstantiateContractCmd will instantiate a contract from previously uploaded code. diff --git a/x/wasm/client/cli/tx_test.go b/x/wasm/client/cli/tx_test.go new file mode 100644 index 0000000000..8fc0cc9def --- /dev/null +++ b/x/wasm/client/cli/tx_test.go @@ -0,0 +1,59 @@ +package cli + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/CosmWasm/wasmd/x/wasm/types" +) + +func TestParseAccessConfigFlags(t *testing.T) { + specs := map[string]struct { + args []string + expCfg *types.AccessConfig + expErr bool + }{ + "nobody": { + args: []string{"--instantiate-nobody=true"}, + expCfg: &types.AccessConfig{Permission: types.AccessTypeNobody}, + }, + "everybody": { + args: []string{"--instantiate-everybody=true"}, + expCfg: &types.AccessConfig{Permission: types.AccessTypeEverybody}, + }, + "only address": { + args: []string{"--instantiate-only-address=cosmos1vx8knpllrj7n963p9ttd80w47kpacrhuts497x"}, + expCfg: &types.AccessConfig{Permission: types.AccessTypeOnlyAddress, Address: "cosmos1vx8knpllrj7n963p9ttd80w47kpacrhuts497x"}, + }, + "only address - invalid": { + args: []string{"--instantiate-only-address=foo"}, + expErr: true, + }, + "any of address": { + args: []string{"--instantiate-anyof-addresses=cosmos1vx8knpllrj7n963p9ttd80w47kpacrhuts497x,cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr"}, + expCfg: &types.AccessConfig{Permission: types.AccessTypeAnyOfAddresses, Addresses: []string{"cosmos1vx8knpllrj7n963p9ttd80w47kpacrhuts497x", "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr"}}, + }, + "any of address - invalid": { + args: []string{"--instantiate-anyof-addresses=cosmos1vx8knpllrj7n963p9ttd80w47kpacrhuts497x,foo"}, + expErr: true, + }, + "not set": { + args: []string{}, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + flags := StoreCodeCmd().Flags() + require.NoError(t, flags.Parse(spec.args)) + gotCfg, gotErr := parseAccessConfigFlags(flags) + if spec.expErr { + require.Error(t, gotErr) + return + } + require.NoError(t, gotErr) + assert.Equal(t, spec.expCfg, gotCfg) + }) + } +} diff --git a/x/wasm/keeper/authz_policy_test.go b/x/wasm/keeper/authz_policy_test.go new file mode 100644 index 0000000000..acc9cb346c --- /dev/null +++ b/x/wasm/keeper/authz_policy_test.go @@ -0,0 +1,311 @@ +package keeper + +import ( + "testing" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/assert" + + "github.com/CosmWasm/wasmd/x/wasm/types" +) + +func TestDefaultAuthzPolicyCanCreateCode(t *testing.T) { + myActorAddress := RandomAccountAddress(t) + otherAddress := RandomAccountAddress(t) + specs := map[string]struct { + config types.AccessConfig + actor sdk.AccAddress + exp bool + panics bool + }{ + "nobody": { + config: types.AllowNobody, + exp: false, + }, + "everybody": { + config: types.AllowEverybody, + exp: true, + }, + "only address - same": { + config: types.AccessTypeOnlyAddress.With(myActorAddress), + exp: true, + }, + "only address - different": { + config: types.AccessTypeOnlyAddress.With(otherAddress), + exp: false, + }, + "any address - included": { + config: types.AccessTypeAnyOfAddresses.With(otherAddress, myActorAddress), + exp: true, + }, + "any address - not included": { + config: types.AccessTypeAnyOfAddresses.With(otherAddress), + exp: false, + }, + "undefined config - panics": { + config: types.AccessConfig{}, + panics: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + policy := DefaultAuthorizationPolicy{} + if !spec.panics { + got := policy.CanCreateCode(spec.config, myActorAddress) + assert.Equal(t, spec.exp, got) + return + } + assert.Panics(t, func() { + policy.CanCreateCode(spec.config, myActorAddress) + }) + }) + } +} + +func TestDefaultAuthzPolicyCanInstantiateContract(t *testing.T) { + myActorAddress := RandomAccountAddress(t) + otherAddress := RandomAccountAddress(t) + specs := map[string]struct { + config types.AccessConfig + actor sdk.AccAddress + exp bool + panics bool + }{ + "nobody": { + config: types.AllowNobody, + exp: false, + }, + "everybody": { + config: types.AllowEverybody, + exp: true, + }, + "only address - same": { + config: types.AccessTypeOnlyAddress.With(myActorAddress), + exp: true, + }, + "only address - different": { + config: types.AccessTypeOnlyAddress.With(otherAddress), + exp: false, + }, + "any address - included": { + config: types.AccessTypeAnyOfAddresses.With(otherAddress, myActorAddress), + exp: true, + }, + "any address - not included": { + config: types.AccessTypeAnyOfAddresses.With(otherAddress), + exp: false, + }, + "undefined config - panics": { + config: types.AccessConfig{}, + panics: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + policy := DefaultAuthorizationPolicy{} + if !spec.panics { + got := policy.CanInstantiateContract(spec.config, myActorAddress) + assert.Equal(t, spec.exp, got) + return + } + assert.Panics(t, func() { + policy.CanInstantiateContract(spec.config, myActorAddress) + }) + }) + } +} + +func TestDefaultAuthzPolicyCanModifyContract(t *testing.T) { + myActorAddress := RandomAccountAddress(t) + otherAddress := RandomAccountAddress(t) + + specs := map[string]struct { + admin sdk.AccAddress + exp bool + }{ + "same as actor": { + admin: myActorAddress, + exp: true, + }, + "different admin": { + admin: otherAddress, + exp: false, + }, + "no admin": { + exp: false, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + policy := DefaultAuthorizationPolicy{} + got := policy.CanModifyContract(spec.admin, myActorAddress) + assert.Equal(t, spec.exp, got) + }) + } +} + +func TestDefaultAuthzPolicyCanModifyCodeAccessConfig(t *testing.T) { + myActorAddress := RandomAccountAddress(t) + otherAddress := RandomAccountAddress(t) + + specs := map[string]struct { + admin sdk.AccAddress + subset bool + exp bool + }{ + "same as actor - subset": { + admin: myActorAddress, + subset: true, + exp: true, + }, + "same as actor - not subset": { + admin: myActorAddress, + subset: false, + exp: false, + }, + "different admin": { + admin: otherAddress, + exp: false, + }, + "no admin": { + exp: false, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + policy := DefaultAuthorizationPolicy{} + got := policy.CanModifyCodeAccessConfig(spec.admin, myActorAddress, spec.subset) + assert.Equal(t, spec.exp, got) + }) + } +} + +func TestGovAuthzPolicyCanCreateCode(t *testing.T) { + myActorAddress := RandomAccountAddress(t) + otherAddress := RandomAccountAddress(t) + specs := map[string]struct { + config types.AccessConfig + actor sdk.AccAddress + }{ + "nobody": { + config: types.AllowNobody, + }, + "everybody": { + config: types.AllowEverybody, + }, + "only address - same": { + config: types.AccessTypeOnlyAddress.With(myActorAddress), + }, + "only address - different": { + config: types.AccessTypeOnlyAddress.With(otherAddress), + }, + "any address - included": { + config: types.AccessTypeAnyOfAddresses.With(otherAddress, myActorAddress), + }, + "any address - not included": { + config: types.AccessTypeAnyOfAddresses.With(otherAddress), + }, + "undefined config - panics": { + config: types.AccessConfig{}, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + policy := GovAuthorizationPolicy{} + got := policy.CanCreateCode(spec.config, myActorAddress) + assert.True(t, got) + }) + } +} + +func TestGovAuthzPolicyCanInstantiateContract(t *testing.T) { + myActorAddress := RandomAccountAddress(t) + otherAddress := RandomAccountAddress(t) + specs := map[string]struct { + config types.AccessConfig + actor sdk.AccAddress + }{ + "nobody": { + config: types.AllowNobody, + }, + "everybody": { + config: types.AllowEverybody, + }, + "only address - same": { + config: types.AccessTypeOnlyAddress.With(myActorAddress), + }, + "only address - different": { + config: types.AccessTypeOnlyAddress.With(otherAddress), + }, + "any address - included": { + config: types.AccessTypeAnyOfAddresses.With(otherAddress, myActorAddress), + }, + "any address - not included": { + config: types.AccessTypeAnyOfAddresses.With(otherAddress), + }, + "undefined config - panics": { + config: types.AccessConfig{}, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + policy := GovAuthorizationPolicy{} + got := policy.CanInstantiateContract(spec.config, myActorAddress) + assert.True(t, got) + }) + } +} + +func TestGovAuthzPolicyCanModifyContract(t *testing.T) { + myActorAddress := RandomAccountAddress(t) + otherAddress := RandomAccountAddress(t) + + specs := map[string]struct { + admin sdk.AccAddress + }{ + "same as actor": { + admin: myActorAddress, + }, + "different admin": { + admin: otherAddress, + }, + "no admin": {}, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + policy := GovAuthorizationPolicy{} + got := policy.CanModifyContract(spec.admin, myActorAddress) + assert.True(t, got) + }) + } +} + +func TestGovAuthzPolicyCanModifyCodeAccessConfig(t *testing.T) { + myActorAddress := RandomAccountAddress(t) + otherAddress := RandomAccountAddress(t) + + specs := map[string]struct { + admin sdk.AccAddress + subset bool + }{ + "same as actor - subset": { + admin: myActorAddress, + subset: true, + }, + "same as actor - not subset": { + admin: myActorAddress, + subset: false, + }, + "different admin": { + admin: otherAddress, + }, + "no admin": {}, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + policy := GovAuthorizationPolicy{} + got := policy.CanModifyCodeAccessConfig(spec.admin, myActorAddress, spec.subset) + assert.True(t, got) + }) + } +} diff --git a/x/wasm/types/params.go b/x/wasm/types/params.go index 5680cc9f46..0ee7dcb619 100644 --- a/x/wasm/types/params.go +++ b/x/wasm/types/params.go @@ -162,6 +162,7 @@ func validateAccessType(i interface{}) error { return sdkerrors.Wrapf(ErrInvalid, "unknown type: %q", a) } +// ValidateBasic performs basic validation func (a AccessConfig) ValidateBasic() error { switch a.Permission { case AccessTypeUnspecified: @@ -203,6 +204,8 @@ func assertValidAddresses(addrs []string) error { return nil } +// Allowed returns if permission includes the actor. +// Actor address must be valid and not nil func (a AccessConfig) Allowed(actor sdk.AccAddress) bool { switch a.Permission { case AccessTypeNobody: diff --git a/x/wasm/types/params_test.go b/x/wasm/types/params_test.go index a05872243d..77ac8b7424 100644 --- a/x/wasm/types/params_test.go +++ b/x/wasm/types/params_test.go @@ -224,3 +224,83 @@ func TestParamsUnmarshalJson(t *testing.T) { }) } } + +func TestAccessTypeWith(t *testing.T) { + myAddress := sdk.AccAddress(randBytes(SDKAddrLen)) + myOtherAddress := sdk.AccAddress(randBytes(SDKAddrLen)) + specs := map[string]struct { + src AccessType + addrs []sdk.AccAddress + exp AccessConfig + expPanic bool + }{ + "nobody": { + src: AccessTypeNobody, + exp: AccessConfig{Permission: AccessTypeNobody}, + }, + "nobody with address": { + src: AccessTypeNobody, + addrs: []sdk.AccAddress{myAddress}, + exp: AccessConfig{Permission: AccessTypeNobody}, + }, + "everybody": { + src: AccessTypeEverybody, + exp: AccessConfig{Permission: AccessTypeEverybody}, + }, + "everybody with address": { + src: AccessTypeEverybody, + addrs: []sdk.AccAddress{myAddress}, + exp: AccessConfig{Permission: AccessTypeEverybody}, + }, + "only address without address": { + src: AccessTypeOnlyAddress, + expPanic: true, + }, + "only address with address": { + src: AccessTypeOnlyAddress, + addrs: []sdk.AccAddress{myAddress}, + exp: AccessConfig{Permission: AccessTypeOnlyAddress, Address: myAddress.String()}, + }, + "only address with invalid address": { + src: AccessTypeOnlyAddress, + addrs: []sdk.AccAddress{nil}, + expPanic: true, + }, + "any of address without address": { + src: AccessTypeAnyOfAddresses, + expPanic: true, + }, + "any of address with single address": { + src: AccessTypeAnyOfAddresses, + addrs: []sdk.AccAddress{myAddress}, + exp: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{myAddress.String()}}, + }, + "any of address with multiple addresses": { + src: AccessTypeAnyOfAddresses, + addrs: []sdk.AccAddress{myAddress, myOtherAddress}, + exp: AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: []string{myAddress.String(), myOtherAddress.String()}}, + }, + "any of address with duplicate addresses": { + src: AccessTypeAnyOfAddresses, + addrs: []sdk.AccAddress{myAddress, myAddress}, + expPanic: true, + }, + "any of address with invalid address": { + src: AccessTypeAnyOfAddresses, + addrs: []sdk.AccAddress{nil}, + expPanic: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + if !spec.expPanic { + got := spec.src.With(spec.addrs...) + assert.Equal(t, spec.exp, got) + return + } + assert.Panics(t, func() { + spec.src.With(spec.addrs...) + }) + }) + } +} From 20cd4af540b180b0c5129127e7e1d882ea9da139 Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Wed, 7 Sep 2022 16:19:27 +0200 Subject: [PATCH 080/120] More tests --- x/wasm/client/cli/gov_tx.go | 7 ++++++- x/wasm/client/cli/gov_tx_test.go | 12 ++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/x/wasm/client/cli/gov_tx.go b/x/wasm/client/cli/gov_tx.go index 300d0017a7..8daeb82183 100644 --- a/x/wasm/client/cli/gov_tx.go +++ b/x/wasm/client/cli/gov_tx.go @@ -597,7 +597,7 @@ func ProposalUnpinCodesCmd() *cobra.Command { return cmd } -func parseAccessConfig(raw string) (types.AccessConfig, error) { +func parseAccessConfig(raw string) (c types.AccessConfig, err error) { switch raw { case "nobody": return types.AllowNobody, nil @@ -613,6 +613,11 @@ func parseAccessConfig(raw string) (types.AccessConfig, error) { } addrs[i] = addr } + defer func() { // convert panic in ".With" to error for better output + if r := recover(); r != nil { + err = r.(error) + } + }() cfg := types.AccessTypeAnyOfAddresses.With(addrs...) return cfg, cfg.ValidateBasic() } diff --git a/x/wasm/client/cli/gov_tx_test.go b/x/wasm/client/cli/gov_tx_test.go index b4b0274189..7c8600e07f 100644 --- a/x/wasm/client/cli/gov_tx_test.go +++ b/x/wasm/client/cli/gov_tx_test.go @@ -70,6 +70,18 @@ func TestParseAccessConfigUpdates(t *testing.T) { }, }, }, + "any of addresses - empty list": { + src: []string{"1:"}, + expErr: true, + }, + "any of addresses - invalid address": { + src: []string{"1:foo"}, + expErr: true, + }, + "any of addresses - duplicate address": { + src: []string{"1:cosmos1vx8knpllrj7n963p9ttd80w47kpacrhuts497x,cosmos1vx8knpllrj7n963p9ttd80w47kpacrhuts497x"}, + expErr: true, + }, } for name, spec := range specs { t.Run(name, func(t *testing.T) { From 10bb470d978283c7f6a31a5c0d9f56c231dfba13 Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Wed, 7 Sep 2022 16:31:51 +0200 Subject: [PATCH 081/120] Upgrade keyring/ go-keychain dependency --- go.mod | 12 +++++------- go.sum | 28 +++++++++++++++------------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/go.mod b/go.mod index f93697ccc3..c92ecf3287 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/cosmos/iavl v0.19.1 github.com/cosmos/ibc-go/v3 v3.0.0 github.com/cosmos/interchain-accounts v0.1.0 - github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b + github.com/dvsekhvalnov/jose2go v1.5.0 github.com/gogo/protobuf v1.3.3 github.com/golang/protobuf v1.5.2 github.com/google/gofuzz v1.2.0 @@ -34,7 +34,8 @@ require ( require ( filippo.io/edwards25519 v1.0.0-beta.2 // indirect - github.com/99designs/keyring v1.1.6 // indirect + github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect + github.com/99designs/keyring v1.2.1 // indirect github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect github.com/Workiva/go-datastructures v1.0.53 // indirect github.com/armon/go-metrics v0.4.0 // indirect @@ -51,7 +52,7 @@ require ( github.com/cosmos/ledger-cosmos-go v0.11.1 // indirect github.com/cosmos/ledger-go v0.9.2 // indirect github.com/creachadair/taskgroup v0.3.2 // indirect - github.com/danieljoos/wincred v1.0.2 // indirect + github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect github.com/dgraph-io/badger/v2 v2.2007.4 // indirect @@ -82,7 +83,6 @@ require ( github.com/improbable-eng/grpc-web v0.14.1 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect - github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d // indirect github.com/klauspost/compress v1.15.9 // indirect github.com/lib/pq v1.10.6 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect @@ -113,7 +113,7 @@ require ( github.com/tendermint/go-amino v0.16.0 // indirect github.com/zondax/hid v0.9.0 // indirect go.etcd.io/bbolt v1.3.6 // indirect - golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect + golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 // indirect golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect golang.org/x/net v0.0.0-20220906165146-f3363e06e74c // indirect golang.org/x/sys v0.0.0-20220907062415-87db552b00fd // indirect @@ -126,8 +126,6 @@ require ( ) replace ( - // Use the cosmos-flavored keyring library - github.com/99designs/keyring => github.com/cosmos/keyring v1.1.7-0.20210622111912-ef00f8ac3d76 // Fix upstream GHSA-h395-qcrw-5vmq vulnerability. // TODO Remove it: https://github.com/cosmos/cosmos-sdk/issues/10409 github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.7.0 diff --git a/go.sum b/go.sum index efc49e6d07..ab40c9d998 100644 --- a/go.sum +++ b/go.sum @@ -37,6 +37,10 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.0.0-beta.2 h1:/BZRNzm8N4K4eWfK28dL4yescorxtO7YG1yun8fy+pI= filippo.io/edwards25519 v1.0.0-beta.2/go.mod h1:X+pm78QAUPtFLi1z9PYIlS/bdDnvbCOGKtZ+ACWEf7o= +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/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= @@ -171,8 +175,6 @@ github.com/cosmos/ibc-go/v3 v3.0.0 h1:XUNplHVS51Q2gMnTFsFsH9QJ7flsovMamnltKbEgPQ github.com/cosmos/ibc-go/v3 v3.0.0/go.mod h1:Mb+1NXiPOLd+CPFlOC6BKeAUaxXlhuWenMmRiUiSmwY= github.com/cosmos/interchain-accounts v0.1.0 h1:QmuwNsf1Hxl3P5GSGt7Z+JeuHPiZw4Z34R/038P5T6s= github.com/cosmos/interchain-accounts v0.1.0/go.mod h1:Fv6LXDs+0ng4mIDVWwEJMXbAIMxY4kiq+A7Bw1Fb9AY= -github.com/cosmos/keyring v1.1.7-0.20210622111912-ef00f8ac3d76 h1:DdzS1m6o/pCqeZ8VOAit/gyATedRgjvkVI+UCrLpyuU= -github.com/cosmos/keyring v1.1.7-0.20210622111912-ef00f8ac3d76/go.mod h1:0mkLWIoZuQ7uBoospo5Q9zIpqq6rYCPJDSUdeCJvPM8= github.com/cosmos/ledger-cosmos-go v0.11.1 h1:9JIYsGnXP613pb2vPjFeMMjBI5lEDsEaF6oYorTy6J4= github.com/cosmos/ledger-cosmos-go v0.11.1/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY= github.com/cosmos/ledger-go v0.9.2 h1:Nnao/dLwaVTk1Q5U9THldpUMMXU94BOTWPddSmVB6pI= @@ -183,8 +185,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/creachadair/taskgroup v0.3.2 h1:zlfutDS+5XG40AOxcHDSThxKzns8Tnr9jnr6VqkYlkM= github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/danieljoos/wincred v1.0.2 h1:zf4bhty2iLuwgjgpraD2E9UbvO+fe54XXGJbOwe23fU= -github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= +github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= +github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -213,8 +215,8 @@ github.com/dop251/goja v0.0.0-20200721192441-a695b0cdd498/go.mod h1:Mw6PkjjMXWbT 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/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b h1:HBah4D48ypg3J7Np4N+HY/ZR76fx3HEUGxDU6Uk39oQ= -github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b/go.mod h1:7BvyPhdbLxMXIYTFPLsyJRFMsKmOZnQmzh6Gb+uquuM= +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/dvyukov/go-fuzz v0.0.0-20200318091601-be3528f3a813/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= @@ -466,8 +468,6 @@ github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= -github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d h1:Z+RDyXzjKE0i2sTjZ/b1uxiGtPhFy34Ou/Tk0qwN0kM= -github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc= 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/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= @@ -557,6 +557,8 @@ github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxzi github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/neilotoole/errgroup v0.1.5/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= @@ -730,7 +732,6 @@ github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3 github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= @@ -825,8 +826,8 @@ golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 h1:Y/gsMcFOcR+6S6f3YeMKl5g+dZMEWqcz5Czj/GWYbkM= +golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= 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= @@ -954,7 +955,6 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1003,6 +1003,7 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/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-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-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1176,8 +1177,9 @@ google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqw 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= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U= +gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= From 355ee686ee724ddcedd0b21f9b809c0f554fbfa8 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Wed, 7 Sep 2022 21:39:31 +0700 Subject: [PATCH 082/120] ibc-go v3.2.0 (#937) * 457 * upgrade ci * go get -> go install * change denom to new format * Update config.yml * Revert "change denom to new format" This reverts commit e637cf5aa417f5df9b91c196d97de85dcb70db01. * bump ibc-go to v3.2.x * Update config.yml * ibc-go v3.2.0 * Update CHANGELOG.md * Update CHANGELOG.md * sdk v0.45.8 --- CHANGELOG.md | 1 + go.mod | 2 +- go.sum | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3fee812325..4811418454 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## [Unreleased](https://github.com/CosmWasm/wasmd/tree/HEAD) - Upgrade go to v1.18 [\#866]https://github.com/CosmWasm/wasmd/pull/866/) ([faddat](https://github.com/faddat)) +- Upgrade to ibc-go v3.2.0 [\#937](https://github.com/CosmWasm/wasmd/pull/937) ([faddat](https://github.com/faddat)) - Upgrade to cosmos-sdk v0.45.8 [\#964](https://github.com/CosmWasm/wasmd/pull/964/) ([faddat](https://github.com/faddat)) - Upgrade wasmvm to v1.1.0 [\#984](https://github.com/CosmWasm/wasmd/pull/984), see [wasmvm v1.1.0](https://github.com/CosmWasm/wasmvm/releases/tag/v1.1.0) diff --git a/go.mod b/go.mod index f93697ccc3..6b501d99a5 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/CosmWasm/wasmvm v1.1.0 github.com/cosmos/cosmos-sdk v0.45.8 github.com/cosmos/iavl v0.19.1 - github.com/cosmos/ibc-go/v3 v3.0.0 + github.com/cosmos/ibc-go/v3 v3.2.0 github.com/cosmos/interchain-accounts v0.1.0 github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b github.com/gogo/protobuf v1.3.3 diff --git a/go.sum b/go.sum index efc49e6d07..e6dfc73b87 100644 --- a/go.sum +++ b/go.sum @@ -167,8 +167,8 @@ github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4 github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= github.com/cosmos/iavl v0.19.1 h1:3gaq9b6SjiB0KBTygRnAvEGml2pQlu1TH8uma5g63Ys= github.com/cosmos/iavl v0.19.1/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= -github.com/cosmos/ibc-go/v3 v3.0.0 h1:XUNplHVS51Q2gMnTFsFsH9QJ7flsovMamnltKbEgPQ4= -github.com/cosmos/ibc-go/v3 v3.0.0/go.mod h1:Mb+1NXiPOLd+CPFlOC6BKeAUaxXlhuWenMmRiUiSmwY= +github.com/cosmos/ibc-go/v3 v3.2.0 h1:Mh+RWo5FHPMM1Xsrar3uwKufdEGdIp5LDkVk9cYKYYA= +github.com/cosmos/ibc-go/v3 v3.2.0/go.mod h1:DrDYXJjWNwgv72cK1Il+BegtyGIDXcx+cnJwWGzve6o= github.com/cosmos/interchain-accounts v0.1.0 h1:QmuwNsf1Hxl3P5GSGt7Z+JeuHPiZw4Z34R/038P5T6s= github.com/cosmos/interchain-accounts v0.1.0/go.mod h1:Fv6LXDs+0ng4mIDVWwEJMXbAIMxY4kiq+A7Bw1Fb9AY= github.com/cosmos/keyring v1.1.7-0.20210622111912-ef00f8ac3d76 h1:DdzS1m6o/pCqeZ8VOAit/gyATedRgjvkVI+UCrLpyuU= From b8c1d76a9a0426095469d0ecc16e28296f6ca879 Mon Sep 17 00:00:00 2001 From: larry <26318510+larry0x@users.noreply.github.com> Date: Wed, 7 Sep 2022 15:53:55 +0100 Subject: [PATCH 083/120] Add query for the total supply of a coin (#903) * add bank supply query * remove a local dev dependency --- x/wasm/keeper/query_plugins.go | 10 ++++++++++ x/wasm/keeper/query_plugins_test.go | 8 ++++++++ x/wasm/types/expected_keepers.go | 1 + 3 files changed, 19 insertions(+) diff --git a/x/wasm/keeper/query_plugins.go b/x/wasm/keeper/query_plugins.go index b0e095b12c..371242d00a 100644 --- a/x/wasm/keeper/query_plugins.go +++ b/x/wasm/keeper/query_plugins.go @@ -189,6 +189,16 @@ func BankQuerier(bankKeeper types.BankViewKeeper) func(ctx sdk.Context, request } return json.Marshal(res) } + if request.Supply != nil { + coin := bankKeeper.GetSupply(ctx, request.Supply.Denom) + res := wasmvmtypes.SupplyResponse{ + Amount: wasmvmtypes.Coin{ + Denom: coin.Denom, + Amount: coin.Amount.String(), + }, + } + return json.Marshal(res) + } return nil, wasmvmtypes.UnsupportedRequest{Kind: "unknown BankQuery variant"} } } diff --git a/x/wasm/keeper/query_plugins_test.go b/x/wasm/keeper/query_plugins_test.go index c58932d67e..f9282ac152 100644 --- a/x/wasm/keeper/query_plugins_test.go +++ b/x/wasm/keeper/query_plugins_test.go @@ -511,10 +511,18 @@ func (m mockWasmQueryKeeper) IsPinnedCode(ctx sdk.Context, codeID uint64) bool { } type bankKeeperMock struct { + GetSupplyFn func(ctx sdk.Context, denom string) sdk.Coin GetBalanceFn func(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin GetAllBalancesFn func(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins } +func (m bankKeeperMock) GetSupply(ctx sdk.Context, denom string) sdk.Coin { + if m.GetSupplyFn == nil { + panic("not expected to be called") + } + return m.GetSupplyFn(ctx, denom) +} + func (m bankKeeperMock) GetBalance(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin { if m.GetBalanceFn == nil { panic("not expected to be called") diff --git a/x/wasm/types/expected_keepers.go b/x/wasm/types/expected_keepers.go index 0cdd4d80e0..da00047aa4 100644 --- a/x/wasm/types/expected_keepers.go +++ b/x/wasm/types/expected_keepers.go @@ -17,6 +17,7 @@ import ( type BankViewKeeper interface { GetAllBalances(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins GetBalance(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin + GetSupply(ctx sdk.Context, denom string) sdk.Coin } // Burner is a subset of the sdk bank keeper methods From e63e63b0f454cd85fb7640ba5c3acb19f61c9218 Mon Sep 17 00:00:00 2001 From: "xingqiang.yuan" Date: Thu, 8 Sep 2022 16:49:42 +0800 Subject: [PATCH 084/120] fix bug of contract history --- x/wasm/keeper/keeper.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index c5511f3e41..deb78d9db6 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -577,7 +577,7 @@ func (k Keeper) appendToContractHistory(ctx sdk.Context, contractAddr sdk.AccAdd defer iter.Close() if iter.Valid() { - pos = sdk.BigEndianToUint64(iter.Value()) + pos = sdk.BigEndianToUint64(iter.Key()) } // then store with incrementing position for _, e := range newEntries { From f9912e9333516b245594cacfdd5c0dfbbac8bed1 Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Thu, 8 Sep 2022 14:48:57 +0200 Subject: [PATCH 085/120] Test contract history order --- x/wasm/keeper/keeper_test.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index ac26f10397..7d2f2c3881 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -4,6 +4,8 @@ import ( "bytes" "encoding/json" "errors" + fuzz "github.com/google/gofuzz" + "github.com/tendermint/tendermint/libs/rand" "math" "os" "testing" @@ -1936,3 +1938,20 @@ func TestSetAccessConfig(t *testing.T) { }) } } + +func TestAppendToContractHistory(t *testing.T) { + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + var contractAddr sdk.AccAddress = rand.Bytes(types.ContractAddrLen) + var orderedEntries []types.ContractCodeHistoryEntry + + f := fuzz.New().Funcs(ModelFuzzers...) + for i := 0; i < 10; i++ { + var entry types.ContractCodeHistoryEntry + f.Fuzz(&entry) + keepers.WasmKeeper.appendToContractHistory(ctx, contractAddr, entry) + orderedEntries = append(orderedEntries, entry) + } + // when + gotHistory := keepers.WasmKeeper.GetContractHistory(ctx, contractAddr) + assert.Equal(t, orderedEntries, gotHistory) +} From e3e7ca3c7d3f22d5e82f7fe9e7bbc32259d7ecba Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Thu, 8 Sep 2022 14:55:51 +0200 Subject: [PATCH 086/120] Revert "Create .gitpod.yml" This reverts commit 3864815113aabf281442e800e2fa6f7a8b3d6aeb. --- .gitpod.yml | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .gitpod.yml diff --git a/.gitpod.yml b/.gitpod.yml deleted file mode 100644 index 1a76547d87..0000000000 --- a/.gitpod.yml +++ /dev/null @@ -1 +0,0 @@ -image: github.com/notional-labs/cosmos From 0e41c8cc1c38b729dbfdacf2b27e7f3b7fb0858a Mon Sep 17 00:00:00 2001 From: Alexander Peters Date: Fri, 9 Sep 2022 08:36:00 +0200 Subject: [PATCH 087/120] Better wasmvm 1.1 integration test (#988) * Add cosmwasm_1_1 cability, bump reflect contract, supply query integration test * Review feedback --- app/app.go | 2 +- x/wasm/keeper/keeper_test.go | 2 +- x/wasm/keeper/reflect_test.go | 53 ++++++++++++++++++++++- x/wasm/keeper/testdata/reflect.wasm | Bin 262794 -> 265746 bytes x/wasm/keeper/testdata/reflect.wasm.v1_0 | Bin 0 -> 262794 bytes x/wasm/module_test.go | 2 +- 6 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 x/wasm/keeper/testdata/reflect.wasm.v1_0 diff --git a/app/app.go b/app/app.go index 23259d0d0d..a25e507607 100644 --- a/app/app.go +++ b/app/app.go @@ -507,7 +507,7 @@ func NewWasmApp( // The last arguments can contain custom message handlers, and custom query handlers, // if we want to allow any custom callbacks - supportedFeatures := "iterator,staking,stargate" + supportedFeatures := "iterator,staking,stargate,cosmwasm_1_1" app.WasmKeeper = wasm.NewKeeper( appCodec, keys[wasm.StoreKey], diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index 7d2f2c3881..5b3fc38073 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -42,7 +42,7 @@ func init() { var hackatomWasm []byte -const SupportedFeatures = "iterator,staking,stargate" +const SupportedFeatures = "iterator,staking,stargate,cosmwasm_1_1" func TestNewKeeper(t *testing.T) { _, keepers := CreateTestInput(t, false, SupportedFeatures) diff --git a/x/wasm/keeper/reflect_test.go b/x/wasm/keeper/reflect_test.go index 079324fac5..8e4f4829eb 100644 --- a/x/wasm/keeper/reflect_test.go +++ b/x/wasm/keeper/reflect_test.go @@ -35,7 +35,7 @@ func mustParse(t *testing.T, data []byte, res interface{}) { require.NoError(t, err) } -const ReflectFeatures = "staking,mask,stargate" +const ReflectFeatures = "staking,mask,stargate,cosmwasm_1_1" func TestReflectContractSend(t *testing.T) { cdc := MakeEncodingConfig(t).Marshaler @@ -298,6 +298,57 @@ func TestReflectStargateQuery(t *testing.T) { assert.Equal(t, simpleBalance.Amount[0].Denom, expectedBalance[0].Denom) } +func TestReflectTotalSupplyQuery(t *testing.T) { + cdc := MakeEncodingConfig(t).Marshaler + ctx, keepers := CreateTestInput(t, false, ReflectFeatures, WithMessageEncoders(reflectEncoders(cdc)), WithQueryPlugins(reflectPlugins())) + keeper := keepers.WasmKeeper + // upload code + codeID := StoreReflectContract(t, ctx, keepers) + // creator instantiates a contract and gives it tokens + creator := RandomAccountAddress(t) + contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, codeID, creator, nil, []byte("{}"), "testing", nil) + require.NoError(t, err) + + currentStakeSupply := keepers.BankKeeper.GetSupply(ctx, "stake") + require.NotEmpty(t, currentStakeSupply.Amount) // ensure we have real data + specs := map[string]struct { + denom string + expAmount wasmvmtypes.Coin + }{ + "known denom": { + denom: "stake", + expAmount: ConvertSdkCoinToWasmCoin(currentStakeSupply), + }, + "unknown denom": { + denom: "unknown", + expAmount: wasmvmtypes.Coin{Denom: "unknown", Amount: "0"}, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + // when + queryBz := mustMarshal(t, testdata.ReflectQueryMsg{ + Chain: &testdata.ChainQuery{ + Request: &wasmvmtypes.QueryRequest{ + Bank: &wasmvmtypes.BankQuery{ + Supply: &wasmvmtypes.SupplyQuery{spec.denom}, + }, + }, + }, + }) + simpleRes, err := keeper.QuerySmart(ctx, contractAddr, queryBz) + + // then + require.NoError(t, err) + var rsp testdata.ChainResponse + mustParse(t, simpleRes, &rsp) + var supplyRsp wasmvmtypes.SupplyResponse + mustParse(t, rsp.Data, &supplyRsp) + assert.Equal(t, spec.expAmount, supplyRsp.Amount, spec.expAmount) + }) + } +} + func TestReflectInvalidStargateQuery(t *testing.T) { cdc := MakeEncodingConfig(t).Marshaler ctx, keepers := CreateTestInput(t, false, ReflectFeatures, WithMessageEncoders(reflectEncoders(cdc)), WithQueryPlugins(reflectPlugins())) diff --git a/x/wasm/keeper/testdata/reflect.wasm b/x/wasm/keeper/testdata/reflect.wasm index 312f45768ddc101725a43fec43fa38b3b44719df..412241177bcd4973a11668a76feb536bb32f1a2f 100644 GIT binary patch literal 265746 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,LBM|?8T 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

lROv>PxW_oALw(xw`BSt8NZhJ%+ z!TfaMsdRCrS5bf9^#^8L7KOD&4W~>Z5~#F;3S$&E0w@C*okP0-$SW$RO7oV zo+-8D_>d5T>lCS2k9|Yg+tCGzLHqzc!CdX z@~Rw_T;muUz0lKxNX?ka98Lv9EttdSMN)KlN*z`w5!twuTNUC)rn1U-cXid2s6;yS zeY}YipY(jijXaKP8A4)+;*Hb{yitm-E=>?}axxZAP*_OIj{UUaixt2QjO0w16W5Q< zR5S7=pOF~1TP#-D^?{o�olI076((<}a!=Ki5V?sO86zxHfHfRz#2-DaKG=*l!@BjbS z+IydSZ@(=0F{!9a_w3hted~L#Z+&aXn|+7yV*}Z57!c|@4AZJSRwc&fV8_p4l|seoJN~tb(OL=Yq%I&$ZHELih)+D zdM>$@6Aqm&g076>P*)8Cg|OiNE?SB$kJ1QExm1X-&&n;0x0XkA>r`Q%lFDx8>a=Cn zY9cmJmR`U>m*{x*COPThW1?-jb6p{(^K?9?DlD2i~M>Sb$<-1$ft$w8Y|$l?VrF&L?;%MyyxW zLtC*;Yx_uulb-MB{Ryh5hc6eDmtdkV>G_T&(_$UXdpO=|B(Cffv&b#KXEN3rM5NNAL#!(<2WdaB9HQy)G7%s*JTzTWuF@AYo+T#K z0TqIn{07OdQcp%4aqygay@PYf%XKa1(qiLW+R~xUniL zQuh(`wA*J&#n4We{bY0Dgs3o7fsYqqE|^atta@5+)grm8sdWLWBSE*2l#tKnwW9GP z6SlObt~Wlzrt|oJlSQPNmrq|fET0Ji$$=IW%MKp~d`X8-${uwzaTxVqZ0SQuZ3t_^b#eb6)*}=HKJLzHHy+`V^y6Z}z?|V|tMJh% zj8e&zm5ngq!_<@z>FOp=LaeGLt~19(0cB_oENP&U07>tl7UEmDNza28neP+DDbTR0p4 z*rD+;tyd^H!1n!HL%LH%X=pO4E>C(yxY$VAT!-jgv@%O16rR>$i#nTdEVf}ZyqI8! zpbhcUt83Rv6OeI6rho->)G4OGwERzTydX?uZRK5s| z*bxYk$w*6SDb2BfmnM2gaTh1YsC(HoYgk(?QzTvz3$b{yaI87zWDoF*bx=0utwy+y z6vyhAc|_*W$3z;zp+79sBBG#m`S9BK(An@4?j#6Y z5O;EBk~GSiMSb;CeOaPYrua_T7}}x}Jp}Y!4D1Uu%I?Hwrmm`UOnVPNlViF)k~txy zD8n4%q3NApbrAKZ9ZG^=BE20EC~+?7Nii5Y97`6@iBxugAG2rl&Sx*!^tmMb48Em^ z7CMp`b(X0gkd%Q@9}#9|nVL4%Dk5MRbG>71(w<({{1xxeUiQbL*B)Da6)H*?USa1P zPS~#&4qGh1iEu=i9p*kbMB;9Cmo~1{*9c!M^P0i!Ozk5K?*FC%@)#mJ&OA}yr^yNADfKoOdJlcI6gN) z$D0ZIXnTU-51Y897v|G%ob;nLxddmE==%vjnoGZ-t-%Y`T>1^UxEHFq^c#4odF185 zoPJ}$MyEFsI|?ynNtjE&LApkHm7mx28#mT5g%}_?p0UO~Np6KHviK>qWOngRaSVuV zFh#kkg*QPH)G)-ejR~*k!?kieD|A)xInHjFr!39*_qACV7K^d9|1wANN9RlRC_}2yaXzWv4gJ1P^h@ydq(?SP+4c_q!wIYCKdJxS zJ6ksb0$uM|iz~bj-r;4628L-(T}ARP05W|s>U1S?`QoKRhXAnvY~TbB6wuX zDoC zs>tUK1JOekeBmTJFHxx-V|F`in?S5)8BSqZ!dBSlzAYmTyZ1^3t?P(&%oFa` zJ8OK?1c2i9Q>H6azhtqjcMjm=Bn!#hI**xbbY}kO^X_D^jv8K)HXFfBoqX0V(ee3w z_lX-ukgj*8U>{sDHd&Hd2CMyS?|WLmmMeYrsUT{uNt}?SV4+bU>}$cxk_%Rh-ccRZWpWt;KYk)h56T} zMQupThg|If1xF58QkU4?&w)IoOU>Ryo9Sd%%%@f4pw*ETI;X&(98;6KA=3f^l=IXd6k!rRSm@;cBdTE#Vib1b*2 z+z|>i9j%NaOcY+%>g@j5+O3jmE45v+%A#Hn;be9a{4v%cb_iCILnM)krwv}t!5hri zo=EdLf&iz5uys--O`)iI_i{Ny!M$)6EhPAYlB2#EH1f71Ie^f#TC8P1SQZNRHQ^#- z>TTj*Uh_RQZ&ouYwkGiseVczY-Dq|{JrC7q9lxo5B}S=r29pu31JCu2*NWFW9ma~% zE&iNjx>V1kYU}*4ba*A&C)=`<-fg|}W0O5uD^}W($!LbctdL-FAn(aW>1_BlyQC6O zcenhG@X?zHd2KM#YUv=M%mvx7)^^N-kuDuPtsnu%!b>aIvdJrg30a%lGlfYFB&oXI z7M2p6buWxX7n#OXkpeFYI^UB7oFQe{DuBoma>2@hHqyq*>g9KiO`DWVohvTfIV8P! zt+pg=#j)rdFIpXATTQEDp+^&uBJGx(%_0EA_{ER%A~;(VkBr6-M;|Xuh8F=K8bD2k zX48xoU)5A}oXt3IF@s?s%GYk_ZkVenm)L$s6E#g-wGpX>ax z+|wO(l(quDUBv)d38FxAby)wfe73QNyp*P912 zjv@>sO1H-1_t!V?_nX=pgODO?hu~kAs)z6PA3}~_)^|%YDR>?Ru}rc+8H3#|_3*mw z;YmEWVh=b$bbCirm6`&NShbdz!^xJNgG>HK8L=`{_`GiExq<9uF*x<)HutmcNz?95 zv%%Xm7X_Cw7ZmkcrMf@9XGu69&h$)C^xp9;pb_|UlO#k4gKTz5@(3ppMW}MVOpt zZBibZ6|WMZCgNc&;y$+U=vD8P*Ug|Q(bcQ2``E!F#oK3njv2nY>fXmd`w!{7f{Dnt z3q&e!zY!#k6mNJ*xewb@H2jistUjY#aK-OLRd<0Fo$vA<7`cL)9(fBhVWQrtzU!K{ z)HzD|BkKPVOW7D`*Q49DG=3M~FEb7*1*E@PEIm@1c~#hj;~$;%X@;x|hpPYm=QcYp z>U6#fQ1`3fX~ItipeA88 zSCF2pYD%Ci!)Cf*k{_tdE%##7Eq=d0?bEu$&BWZlaull>`#Ho+Z&;pYfO~y6YWuLg{RLW=vD5 z?t$)p3L2Rwe6stcoo@#QWc#h`w(M3%2c(x-p@C{>rKhiM2ANjg7zi-&6U)hZMm0$N!|HfjmEJ3#+ zauaUP|FhyWQ}__vuBfgumqXDK4z3)kHhyZe!-nKrp$)O#>Tf>Ky8lXZBbDLc&%nD* zms&QEN|0GiN~s-w$6I8m!9}PGPC5S91qcqmatd_Xm%z0zC^?&Ci{t!h#h2MSr)aw%0LW6-6O{9c2wj)3Cs9C+Xd3Lai) zAF(rc+@IaB^;WsAZif*s27^@>)Vz$#+2jRjKUC(gaO!s?ImV)`@M3tr0Vu7#>gJ9@HPd= z^ILh1lqbEcp6S%WN?xNk+*;ld&b1g^_8Gk%fsl?a&xg<1Wz-x#hsZHLi4YS4(48>Bc)T5@fzeEn=hao|8g1XtB*Zc=~FcZA;24-$ZI9iP8JpKH84NqeZ(qjY(S%SAD6AK7|GP>k9vS*1(+VqQP1 zV`8HkO*Z?L-A0=51;KqGTr06=o9p;Z5K<$$;yO&w?xytU=p_~>o@!h+h5c+sS?=hB z95{4KVmv!=%vq#cVAFdhfNx#~6$oM{OeGLle%euUhgRPdKO^HgQf7E!1Wyf{g1V$d z71X5(;Erek_~dGVPp+1|Hg5pHxPe{|n}Rusi&Y9U1=3?qT}40h9KbOpD}R1aj^5Fe zE+h^rT}X=_#wBD)OMzcQ8Y|>h-gk+2Hirz-ks@-bqq!%r~2-QM-u3dX{14=(s&7>jeIep?IH%rP%zlH3-Pu=H5pVEE7 zrzr~IiY0`SZP!orH{3I1D_ts-YD;6C^zN;STw%F$cmDY^*5B13DkxE(B%=&%AvshO zLl}P+2pi-YUpGPJS>sDUqkEvd@7B`Lu!h7SJL6L>^*ZaT(wsmrD`o(d%IktZe5*u; z8hCBe$?ld`OY8Q3d1?*8T%vpXt=%_L--PNi?z!9J13Z<6j_xN7mOMrwba`@%pDg;=Nbsk^+MdL|mm1jpHAI9Yng z!-H$;*#cgL-NTN}Q%MSYaEn>FxV?^~BFgZy$@mUQ*sn zQHbni{J=PFNc)!@s*VLwMqXV2HYKda{hxLy^uw1!SH}^Un27C1Dl=k zzra$_TovOF88)(8ZV&A}Wo$x+>Lmn*Pwo zx<6}&cIXd~RDagC_ve;`{_2de00Z(oPFGo_fzu|JB1s|JA?iyvEL^u3l=%5q47j@h3m= z2ZNUr+3vf)`sDBaDJx_`w7$M_)jzAMjetUro}P;{Rsa5-JRcbKfNYIg59{;6JZi~8 z6!?v}8Obuzb(Y@QyRa{*ll_X!LlTH!9#_wsUnzhJO%lOBEIJDPXEPWBd_7{mt{8ws@TJ7Lwbvv@}=NcHq zR5T6bS!TUeuY!#E$!;$yZa=fzi#e~KK{r+t<_(RI+@4D56H&9$z#$+$rNO~6?4F<^ zyDB=i`nzUxppCt7^gSU%w=R?#-i8CxGwoRWhS`>{Xl%<@eBEu!|Iq!WK>Q(y-zoK9 zVZ{5>%uMd&@X?}rGT&mR%%ipG;LCa)8)Tq@dg?b4zT~Nw)uex*(nZ=E?ARViZc1r2 z1q(_|^{U(ysQERf1-rT|NiIbIZFaGh^L^v7{`(uO|NgH#*8kQw9P45Bqz)c+7W`kK zkT(g#bN|~XejQ<$xcR3(v`N;g%+1^L8K?{*yOO^Dvlwnw(hnioRMHJXKsEkaBWYsT z$9{qSmsiNJbD`*L3)6WZrL#ue|9QJ!0xw^Hlk|#yw_kRwJN%LK%w2+^1eRcE&7=Aq zJzvywfyL^IzyH^IzN+WaL9D4**Z4C%mt?Kg+-A>mhcB&_G=hgf8WrfzYauNKx6wU* zd&hCWp#~k4a297JiH{$qHfaJ1!9ykg@pS86y7$tjst@QhVT@Mwit11FnGr~Q(_Qo+ zzoh3en6~0{N~O1S*%0u!47;t2q#4FTTZh49kT0>@DGQI__uuczbJu<+-!^b|*G}uX zRi4c11C5{1^U!tLP<~R6d-G7fL`Q#RhmMvqdszHN4dlPBW}L;P>PvrQZ&1P;_wV<# z`_larei-t`k288M9ks@f-_jH7V#1FGjwX(>dgLc~y`|?n;>Rzr?1I$V{x5X!Me>CA zJKe!xP#6UoJ-kn|?x46!^kBb=CLr472MyiYxD^

4SR* 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 TmLwGGUXpOq<7sDb>eT-No*-U| literal 262794 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

    04Lg}KJvZxIWL~dWU3aQjL16YDv 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 diff --git a/x/wasm/keeper/testdata/reflect.wasm.v1_0 b/x/wasm/keeper/testdata/reflect.wasm.v1_0 new file mode 100644 index 0000000000000000000000000000000000000000..312f45768ddc101725a43fec43fa38b3b44719df GIT binary patch literal 262794 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

    04Lg}KJvZxIWL~dWU3aQjL16YDv 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 literal 0 HcmV?d00001 diff --git a/x/wasm/module_test.go b/x/wasm/module_test.go index f9dde8769e..8417225ade 100644 --- a/x/wasm/module_test.go +++ b/x/wasm/module_test.go @@ -35,7 +35,7 @@ type testData struct { } func setupTest(t *testing.T) testData { - ctx, keepers := CreateTestInput(t, false, "iterator,staking,stargate") + ctx, keepers := CreateTestInput(t, false, "iterator,staking,stargate,cosmwasm_1_1") cdc := keeper.MakeTestCodec(t) data := testData{ module: NewAppModule(cdc, keepers.WasmKeeper, keepers.StakingKeeper, keepers.AccountKeeper, keepers.BankKeeper), From 42758d3a13010420aa2cb6c721cd9c0457ff11f5 Mon Sep 17 00:00:00 2001 From: Alexander Peters Date: Fri, 9 Sep 2022 09:22:31 +0200 Subject: [PATCH 088/120] Rename features to availableCapabilities (#993) * Rename features to availableCapabilities as in wasmvm * Review feedback --- INTEGRATION.md | 2 +- app/app.go | 4 +- x/wasm/keeper/bench_test.go | 4 +- x/wasm/keeper/genesis_test.go | 2 +- x/wasm/keeper/ibc_test.go | 4 +- x/wasm/keeper/keeper.go | 10 +-- x/wasm/keeper/keeper_test.go | 92 +++++++++++++--------------- x/wasm/keeper/legacy_querier_test.go | 8 +-- x/wasm/keeper/options_test.go | 2 +- x/wasm/keeper/querier_test.go | 24 ++++---- x/wasm/keeper/recurse_test.go | 2 +- x/wasm/keeper/relay_test.go | 12 ++-- x/wasm/keeper/staking_test.go | 4 +- x/wasm/keeper/test_common.go | 8 +-- x/wasm/types/errors.go | 2 +- x/wasm/types/events.go | 8 +-- 16 files changed, 92 insertions(+), 96 deletions(-) diff --git a/INTEGRATION.md b/INTEGRATION.md index 2d7f508919..07000f1d5e 100644 --- a/INTEGRATION.md +++ b/INTEGRATION.md @@ -202,5 +202,5 @@ the SDK is implemented properly. Once you have tested this and are happy with the results, you can wire it up in `app.go`. Just edit [the default `NewKeeper` constructor](https://github.com/CosmWasm/wasmd/blob/v0.8.0-rc1/app/app.go#L257-L258) -to have the proper `supportedFeatures` and pass in the `CustomEncoder` and `CustomQuerier` as the last two arguments to `NewKeeper`. +to have the proper `availableCapabilities` and pass in the `CustomEncoder` and `CustomQuerier` as the last two arguments to `NewKeeper`. Now you can compile your chain and upload your custom contracts on it. \ No newline at end of file diff --git a/app/app.go b/app/app.go index a25e507607..ea10c348eb 100644 --- a/app/app.go +++ b/app/app.go @@ -507,7 +507,7 @@ func NewWasmApp( // The last arguments can contain custom message handlers, and custom query handlers, // if we want to allow any custom callbacks - supportedFeatures := "iterator,staking,stargate,cosmwasm_1_1" + availableCapabilities := "iterator,staking,stargate,cosmwasm_1_1" app.WasmKeeper = wasm.NewKeeper( appCodec, keys[wasm.StoreKey], @@ -524,7 +524,7 @@ func NewWasmApp( app.GRPCQueryRouter(), wasmDir, wasmConfig, - supportedFeatures, + availableCapabilities, wasmOpts..., ) diff --git a/x/wasm/keeper/bench_test.go b/x/wasm/keeper/bench_test.go index 1ad1693bb5..f32b39a0cb 100644 --- a/x/wasm/keeper/bench_test.go +++ b/x/wasm/keeper/bench_test.go @@ -51,7 +51,7 @@ func BenchmarkInstantiationOverhead(b *testing.B) { for name, spec := range specs { b.Run(name, func(b *testing.B) { wasmConfig := types.WasmConfig{MemoryCacheSize: 0} - ctx, keepers := createTestInput(b, false, SupportedFeatures, wasmConfig, spec.db()) + ctx, keepers := createTestInput(b, false, AvailableCapabilities, wasmConfig, spec.db()) example := InstantiateHackatomExampleContract(b, ctx, keepers) if spec.pinned { require.NoError(b, keepers.ContractKeeper.PinCode(ctx, example.CodeID)) @@ -86,7 +86,7 @@ func BenchmarkCompilation(b *testing.B) { b.Run(name, func(b *testing.B) { wasmConfig := types.WasmConfig{MemoryCacheSize: 0} db := dbm.NewMemDB() - ctx, keepers := createTestInput(b, false, SupportedFeatures, wasmConfig, db) + ctx, keepers := createTestInput(b, false, AvailableCapabilities, wasmConfig, db) // print out code size for comparisons code, err := os.ReadFile(spec.wasmFile) diff --git a/x/wasm/keeper/genesis_test.go b/x/wasm/keeper/genesis_test.go index f4e5b476aa..e5410aabb0 100644 --- a/x/wasm/keeper/genesis_test.go +++ b/x/wasm/keeper/genesis_test.go @@ -668,7 +668,7 @@ func setupKeeper(t *testing.T) (*Keeper, sdk.Context, []sdk.StoreKey) { wasmConfig := wasmTypes.DefaultWasmConfig() pk := paramskeeper.NewKeeper(encodingConfig.Marshaler, encodingConfig.Amino, keyParams, tkeyParams) - srcKeeper := NewKeeper(encodingConfig.Marshaler, keyWasm, pk.Subspace(wasmTypes.ModuleName), authkeeper.AccountKeeper{}, nil, stakingkeeper.Keeper{}, distributionkeeper.Keeper{}, nil, nil, nil, nil, nil, nil, tempDir, wasmConfig, SupportedFeatures) + srcKeeper := NewKeeper(encodingConfig.Marshaler, keyWasm, pk.Subspace(wasmTypes.ModuleName), authkeeper.AccountKeeper{}, nil, stakingkeeper.Keeper{}, distributionkeeper.Keeper{}, nil, nil, nil, nil, nil, nil, tempDir, wasmConfig, AvailableCapabilities) return &srcKeeper, ctx, []sdk.StoreKey{keyWasm, keyParams} } diff --git a/x/wasm/keeper/ibc_test.go b/x/wasm/keeper/ibc_test.go index 704e2f6c2a..ef04b583cb 100644 --- a/x/wasm/keeper/ibc_test.go +++ b/x/wasm/keeper/ibc_test.go @@ -11,14 +11,14 @@ import ( ) func TestDontBindPortNonIBCContract(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) example := InstantiateHackatomExampleContract(t, ctx, keepers) // ensure we bound the port _, _, err := keepers.IBCKeeper.PortKeeper.LookupModuleByPort(ctx, keepers.WasmKeeper.GetContractInfo(ctx, example.Contract).IBCPortID) require.Error(t, err) } func TestBindingPortForIBCContractOnInstantiate(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) example := InstantiateIBCReflectContract(t, ctx, keepers) // ensure we bound the port owner, _, err := keepers.IBCKeeper.PortKeeper.LookupModuleByPort(ctx, keepers.WasmKeeper.GetContractInfo(ctx, example.Contract).IBCPortID) require.NoError(t, err) diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index deb78d9db6..6e250e9f63 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -103,10 +103,10 @@ func NewKeeper( queryRouter GRPCQueryRouter, homeDir string, wasmConfig types.WasmConfig, - supportedFeatures string, + availableCapabilities string, opts ...Option, ) Keeper { - wasmer, err := wasmvm.NewVM(filepath.Join(homeDir, "wasm"), supportedFeatures, contractMemoryLimit, wasmConfig.ContractDebugMode, wasmConfig.MemoryCacheSize) + wasmer, err := wasmvm.NewVM(filepath.Join(homeDir, "wasm"), availableCapabilities, contractMemoryLimit, wasmConfig.ContractDebugMode, wasmConfig.MemoryCacheSize) if err != nil { panic(err) } @@ -196,7 +196,7 @@ func (k Keeper) create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, return 0, sdkerrors.Wrap(types.ErrCreateFailed, err.Error()) } codeID = k.autoIncrementID(ctx, types.KeyLastCodeID) - k.Logger(ctx).Debug("storing new contract", "features", report.RequiredFeatures, "code_id", codeID) + k.Logger(ctx).Debug("storing new contract", "capabilities", report.RequiredCapabilities, "code_id", codeID) codeInfo := types.NewCodeInfo(checksum, creator, *instantiateAccess) k.storeCodeInfo(ctx, codeID, codeInfo) @@ -204,8 +204,8 @@ func (k Keeper) create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, types.EventTypeStoreCode, sdk.NewAttribute(types.AttributeKeyCodeID, strconv.FormatUint(codeID, 10)), ) - for _, f := range strings.Split(report.RequiredFeatures, ",") { - evt.AppendAttributes(sdk.NewAttribute(types.AttributeKeyFeature, strings.TrimSpace(f))) + for _, f := range strings.Split(report.RequiredCapabilities, ",") { + evt.AppendAttributes(sdk.NewAttribute(types.AttributeKeyRequiredCapability, strings.TrimSpace(f))) } ctx.EventManager().EmitEvent(evt) diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index 5b3fc38073..0cde32592f 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -4,27 +4,23 @@ import ( "bytes" "encoding/json" "errors" - fuzz "github.com/google/gofuzz" - "github.com/tendermint/tendermint/libs/rand" "math" "os" "testing" "time" - distributiontypes "github.com/cosmos/cosmos-sdk/x/distribution/types" - wasmvm "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" - stypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - + distributiontypes "github.com/cosmos/cosmos-sdk/x/distribution/types" + fuzz "github.com/google/gofuzz" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - + "github.com/tendermint/tendermint/libs/rand" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" @@ -42,15 +38,15 @@ func init() { var hackatomWasm []byte -const SupportedFeatures = "iterator,staking,stargate,cosmwasm_1_1" +const AvailableCapabilities = "iterator,staking,stargate,cosmwasm_1_1" func TestNewKeeper(t *testing.T) { - _, keepers := CreateTestInput(t, false, SupportedFeatures) + _, keepers := CreateTestInput(t, false, AvailableCapabilities) require.NotNil(t, keepers.ContractKeeper) } func TestCreateSuccess(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -70,14 +66,14 @@ func TestCreateSuccess(t *testing.T) { } func TestCreateNilCreatorAddress(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) _, err := keepers.ContractKeeper.Create(ctx, nil, hackatomWasm, nil) require.Error(t, err, "nil creator is not allowed") } func TestCreateNilWasmCode(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) @@ -86,7 +82,7 @@ func TestCreateNilWasmCode(t *testing.T) { } func TestCreateInvalidWasmCode(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) @@ -123,7 +119,7 @@ func TestCreateStoresInstantiatePermission(t *testing.T) { } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper keepers.WasmKeeper.SetParams(ctx, types.Params{ CodeUploadAccess: types.AllowEverybody, @@ -142,7 +138,7 @@ func TestCreateStoresInstantiatePermission(t *testing.T) { } func TestCreateWithParamPermissions(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -188,7 +184,7 @@ func TestCreateWithParamPermissions(t *testing.T) { // ensure that the user cannot set the code instantiate permission to something more permissive // than the default func TestEnforceValidPermissionsOnCreate(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper contractKeeper := keepers.ContractKeeper @@ -264,7 +260,7 @@ func TestEnforceValidPermissionsOnCreate(t *testing.T) { } func TestCreateDuplicate(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -290,7 +286,7 @@ func TestCreateDuplicate(t *testing.T) { } func TestCreateWithSimulation(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) ctx = ctx.WithBlockHeader(tmproto.Header{Height: 1}). WithGasMeter(stypes.NewInfiniteGasMeter()) @@ -304,7 +300,7 @@ func TestCreateWithSimulation(t *testing.T) { require.Equal(t, uint64(1), contractID) // then try to create it in non-simulation mode (should not fail) - ctx, keepers = CreateTestInput(t, false, SupportedFeatures) + ctx, keepers = CreateTestInput(t, false, AvailableCapabilities) ctx = ctx.WithGasMeter(sdk.NewGasMeter(10_000_000)) creator = keepers.Faucet.NewFundedAccount(ctx, deposit...) contractID, err = keepers.ContractKeeper.Create(ctx, creator, hackatomWasm, nil) @@ -344,7 +340,7 @@ func TestIsSimulationMode(t *testing.T) { } func TestCreateWithGzippedPayload(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -363,7 +359,7 @@ func TestCreateWithGzippedPayload(t *testing.T) { } func TestCreateWithBrokenGzippedPayload(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -380,7 +376,7 @@ func TestCreateWithBrokenGzippedPayload(t *testing.T) { } func TestInstantiate(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -470,7 +466,7 @@ func TestInstantiateWithDeposit(t *testing.T) { } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) accKeeper, bankKeeper, keeper := keepers.AccountKeeper, keepers.BankKeeper, keepers.ContractKeeper if spec.fundAddr { @@ -537,7 +533,7 @@ func TestInstantiateWithPermissions(t *testing.T) { } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) accKeeper, bankKeeper, keeper := keepers.AccountKeeper, keepers.BankKeeper, keepers.ContractKeeper fundAccounts(t, ctx, accKeeper, bankKeeper, spec.srcActor, deposit) @@ -551,7 +547,7 @@ func TestInstantiateWithPermissions(t *testing.T) { } func TestInstantiateWithNonExistingCodeID(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) @@ -567,7 +563,7 @@ func TestInstantiateWithNonExistingCodeID(t *testing.T) { } func TestInstantiateWithContractDataResponse(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) wasmerMock := &wasmtesting.MockWasmer{ InstantiateFn: func(codeID wasmvm.Checksum, env wasmvmtypes.Env, info wasmvmtypes.MessageInfo, initMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.Response, uint64, error) { @@ -584,7 +580,7 @@ func TestInstantiateWithContractDataResponse(t *testing.T) { } func TestExecute(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -721,7 +717,7 @@ func TestExecuteWithDeposit(t *testing.T) { } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) accKeeper, bankKeeper, keeper := keepers.AccountKeeper, keepers.BankKeeper, keepers.ContractKeeper if spec.newBankParams != nil { bankKeeper.SetParams(ctx, *spec.newBankParams) @@ -755,7 +751,7 @@ func TestExecuteWithDeposit(t *testing.T) { } func TestExecuteWithNonExistingAddress(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -768,7 +764,7 @@ func TestExecuteWithNonExistingAddress(t *testing.T) { } func TestExecuteWithPanic(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -799,7 +795,7 @@ func TestExecuteWithPanic(t *testing.T) { } func TestExecuteWithCpuLoop(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -840,7 +836,7 @@ func TestExecuteWithCpuLoop(t *testing.T) { } func TestExecuteWithStorageLoop(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -881,7 +877,7 @@ func TestExecuteWithStorageLoop(t *testing.T) { } func TestMigrate(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -1075,7 +1071,7 @@ func TestMigrate(t *testing.T) { } func TestMigrateReplacesTheSecondIndex(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) example := InstantiateHackatomExampleContract(t, ctx, keepers) // then assert a second index exists @@ -1109,7 +1105,7 @@ func TestMigrateReplacesTheSecondIndex(t *testing.T) { } func TestMigrateWithDispatchedMessage(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -1194,7 +1190,7 @@ func TestMigrateWithDispatchedMessage(t *testing.T) { } func TestIterateContractsByCode(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) k, c := keepers.WasmKeeper, keepers.ContractKeeper example1 := InstantiateHackatomExampleContract(t, ctx, keepers) ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) @@ -1240,7 +1236,7 @@ func TestIterateContractsByCodeWithMigration(t *testing.T) { return &wasmvmtypes.Response{}, 1, nil }} wasmtesting.MakeInstantiable(&mockWasmVM) - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, WithWasmEngine(&mockWasmVM)) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, WithWasmEngine(&mockWasmVM)) k, c := keepers.WasmKeeper, keepers.ContractKeeper example1 := InstantiateHackatomExampleContract(t, ctx, keepers) ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) @@ -1279,7 +1275,7 @@ type stealFundsMsg struct { } func TestSudo(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -1362,7 +1358,7 @@ func mustMarshal(t *testing.T, r interface{}) []byte { } func TestUpdateContractAdmin(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -1430,7 +1426,7 @@ func TestUpdateContractAdmin(t *testing.T) { } func TestClearContractAdmin(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -1493,7 +1489,7 @@ func TestClearContractAdmin(t *testing.T) { } func TestPinCode(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) k := keepers.WasmKeeper var capturedChecksums []wasmvm.Checksum @@ -1520,7 +1516,7 @@ func TestPinCode(t *testing.T) { } func TestUnpinCode(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) k := keepers.WasmKeeper var capturedChecksums []wasmvm.Checksum @@ -1554,7 +1550,7 @@ func TestUnpinCode(t *testing.T) { } func TestInitializePinnedCodes(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) k := keepers.WasmKeeper var capturedChecksums []wasmvm.Checksum @@ -1594,7 +1590,7 @@ func TestPinnedContractLoops(t *testing.T) { // a pinned contract that calls itself via submessages should terminate with an // error at some point - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, WithWasmEngine(&mock)) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, WithWasmEngine(&mock)) k := keepers.WasmKeeper example := SeedNewContractInstance(t, ctx, keepers, &mock) @@ -1710,7 +1706,7 @@ func TestNewDefaultWasmVMContractResponseHandler(t *testing.T) { } func TestReply(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) k := keepers.WasmKeeper var mock wasmtesting.MockWasmer wasmtesting.MakeInstantiable(&mock) @@ -1779,7 +1775,7 @@ func TestReply(t *testing.T) { } func TestQueryIsolation(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) k := keepers.WasmKeeper var mock wasmtesting.MockWasmer wasmtesting.MakeInstantiable(&mock) @@ -1857,7 +1853,7 @@ func TestBuildContractAddress(t *testing.T) { } func TestSetAccessConfig(t *testing.T) { - parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities) k := keepers.WasmKeeper creatorAddr := RandomAccountAddress(t) nonCreatorAddr := RandomAccountAddress(t) @@ -1940,7 +1936,7 @@ func TestSetAccessConfig(t *testing.T) { } func TestAppendToContractHistory(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) var contractAddr sdk.AccAddress = rand.Bytes(types.ContractAddrLen) var orderedEntries []types.ContractCodeHistoryEntry diff --git a/x/wasm/keeper/legacy_querier_test.go b/x/wasm/keeper/legacy_querier_test.go index dac7eaa784..1f22a5082c 100644 --- a/x/wasm/keeper/legacy_querier_test.go +++ b/x/wasm/keeper/legacy_querier_test.go @@ -17,7 +17,7 @@ import ( ) func TestLegacyQueryContractState(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -154,7 +154,7 @@ func TestLegacyQueryContractState(t *testing.T) { } func TestLegacyQueryContractListByCodeOrdering(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 1000000)) @@ -218,7 +218,7 @@ func TestLegacyQueryContractListByCodeOrdering(t *testing.T) { } func TestLegacyQueryContractHistory(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper var otherAddr sdk.AccAddress = bytes.Repeat([]byte{0x2}, types.ContractAddrLen) @@ -329,7 +329,7 @@ func TestLegacyQueryCodeList(t *testing.T) { for msg, spec := range specs { t.Run(msg, func(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper for _, codeID := range spec.codeIDs { diff --git a/x/wasm/keeper/options_test.go b/x/wasm/keeper/options_test.go index 6e50c7ba96..07195e0468 100644 --- a/x/wasm/keeper/options_test.go +++ b/x/wasm/keeper/options_test.go @@ -84,7 +84,7 @@ func TestConstructorOptions(t *testing.T) { } for name, spec := range specs { t.Run(name, func(t *testing.T) { - k := NewKeeper(nil, nil, paramtypes.NewSubspace(nil, nil, nil, nil, ""), authkeeper.AccountKeeper{}, nil, stakingkeeper.Keeper{}, distributionkeeper.Keeper{}, nil, nil, nil, nil, nil, nil, "tempDir", types.DefaultWasmConfig(), SupportedFeatures, spec.srcOpt) + k := NewKeeper(nil, nil, paramtypes.NewSubspace(nil, nil, nil, nil, ""), authkeeper.AccountKeeper{}, nil, stakingkeeper.Keeper{}, distributionkeeper.Keeper{}, nil, nil, nil, nil, nil, nil, "tempDir", types.DefaultWasmConfig(), AvailableCapabilities, spec.srcOpt) spec.verify(t, k) }) } diff --git a/x/wasm/keeper/querier_test.go b/x/wasm/keeper/querier_test.go index 88ee6d3aa4..21df7f94fd 100644 --- a/x/wasm/keeper/querier_test.go +++ b/x/wasm/keeper/querier_test.go @@ -27,7 +27,7 @@ import ( ) func TestQueryAllContractState(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper exampleContract := InstantiateHackatomExampleContract(t, ctx, keepers) @@ -114,7 +114,7 @@ func TestQueryAllContractState(t *testing.T) { } func TestQuerySmartContractState(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper exampleContract := InstantiateHackatomExampleContract(t, ctx, keepers) @@ -157,7 +157,7 @@ func TestQuerySmartContractState(t *testing.T) { } func TestQuerySmartContractPanics(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) contractAddr := BuildContractAddress(1, 1) keepers.WasmKeeper.storeCodeInfo(ctx, 1, types.CodeInfo{}) keepers.WasmKeeper.storeContractInfo(ctx, contractAddr, &types.ContractInfo{ @@ -202,7 +202,7 @@ func TestQuerySmartContractPanics(t *testing.T) { } func TestQueryRawContractState(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper exampleContract := InstantiateHackatomExampleContract(t, ctx, keepers) @@ -257,7 +257,7 @@ func TestQueryRawContractState(t *testing.T) { } func TestQueryContractListByCodeOrdering(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 1000000)) @@ -313,7 +313,7 @@ func TestQueryContractListByCodeOrdering(t *testing.T) { } func TestQueryContractHistory(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper var ( @@ -457,7 +457,7 @@ func TestQueryCodeList(t *testing.T) { wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper specs := map[string]struct { @@ -533,7 +533,7 @@ func TestQueryContractInfo(t *testing.T) { contractAddr = RandomAccountAddress(t) anyDate = time.Now().UTC() ) - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) // register an example extension. must be protobuf keepers.EncodingConfig.InterfaceRegistry.RegisterImplementations( (*types.ContractInfoExtension)(nil), @@ -599,7 +599,7 @@ func TestQueryContractInfo(t *testing.T) { } func TestQueryPinnedCodes(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper exampleContract1 := InstantiateHackatomExampleContract(t, ctx, keepers) @@ -656,7 +656,7 @@ func TestQueryPinnedCodes(t *testing.T) { } func TestQueryParams(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper q := Querier(keeper) @@ -687,7 +687,7 @@ func TestQueryCodeInfo(t *testing.T) { wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper anyAddress, err := sdk.AccAddressFromBech32("cosmos100dejzacpanrldpjjwksjm62shqhyss44jf5xz") @@ -742,7 +742,7 @@ func TestQueryCodeInfoList(t *testing.T) { wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) - ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper anyAddress, err := sdk.AccAddressFromBech32("cosmos100dejzacpanrldpjjwksjm62shqhyss44jf5xz") diff --git a/x/wasm/keeper/recurse_test.go b/x/wasm/keeper/recurse_test.go index 18778a52d7..5a16da7878 100644 --- a/x/wasm/keeper/recurse_test.go +++ b/x/wasm/keeper/recurse_test.go @@ -45,7 +45,7 @@ func initRecurseContract(t *testing.T) (contract sdk.AccAddress, creator sdk.Acc return realWasmQuerier.HandleQuery(ctx, caller, request) }) } - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, WithQueryHandlerDecorator(countingQuerierDec)) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, WithQueryHandlerDecorator(countingQuerierDec)) keeper = keepers.WasmKeeper exampleContract := InstantiateHackatomExampleContract(t, ctx, keepers) return exampleContract.Contract, exampleContract.CreatorAddr, ctx, keeper diff --git a/x/wasm/keeper/relay_test.go b/x/wasm/keeper/relay_test.go index dd9c3da231..a1d2819e50 100644 --- a/x/wasm/keeper/relay_test.go +++ b/x/wasm/keeper/relay_test.go @@ -20,7 +20,7 @@ func TestOnOpenChannel(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) messenger := &wasmtesting.MockMessageHandler{} - parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, WithMessageHandler(messenger)) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, WithMessageHandler(messenger)) example := SeedNewContractInstance(t, parentCtx, keepers, &m) const myContractGas = 40 @@ -90,7 +90,7 @@ func TestOnConnectChannel(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) messenger := &wasmtesting.MockMessageHandler{} - parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, WithMessageHandler(messenger)) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, WithMessageHandler(messenger)) example := SeedNewContractInstance(t, parentCtx, keepers, &m) const myContractGas = 40 @@ -201,7 +201,7 @@ func TestOnCloseChannel(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) messenger := &wasmtesting.MockMessageHandler{} - parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, WithMessageHandler(messenger)) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, WithMessageHandler(messenger)) example := SeedNewContractInstance(t, parentCtx, keepers, &m) const myContractGas = 40 @@ -311,7 +311,7 @@ func TestOnRecvPacket(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) messenger := &wasmtesting.MockMessageHandler{} - parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, WithMessageHandler(messenger)) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, WithMessageHandler(messenger)) example := SeedNewContractInstance(t, parentCtx, keepers, &m) const myContractGas = 40 const storageCosts = sdk.Gas(2903) @@ -473,7 +473,7 @@ func TestOnAckPacket(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) messenger := &wasmtesting.MockMessageHandler{} - parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, WithMessageHandler(messenger)) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, WithMessageHandler(messenger)) example := SeedNewContractInstance(t, parentCtx, keepers, &m) const myContractGas = 40 @@ -578,7 +578,7 @@ func TestOnTimeoutPacket(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) messenger := &wasmtesting.MockMessageHandler{} - parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, WithMessageHandler(messenger)) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, WithMessageHandler(messenger)) example := SeedNewContractInstance(t, parentCtx, keepers, &m) const myContractGas = 40 diff --git a/x/wasm/keeper/staking_test.go b/x/wasm/keeper/staking_test.go index 633cbcf1fa..15f0e0ac70 100644 --- a/x/wasm/keeper/staking_test.go +++ b/x/wasm/keeper/staking_test.go @@ -93,7 +93,7 @@ type InvestmentResponse struct { } func TestInitializeStaking(t *testing.T) { - ctx, k := CreateTestInput(t, false, SupportedFeatures) + ctx, k := CreateTestInput(t, false, AvailableCapabilities) accKeeper, stakingKeeper, keeper, bankKeeper := k.AccountKeeper, k.StakingKeeper, k.ContractKeeper, k.BankKeeper valAddr := addValidator(t, ctx, stakingKeeper, k.Faucet, sdk.NewInt64Coin("stake", 1234567)) @@ -168,7 +168,7 @@ type initInfo struct { } func initializeStaking(t *testing.T) initInfo { - ctx, k := CreateTestInput(t, false, SupportedFeatures) + ctx, k := CreateTestInput(t, false, AvailableCapabilities) accKeeper, stakingKeeper, keeper, bankKeeper := k.AccountKeeper, k.StakingKeeper, k.WasmKeeper, k.BankKeeper valAddr := addValidator(t, ctx, stakingKeeper, k.Faucet, sdk.NewInt64Coin("stake", 1000000)) diff --git a/x/wasm/keeper/test_common.go b/x/wasm/keeper/test_common.go index 9fedc3e7f1..8b0f782047 100644 --- a/x/wasm/keeper/test_common.go +++ b/x/wasm/keeper/test_common.go @@ -189,16 +189,16 @@ func CreateDefaultTestInput(t testing.TB) (sdk.Context, TestKeepers) { } // CreateTestInput encoders can be nil to accept the defaults, or set it to override some of the message handlers (like default) -func CreateTestInput(t testing.TB, isCheckTx bool, supportedFeatures string, opts ...Option) (sdk.Context, TestKeepers) { +func CreateTestInput(t testing.TB, isCheckTx bool, availableCapabilities string, opts ...Option) (sdk.Context, TestKeepers) { // Load default wasm config - return createTestInput(t, isCheckTx, supportedFeatures, types.DefaultWasmConfig(), dbm.NewMemDB(), opts...) + return createTestInput(t, isCheckTx, availableCapabilities, types.DefaultWasmConfig(), dbm.NewMemDB(), opts...) } // encoders can be nil to accept the defaults, or set it to override some of the message handlers (like default) func createTestInput( t testing.TB, isCheckTx bool, - supportedFeatures string, + availableCapabilities string, wasmConfig types.WasmConfig, db dbm.DB, opts ...Option, @@ -386,7 +386,7 @@ func createTestInput( querier, tempDir, wasmConfig, - supportedFeatures, + availableCapabilities, opts..., ) keeper.SetParams(ctx, types.DefaultParams()) diff --git a/x/wasm/types/errors.go b/x/wasm/types/errors.go index 50814f8131..7accd72bcb 100644 --- a/x/wasm/types/errors.go +++ b/x/wasm/types/errors.go @@ -55,7 +55,7 @@ var ( // ErrMaxIBCChannels error for maximum number of ibc channels reached ErrMaxIBCChannels = sdkErrors.Register(DefaultCodespace, 16, "max transfer channels") - // ErrUnsupportedForContract error when a feature is used that is not supported for/ by this contract + // ErrUnsupportedForContract error when a capability is used that is not supported for/ by this contract ErrUnsupportedForContract = sdkErrors.Register(DefaultCodespace, 17, "unsupported for this contract") // ErrPinContractFailed error for pinning contract failures diff --git a/x/wasm/types/events.go b/x/wasm/types/events.go index 0c32476f54..251b95f042 100644 --- a/x/wasm/types/events.go +++ b/x/wasm/types/events.go @@ -21,8 +21,8 @@ const ( const ( AttributeReservedPrefix = "_" - AttributeKeyContractAddr = "_contract_address" - AttributeKeyCodeID = "code_id" - AttributeKeyResultDataHex = "result" - AttributeKeyFeature = "feature" + AttributeKeyContractAddr = "_contract_address" + AttributeKeyCodeID = "code_id" + AttributeKeyResultDataHex = "result" + AttributeKeyRequiredCapability = "required_capability" ) From eb1c95a9a7075063f8ac808886aa2273fa221c1e Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Fri, 9 Sep 2022 11:20:53 +0200 Subject: [PATCH 089/120] Link to medium article --- INTEGRATION.md | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/INTEGRATION.md b/INTEGRATION.md index 07000f1d5e..b336ab9085 100644 --- a/INTEGRATION.md +++ b/INTEGRATION.md @@ -3,7 +3,10 @@ # Integration If you want to use Wasm in your own app, here is how you can get this working -quickly and easily. First, check to make sure you fit the pre-requisites, +quickly and easily. +First start with This [article](https://medium.com/cosmwasm/cosmwasm-for-ctos-iv-native-integrations-713140bf75fc) +in the "CosmWasm for CTOs" series that gives you a high level view. +Then check to make sure you fit the pre-requisites, then integrate the `x/wasm` module as described below, and finally, you can add custom messages and queries to your custom Go/SDK modules, exposing them to any chain-specific contract. @@ -14,26 +17,18 @@ The pre-requisites of integrating `x/wasm` into your custom app is to be using a compatible version of the Cosmos SDK, and to accept some limits to the hardware it runs on. -| wasmd | Cosmos SDK | -|:------:|:-----------:| -| v0.24 | v0.45.0 | -| v0.23 | v0.45.0 | -| v0.22 | v0.45.0 | -| v0.21 | v0.42.x | -| v0.20 | v0.42.x | -| v0.19 | v0.42.x | -| v0.18 | v0.42.x | -| v0.17 | v0.42.x | -| v0.16 | v0.42.x | -| v0.15 | v0.41.x | -| v0.14 | v0.40.x | -| v0.13 | v0.40.0-rc3 | -| v0.12 | v0.40.0-rc3 | -| v0.11 | v0.39.1 | -| v0.10 | v0.39.1 | -| v0.9 | v0.38.3 | -| v0.8 | v0.38.3 | -| v0.7 | v0.38.3 | +| wasmd | Cosmos SDK | +|:-----:|:----------:| +| v0.29 | v0.45.8 | +| v0.28 | v0.45.5 | +| v0.27 | v0.45.4 | +| v0.26 | v0.45.1 | +| v0.25 | v0.45.1 | +| v0.24 | v0.45.0 | +| v0.23 | v0.45.0 | +| v0.22 | v0.45.0 | +| v0.21 | v0.42.x | + We currently only support Intel/AMD64 CPUs and OSX or Linux. For Linux, the standard build commands work for `glibc` systems (Ubuntu, Debian, CentOS, etc). If you wish to compile From ccb2fdd0b6ed849eb94d58e0174f4fc34bce336c Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Fri, 26 Aug 2022 15:06:03 +0200 Subject: [PATCH 090/120] Make contract addresses predictable --- app/test_helpers.go | 23 + docs/proto/proto-docs.md | 1 + proto/cosmwasm/wasm/v1/tx.proto | 2 + x/wasm/alias.go | 1 - x/wasm/client/cli/genesis_msg.go | 76 +-- x/wasm/client/cli/genesis_msg_test.go | 119 ++-- x/wasm/client/cli/query.go | 32 ++ x/wasm/genesis_test.go | 4 +- x/wasm/ibctesting/wasm.go | 1 + x/wasm/keeper/contract_keeper.go | 4 +- x/wasm/keeper/genesis.go | 8 +- x/wasm/keeper/genesis_test.go | 99 ++-- x/wasm/keeper/handler_plugin_test.go | 2 +- x/wasm/keeper/ibc_test.go | 4 +- x/wasm/keeper/keeper.go | 212 +++++-- x/wasm/keeper/keeper_test.go | 522 +++++++++++++----- x/wasm/keeper/legacy_querier_test.go | 12 +- x/wasm/keeper/migrations.go | 27 + x/wasm/keeper/migrations_test.go | 20 + x/wasm/keeper/msg_server.go | 5 +- x/wasm/keeper/msg_server_integration_test.go | 46 ++ x/wasm/keeper/options.go | 58 ++ x/wasm/keeper/options_test.go | 32 +- x/wasm/keeper/proposal_handler.go | 2 +- x/wasm/keeper/proposal_integration_test.go | 26 +- x/wasm/keeper/querier_test.go | 11 +- x/wasm/keeper/reflect_test.go | 34 +- x/wasm/keeper/snapshotter_integration_test.go | 5 +- x/wasm/keeper/staking_test.go | 24 +- x/wasm/keeper/submsg_test.go | 20 +- x/wasm/keeper/test_common.go | 64 ++- x/wasm/module.go | 7 +- x/wasm/module_test.go | 23 +- x/wasm/simulation/genesis.go | 1 - x/wasm/types/events.go | 1 + x/wasm/types/exported_keepers.go | 2 +- x/wasm/types/keys.go | 3 +- x/wasm/types/proposal.go | 2 +- x/wasm/types/tx.go | 2 +- x/wasm/types/tx.pb.go | 145 +++-- x/wasm/types/tx_test.go | 1 + x/wasm/types/types.go | 2 +- x/wasm/types/validation.go | 3 +- 43 files changed, 1175 insertions(+), 513 deletions(-) create mode 100644 x/wasm/keeper/migrations.go create mode 100644 x/wasm/keeper/migrations_test.go create mode 100644 x/wasm/keeper/msg_server_integration_test.go diff --git a/app/test_helpers.go b/app/test_helpers.go index ccf49656a6..e37db12789 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -71,6 +71,29 @@ func setup(t testing.TB, withGenesis bool, invCheckPeriod uint, opts ...wasm.Opt return app, GenesisState{} } +// Setup initializes a new WasmApp with DefaultNodeHome for integration tests +func Setup(isCheckTx bool, opts ...wasm.Option) *WasmApp { + db := dbm.NewMemDB() + app := NewWasmApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, DefaultNodeHome, 5, MakeEncodingConfig(), wasm.EnableAllProposals, EmptyBaseAppOptions{}, opts) + + if !isCheckTx { + genesisState := NewDefaultGenesisState() + stateBytes, err := json.MarshalIndent(genesisState, "", " ") + if err != nil { + panic(err) + } + + app.InitChain( + abci.RequestInitChain{ + Validators: []abci.ValidatorUpdate{}, + ConsensusParams: DefaultConsensusParams, + AppStateBytes: stateBytes, + }, + ) + } + return app +} + // SetupWithGenesisValSet initializes a new WasmApp with a validator set and genesis accounts // that also act as delegators. For simplicity, each validator is bonded with a delegation // of one consensus engine unit (10^6) in the default token of the WasmApp from first genesis diff --git a/docs/proto/proto-docs.md b/docs/proto/proto-docs.md index e62564dc73..584398a709 100644 --- a/docs/proto/proto-docs.md +++ b/docs/proto/proto-docs.md @@ -430,6 +430,7 @@ MsgStoreCodeResponse returns store result data. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | `code_id` | [uint64](#uint64) | | CodeID is the reference to the stored WASM code | +| `checksum` | [bytes](#bytes) | | Checksum is the sha256 hash of the stored code | diff --git a/proto/cosmwasm/wasm/v1/tx.proto b/proto/cosmwasm/wasm/v1/tx.proto index 8295907eb8..f1eb8fec68 100644 --- a/proto/cosmwasm/wasm/v1/tx.proto +++ b/proto/cosmwasm/wasm/v1/tx.proto @@ -41,6 +41,8 @@ message MsgStoreCode { message MsgStoreCodeResponse { // CodeID is the reference to the stored WASM code uint64 code_id = 1 [ (gogoproto.customname) = "CodeID" ]; + // Checksum is the sha256 hash of the stored code + bytes checksum = 2; } // MsgInstantiateContract create a new smart contract instance for the given diff --git a/x/wasm/alias.go b/x/wasm/alias.go index 67a79ac541..09f0e7af00 100644 --- a/x/wasm/alias.go +++ b/x/wasm/alias.go @@ -86,7 +86,6 @@ var ( ErrQueryFailed = types.ErrQueryFailed ErrInvalidMsg = types.ErrInvalidMsg KeyLastCodeID = types.KeyLastCodeID - KeyLastInstanceID = types.KeyLastInstanceID CodeKeyPrefix = types.CodeKeyPrefix ContractKeyPrefix = types.ContractKeyPrefix ContractStorePrefix = types.ContractStorePrefix diff --git a/x/wasm/client/cli/genesis_msg.go b/x/wasm/client/cli/genesis_msg.go index 7ed5a7f290..d7936e0145 100644 --- a/x/wasm/client/cli/genesis_msg.go +++ b/x/wasm/client/cli/genesis_msg.go @@ -103,7 +103,7 @@ func GenesisInstantiateContractCmd(defaultNodeHome string, genesisMutator Genesi } return genesisMutator.AlterWasmModuleState(cmd, func(state *types.GenesisState, appState map[string]json.RawMessage) error { - // simple sanity check that sender has some balance although it may be consumed by appState previous message already + // simple sanity check that sender has some balance, although it may be consumed by appState previous message already switch ok, err := hasAccountBalance(cmd, appState, senderAddr, msg.Funds); { case err != nil: return err @@ -112,7 +112,7 @@ func GenesisInstantiateContractCmd(defaultNodeHome string, genesisMutator Genesi } // does code id exists? - codeInfos, err := GetAllCodes(state) + codeInfos := GetAllCodes(state) if err != nil { return err } @@ -171,7 +171,7 @@ func GenesisExecuteContractCmd(defaultNodeHome string, genesisMutator GenesisMut } return genesisMutator.AlterWasmModuleState(cmd, func(state *types.GenesisState, appState map[string]json.RawMessage) error { - // simple sanity check that sender has some balance although it may be consumed by appState previous message already + // simple sanity check that sender has some balance, although it may be consumed by appState previous message already switch ok, err := hasAccountBalance(cmd, appState, senderAddr, msg.Funds); { case err != nil: return err @@ -211,7 +211,7 @@ func GenesisListCodesCmd(defaultNodeHome string, genReader GenesisReader) *cobra if err != nil { return err } - all, err := GetAllCodes(g.WasmModuleState) + all := GetAllCodes(g.WasmModuleState) if err != nil { return err } @@ -236,7 +236,10 @@ func GenesisListContractsCmd(defaultNodeHome string, genReader GenesisReader) *c return err } state := g.WasmModuleState - all := GetAllContracts(state) + all, err := GetAllContracts(state) + if err != nil { + return err + } return printJSONOutput(cmd, all) }, } @@ -245,7 +248,7 @@ func GenesisListContractsCmd(defaultNodeHome string, genReader GenesisReader) *c return cmd } -// clientCtx marshaller works only with proto or bytes so we marshal the output ourself +// clientCtx marshaller works only with proto or bytes, so we marshal the output ourselves func printJSONOutput(cmd *cobra.Command, obj interface{}) error { clientCtx := client.GetClientContextFromCmd(cmd) bz, err := json.MarshalIndent(obj, "", " ") @@ -260,7 +263,7 @@ type CodeMeta struct { Info types.CodeInfo `json:"info"` } -func GetAllCodes(state *types.GenesisState) ([]CodeMeta, error) { +func GetAllCodes(state *types.GenesisState) []CodeMeta { all := make([]CodeMeta, len(state.Codes)) for i, c := range state.Codes { all[i] = CodeMeta{ @@ -277,10 +280,7 @@ func GetAllCodes(state *types.GenesisState) ([]CodeMeta, error) { accessConfig = *msg.InstantiatePermission } else { // default - creator, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - return nil, fmt.Errorf("sender: %s", err) - } + creator := sdk.MustAccAddressFromBech32(msg.Sender) accessConfig = state.Params.InstantiateDefaultPermission.With(creator) } hash := sha256.Sum256(msg.WASMByteCode) @@ -295,7 +295,7 @@ func GetAllCodes(state *types.GenesisState) ([]CodeMeta, error) { seq++ } } - return all, nil + return all } type ContractMeta struct { @@ -303,7 +303,18 @@ type ContractMeta struct { Info types.ContractInfo `json:"info"` } -func GetAllContracts(state *types.GenesisState) []ContractMeta { +// returns nil when not found +func codeHashByID(state *types.GenesisState, codeID uint64) []byte { + codes := GetAllCodes(state) + for _, v := range codes { + if v.CodeID == codeID { + return v.Info.CodeHash + } + } + return nil +} + +func GetAllContracts(state *types.GenesisState) ([]ContractMeta, error) { all := make([]ContractMeta, len(state.Contracts)) for i, c := range state.Contracts { all[i] = ContractMeta{ @@ -312,11 +323,18 @@ func GetAllContracts(state *types.GenesisState) []ContractMeta { } } // add inflight - seq := contractSeqValue(state) for _, m := range state.GenMsgs { if msg := m.GetInstantiateContract(); msg != nil { + senderAddr, err := sdk.AccAddressFromBech32(msg.Sender) + if err != nil { + panic(fmt.Sprintf("unsupported address %q: %s", msg.Sender, err)) + } + codeHash := codeHashByID(state, msg.CodeID) + if codeHash == nil { + return nil, types.ErrNotFound.Wrapf("hash for code-id: %d", msg.CodeID) + } all = append(all, ContractMeta{ - ContractAddress: keeper.BuildContractAddress(msg.CodeID, seq).String(), + ContractAddress: keeper.BuildContractAddress(codeHash, senderAddr, msg.Label).String(), Info: types.ContractInfo{ CodeID: msg.CodeID, Creator: msg.Sender, @@ -324,10 +342,9 @@ func GetAllContracts(state *types.GenesisState) []ContractMeta { Label: msg.Label, }, }) - seq++ } } - return all + return all, nil } func hasAccountBalance(cmd *cobra.Command, appState map[string]json.RawMessage, sender sdk.AccAddress, coins sdk.Coins) (bool, error) { @@ -354,13 +371,19 @@ func hasContract(state *types.GenesisState, contractAddr string) bool { return true } } - seq := contractSeqValue(state) for _, m := range state.GenMsgs { if msg := m.GetInstantiateContract(); msg != nil { - if keeper.BuildContractAddress(msg.CodeID, seq).String() == contractAddr { + senderAddr, err := sdk.AccAddressFromBech32(msg.Sender) + if err != nil { + panic(fmt.Sprintf("unsupported address %q: %s", msg.Sender, err)) + } + hash := codeHashByID(state, msg.CodeID) + if hash == nil { + panic(fmt.Sprintf("unknown code id: %d", msg.CodeID)) + } + if keeper.BuildContractAddress(hash, senderAddr, msg.Label).String() == contractAddr { return true } - seq++ } } return false @@ -453,19 +476,6 @@ func (x DefaultGenesisIO) AlterWasmModuleState(cmd *cobra.Command, callback func return genutil.ExportGenesisFile(g.GenDoc, g.GenesisFile) } -// contractSeqValue reads the contract sequence from the genesis or -// returns default start value used in the keeper -func contractSeqValue(state *types.GenesisState) uint64 { - var seq uint64 = 1 - for _, s := range state.Sequences { - if bytes.Equal(s.IDKey, types.KeyLastInstanceID) { - seq = s.Value - break - } - } - return seq -} - // codeSeqValue reads the code sequence from the genesis or // returns default start value used in the keeper func codeSeqValue(state *types.GenesisState) uint64 { diff --git a/x/wasm/client/cli/genesis_msg_test.go b/x/wasm/client/cli/genesis_msg_test.go index 78a1c53b58..6b67aa4942 100644 --- a/x/wasm/client/cli/genesis_msg_test.go +++ b/x/wasm/client/cli/genesis_msg_test.go @@ -1,12 +1,15 @@ package cli import ( + "bytes" "context" "encoding/json" "os" "path" "testing" + "github.com/cosmos/cosmos-sdk/types/address" + "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/crypto/hd" @@ -363,7 +366,8 @@ func TestInstantiateContractCmd(t *testing.T) { } func TestExecuteContractCmd(t *testing.T) { - const firstContractAddress = "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr" + mySenderAddr := sdk.AccAddress(bytes.Repeat([]byte{1}, address.Len)) + myFirstContractAddress := keeper.BuildContractAddress([]byte("myCodeHash"), mySenderAddr, "my").String() minimalWasmGenesis := types.GenesisState{ Params: types.DefaultParams(), } @@ -390,7 +394,7 @@ func TestExecuteContractCmd(t *testing.T) { }, Contracts: []types.Contract{ { - ContractAddress: firstContractAddress, + ContractAddress: myFirstContractAddress, ContractInfo: types.ContractInfoFixture(func(info *types.ContractInfo) { info.Created = nil }), @@ -399,53 +403,34 @@ func TestExecuteContractCmd(t *testing.T) { }, }, mutator: func(cmd *cobra.Command) { - cmd.SetArgs([]string{firstContractAddress, `{}`}) + cmd.SetArgs([]string{myFirstContractAddress, `{}`}) flagSet := cmd.Flags() flagSet.Set("run-as", myWellFundedAccount) }, expMsgCount: 1, }, - "all good with contract from genesis store messages without initial sequence": { - srcGenesis: types.GenesisState{ - Params: types.DefaultParams(), - Codes: []types.Code{ - { - CodeID: 1, - CodeInfo: types.CodeInfoFixture(), - CodeBytes: wasmIdent, - }, - }, - GenMsgs: []types.GenesisState_GenMsgs{ - {Sum: &types.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: types.MsgInstantiateContractFixture()}}, - }, - }, - mutator: func(cmd *cobra.Command) { - cmd.SetArgs([]string{firstContractAddress, `{}`}) - flagSet := cmd.Flags() - flagSet.Set("run-as", myWellFundedAccount) - }, - expMsgCount: 2, - }, - "all good with contract from genesis store messages and contract sequence set": { + "all good with contract from genesis store messages": { srcGenesis: types.GenesisState{ Params: types.DefaultParams(), Codes: []types.Code{ { - CodeID: 1, - CodeInfo: types.CodeInfoFixture(), + CodeID: 1, + CodeInfo: types.CodeInfoFixture(func(info *types.CodeInfo) { + info.CodeHash = []byte("myCodeHash") + }), CodeBytes: wasmIdent, }, }, GenMsgs: []types.GenesisState_GenMsgs{ - {Sum: &types.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: types.MsgInstantiateContractFixture()}}, - }, - Sequences: []types.Sequence{ - {IDKey: types.KeyLastInstanceID, Value: 100}, + {Sum: &types.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: types.MsgInstantiateContractFixture( + func(m *types.MsgInstantiateContract) { + m.Sender = mySenderAddr.String() + m.Label = "my" + })}}, }, }, mutator: func(cmd *cobra.Command) { - // See TestBuildContractAddress in keeper_test.go - cmd.SetArgs([]string{"cosmos1mujpjkwhut9yjw4xueyugc02evfv46y0dtmnz4lh8xxkkdapym9stu5qm8", `{}`}) + cmd.SetArgs([]string{myFirstContractAddress, `{}`}) flagSet := cmd.Flags() flagSet.Set("run-as", myWellFundedAccount) }, @@ -472,7 +457,7 @@ func TestExecuteContractCmd(t *testing.T) { }, Contracts: []types.Contract{ { - ContractAddress: firstContractAddress, + ContractAddress: myFirstContractAddress, ContractInfo: types.ContractInfoFixture(func(info *types.ContractInfo) { info.Created = nil }), @@ -481,7 +466,7 @@ func TestExecuteContractCmd(t *testing.T) { }, }, mutator: func(cmd *cobra.Command) { - cmd.SetArgs([]string{firstContractAddress, `{}`}) + cmd.SetArgs([]string{myFirstContractAddress, `{}`}) flagSet := cmd.Flags() flagSet.Set("run-as", keeper.RandomBech32AccountAddress(t)) }, @@ -499,7 +484,7 @@ func TestExecuteContractCmd(t *testing.T) { }, Contracts: []types.Contract{ { - ContractAddress: firstContractAddress, + ContractAddress: myFirstContractAddress, ContractInfo: types.ContractInfoFixture(func(info *types.ContractInfo) { info.Created = nil }), @@ -508,7 +493,7 @@ func TestExecuteContractCmd(t *testing.T) { }, }, mutator: func(cmd *cobra.Command) { - cmd.SetArgs([]string{firstContractAddress, `{}`}) + cmd.SetArgs([]string{myFirstContractAddress, `{}`}) flagSet := cmd.Flags() flagSet.Set("run-as", myWellFundedAccount) flagSet.Set("amount", "100stake") @@ -527,7 +512,7 @@ func TestExecuteContractCmd(t *testing.T) { }, Contracts: []types.Contract{ { - ContractAddress: firstContractAddress, + ContractAddress: myFirstContractAddress, ContractInfo: types.ContractInfoFixture(func(info *types.ContractInfo) { info.Created = nil }), @@ -536,7 +521,7 @@ func TestExecuteContractCmd(t *testing.T) { }, }, mutator: func(cmd *cobra.Command) { - cmd.SetArgs([]string{firstContractAddress, `{}`}) + cmd.SetArgs([]string{myFirstContractAddress, `{}`}) flagSet := cmd.Flags() flagSet.Set("run-as", keeper.RandomBech32AccountAddress(t)) flagSet.Set("amount", "10stake") @@ -565,6 +550,9 @@ func TestExecuteContractCmd(t *testing.T) { } func TestGetAllContracts(t *testing.T) { + creatorAddr1 := sdk.AccAddress(bytes.Repeat([]byte{1}, address.Len)) + creatorAddr2 := sdk.AccAddress(bytes.Repeat([]byte{2}, address.Len)) + specs := map[string]struct { src types.GenesisState exp []ContractMeta @@ -595,68 +583,55 @@ func TestGetAllContracts(t *testing.T) { }, "read from message state": { src: types.GenesisState{ + Codes: []types.Code{{CodeID: 1, CodeInfo: types.CodeInfo{CodeHash: []byte("firstCodeHash")}}}, GenMsgs: []types.GenesisState_GenMsgs{ - {Sum: &types.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: &types.MsgInstantiateContract{Label: "first"}}}, - {Sum: &types.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: &types.MsgInstantiateContract{Label: "second"}}}, + {Sum: &types.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: &types.MsgInstantiateContract{Sender: creatorAddr1.String(), Label: "first", CodeID: 1}}}, + {Sum: &types.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: &types.MsgInstantiateContract{Sender: creatorAddr2.String(), Label: "second", CodeID: 1}}}, }, }, exp: []ContractMeta{ { - ContractAddress: keeper.BuildContractAddress(0, 1).String(), - Info: types.ContractInfo{Label: "first"}, - }, - { - ContractAddress: keeper.BuildContractAddress(0, 2).String(), - Info: types.ContractInfo{Label: "second"}, - }, - }, - }, - "read from message state with contract sequence": { - src: types.GenesisState{ - Sequences: []types.Sequence{ - {IDKey: types.KeyLastInstanceID, Value: 100}, - }, - GenMsgs: []types.GenesisState_GenMsgs{ - {Sum: &types.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: &types.MsgInstantiateContract{Label: "hundred"}}}, + ContractAddress: keeper.BuildContractAddress([]byte("firstCodeHash"), creatorAddr1, "first").String(), + Info: types.ContractInfo{Creator: creatorAddr1.String(), Label: "first", CodeID: 1}, }, - }, - exp: []ContractMeta{ { - ContractAddress: keeper.BuildContractAddress(0, 100).String(), - Info: types.ContractInfo{Label: "hundred"}, + ContractAddress: keeper.BuildContractAddress([]byte("firstCodeHash"), creatorAddr2, "second").String(), + Info: types.ContractInfo{Creator: creatorAddr2.String(), Label: "second", CodeID: 1}, }, }, }, "read from contract and message state with contract sequence": { src: types.GenesisState{ + Codes: []types.Code{ + {CodeID: 1, CodeInfo: types.CodeInfo{CodeHash: []byte("firstCodeHash")}}, + {CodeID: 100, CodeInfo: types.CodeInfo{CodeHash: []byte("otherCodeHash")}}, + }, Contracts: []types.Contract{ { - ContractAddress: "first-contract", - ContractInfo: types.ContractInfo{Label: "first"}, + ContractAddress: keeper.BuildContractAddress([]byte("firstCodeHash"), creatorAddr1, "first").String(), + ContractInfo: types.ContractInfo{Label: "first", CodeID: 1}, }, }, - Sequences: []types.Sequence{ - {IDKey: types.KeyLastInstanceID, Value: 100}, - }, GenMsgs: []types.GenesisState_GenMsgs{ - {Sum: &types.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: &types.MsgInstantiateContract{Label: "hundred"}}}, + {Sum: &types.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: &types.MsgInstantiateContract{Sender: creatorAddr1.String(), Label: "hundred", CodeID: 100}}}, }, }, exp: []ContractMeta{ { - ContractAddress: "first-contract", - Info: types.ContractInfo{Label: "first"}, + ContractAddress: keeper.BuildContractAddress([]byte("firstCodeHash"), creatorAddr1, "first").String(), + Info: types.ContractInfo{Label: "first", CodeID: 1}, }, { - ContractAddress: keeper.BuildContractAddress(0, 100).String(), - Info: types.ContractInfo{Label: "hundred"}, + ContractAddress: keeper.BuildContractAddress([]byte("otherCodeHash"), creatorAddr1, "hundred").String(), + Info: types.ContractInfo{Creator: creatorAddr1.String(), Label: "hundred", CodeID: 100}, }, }, }, } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { - got := GetAllContracts(&spec.src) + got, err := GetAllContracts(&spec.src) + require.NoError(t, err) assert.Equal(t, spec.exp, got) }) } diff --git a/x/wasm/client/cli/query.go b/x/wasm/client/cli/query.go index 5114d56832..f399bfd7d6 100644 --- a/x/wasm/client/cli/query.go +++ b/x/wasm/client/cli/query.go @@ -17,6 +17,7 @@ import ( "github.com/spf13/cobra" flag "github.com/spf13/pflag" + "github.com/CosmWasm/wasmd/x/wasm/keeper" "github.com/CosmWasm/wasmd/x/wasm/types" ) @@ -39,6 +40,7 @@ func GetQueryCmd() *cobra.Command { GetCmdListPinnedCode(), GetCmdLibVersion(), GetCmdQueryParams(), + GetCmdBuildAddress(), ) return queryCmd } @@ -63,6 +65,33 @@ func GetCmdLibVersion() *cobra.Command { return cmd } +// GetCmdBuildAddress build a contract address +func GetCmdBuildAddress() *cobra.Command { + cmd := &cobra.Command{ + Use: "build-address [code-hash] [creator-address] [label]", + Short: "build contract address", + Aliases: []string{"address"}, + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) error { + codeHash, err := hex.DecodeString(args[0]) + if err != nil { + return fmt.Errorf("code-hash: %s", err) + } + creator, err := sdk.AccAddressFromBech32(args[1]) + if err != nil { + return fmt.Errorf("creator: %s", err) + } + label := args[2] + if err := types.ValidateLabel(label); err != nil { + return fmt.Errorf("label: %s", err) + } + cmd.Println(keeper.BuildContractAddress(codeHash, creator, label).String()) + return nil + }, + } + return cmd +} + // GetCmdListCode lists all wasm code uploaded func GetCmdListCode() *cobra.Command { cmd := &cobra.Command{ @@ -117,6 +146,9 @@ func GetCmdListContractByCode() *cobra.Command { if err != nil { return err } + if codeID == 0 { + return errors.New("empty code id") + } pageReq, err := client.ReadPageRequest(withPageKeyDecoded(cmd.Flags())) if err != nil { diff --git a/x/wasm/genesis_test.go b/x/wasm/genesis_test.go index ea97c97f07..9b97213db5 100644 --- a/x/wasm/genesis_test.go +++ b/x/wasm/genesis_test.go @@ -13,8 +13,8 @@ func TestInitGenesis(t *testing.T) { deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) - creator := data.faucet.NewFundedAccount(data.ctx, deposit.Add(deposit...)...) - fred := data.faucet.NewFundedAccount(data.ctx, topUp...) + creator := data.faucet.NewFundedRandomAccount(data.ctx, deposit.Add(deposit...)...) + fred := data.faucet.NewFundedRandomAccount(data.ctx, topUp...) h := data.module.Route().Handler() q := data.module.LegacyQuerierHandler(nil) diff --git a/x/wasm/ibctesting/wasm.go b/x/wasm/ibctesting/wasm.go index 4639688f01..293a9f6926 100644 --- a/x/wasm/ibctesting/wasm.go +++ b/x/wasm/ibctesting/wasm.go @@ -62,6 +62,7 @@ func (chain *TestChain) StoreCode(byteCode []byte) types.MsgStoreCodeResponse { var pInstResp types.MsgStoreCodeResponse require.NoError(chain.t, pInstResp.Unmarshal(protoResult.Data[0].Data)) require.NotEmpty(chain.t, pInstResp.CodeID) + require.NotEmpty(chain.t, pInstResp.Checksum) return pInstResp } diff --git a/x/wasm/keeper/contract_keeper.go b/x/wasm/keeper/contract_keeper.go index 73d925dee1..6e1195dbd1 100644 --- a/x/wasm/keeper/contract_keeper.go +++ b/x/wasm/keeper/contract_keeper.go @@ -10,7 +10,7 @@ var _ types.ContractOpsKeeper = PermissionedKeeper{} // decoratedKeeper contains a subset of the wasm keeper that are already or can be guarded by an authorization policy in the future type decoratedKeeper interface { - create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, instantiateAccess *types.AccessConfig, authZ AuthorizationPolicy) (codeID uint64, err error) + create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, instantiateAccess *types.AccessConfig, authZ AuthorizationPolicy) (codeID uint64, checksum []byte, err error) instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.AccAddress, initMsg []byte, label string, deposit sdk.Coins, authZ AuthorizationPolicy) (sdk.AccAddress, []byte, error) migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, newCodeID uint64, msg []byte, authZ AuthorizationPolicy) ([]byte, error) setContractAdmin(ctx sdk.Context, contractAddress, caller, newAdmin sdk.AccAddress, authZ AuthorizationPolicy) error @@ -39,7 +39,7 @@ func NewDefaultPermissionKeeper(nested decoratedKeeper) *PermissionedKeeper { return NewPermissionedKeeper(nested, DefaultAuthorizationPolicy{}) } -func (p PermissionedKeeper) Create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, instantiateAccess *types.AccessConfig) (codeID uint64, err error) { +func (p PermissionedKeeper) Create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, instantiateAccess *types.AccessConfig) (codeID uint64, checksum []byte, err error) { return p.nested.create(ctx, creator, wasmCode, instantiateAccess, p.authZPolicy) } diff --git a/x/wasm/keeper/genesis.go b/x/wasm/keeper/genesis.go index 7fa5280b9e..d81750b708 100644 --- a/x/wasm/keeper/genesis.go +++ b/x/wasm/keeper/genesis.go @@ -35,7 +35,6 @@ func InitGenesis(ctx sdk.Context, keeper *Keeper, data types.GenesisState, staki } } - var maxContractID int for i, contract := range data.Contracts { contractAddr, err := sdk.AccAddressFromBech32(contract.ContractAddress) if err != nil { @@ -45,7 +44,6 @@ func InitGenesis(ctx sdk.Context, keeper *Keeper, data types.GenesisState, staki if err != nil { return nil, sdkerrors.Wrapf(err, "contract number %d", i) } - maxContractID = i + 1 // not ideal but max(contractID) is not persisted otherwise } for i, seq := range data.Sequences { @@ -60,10 +58,6 @@ func InitGenesis(ctx sdk.Context, keeper *Keeper, data types.GenesisState, staki if seqVal <= maxCodeID { return nil, sdkerrors.Wrapf(types.ErrInvalid, "seq %s with value: %d must be greater than: %d ", string(types.KeyLastCodeID), seqVal, maxCodeID) } - seqVal = keeper.PeekAutoIncrementID(ctx, types.KeyLastInstanceID) - if seqVal <= uint64(maxContractID) { - return nil, sdkerrors.Wrapf(types.ErrInvalid, "seq %s with value: %d must be greater than: %d ", string(types.KeyLastInstanceID), seqVal, maxContractID) - } if len(data.GenMsgs) == 0 { return nil, nil @@ -117,7 +111,7 @@ func ExportGenesis(ctx sdk.Context, keeper *Keeper) *types.GenesisState { return false }) - for _, k := range [][]byte{types.KeyLastCodeID, types.KeyLastInstanceID} { + for _, k := range [][]byte{types.KeyLastCodeID} { genState.Sequences = append(genState.Sequences, types.Sequence{ IDKey: k, Value: keeper.PeekAutoIncrementID(ctx, k), diff --git a/x/wasm/keeper/genesis_test.go b/x/wasm/keeper/genesis_test.go index e5410aabb0..4b65f82eaa 100644 --- a/x/wasm/keeper/genesis_test.go +++ b/x/wasm/keeper/genesis_test.go @@ -11,6 +11,10 @@ import ( "testing" "time" + bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" + + "github.com/cosmos/cosmos-sdk/types/address" + "github.com/cosmos/cosmos-sdk/store" "github.com/cosmos/cosmos-sdk/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" @@ -65,7 +69,7 @@ func TestGenesisExportImport(t *testing.T) { creatorAddr, err := sdk.AccAddressFromBech32(codeInfo.Creator) require.NoError(t, err) - codeID, err := contractKeeper.Create(srcCtx, creatorAddr, wasmCode, &codeInfo.InstantiateConfig) + codeID, checksum, err := contractKeeper.Create(srcCtx, creatorAddr, wasmCode, &codeInfo.InstantiateConfig) require.NoError(t, err) if pinned { contractKeeper.PinCode(srcCtx, codeID) @@ -80,7 +84,7 @@ func TestGenesisExportImport(t *testing.T) { } contract.CodeID = codeID - contractAddr := wasmKeeper.generateContractAddress(srcCtx, codeID) + contractAddr := BuildContractAddress(checksum, creatorAddr, "testing") wasmKeeper.storeContractInfo(srcCtx, contractAddr, &contract) wasmKeeper.appendToContractHistory(srcCtx, contractAddr, history...) wasmKeeper.importContractState(srcCtx, contractAddr, stateModels) @@ -156,6 +160,16 @@ func TestGenesisInit(t *testing.T) { require.NoError(t, err) myCodeInfo := wasmTypes.CodeInfoFixture(wasmTypes.WithSHA256CodeHash(wasmCode)) + mySenderAddr := sdk.AccAddress(bytes.Repeat([]byte{1}, address.Len)) + myLabel := "testing" + myContractInfoFixture := func(mutators ...func(*types.ContractInfo)) types.ContractInfo { + return types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { + c.CodeID = 1 + c.Creator = mySenderAddr.String() + c.Label = myLabel + }, types.OnlyGenesisFields) + } + specs := map[string]struct { src types.GenesisState stakingMock StakingKeeperMock @@ -171,7 +185,6 @@ func TestGenesisInit(t *testing.T) { }}, Sequences: []types.Sequence{ {IDKey: types.KeyLastCodeID, Value: 2}, - {IDKey: types.KeyLastInstanceID, Value: 1}, }, Params: types.DefaultParams(), }, @@ -190,7 +203,6 @@ func TestGenesisInit(t *testing.T) { }}, Sequences: []types.Sequence{ {IDKey: types.KeyLastCodeID, Value: 10}, - {IDKey: types.KeyLastInstanceID, Value: 1}, }, Params: types.DefaultParams(), }, @@ -210,7 +222,6 @@ func TestGenesisInit(t *testing.T) { Contracts: nil, Sequences: []types.Sequence{ {IDKey: types.KeyLastCodeID, Value: 3}, - {IDKey: types.KeyLastInstanceID, Value: 1}, }, Params: types.DefaultParams(), }, @@ -267,13 +278,12 @@ func TestGenesisInit(t *testing.T) { }}, Contracts: []types.Contract{ { - ContractAddress: BuildContractAddress(1, 1).String(), - ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), + ContractAddress: BuildContractAddress(myCodeInfo.CodeHash, mySenderAddr, myLabel).String(), + ContractInfo: myContractInfoFixture(), }, }, Sequences: []types.Sequence{ {IDKey: types.KeyLastCodeID, Value: 2}, - {IDKey: types.KeyLastInstanceID, Value: 2}, }, Params: types.DefaultParams(), }, @@ -288,16 +298,17 @@ func TestGenesisInit(t *testing.T) { }}, Contracts: []types.Contract{ { - ContractAddress: BuildContractAddress(1, 1).String(), - ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), + ContractAddress: BuildContractAddress(myCodeInfo.CodeHash, mySenderAddr, myLabel).String(), + ContractInfo: myContractInfoFixture(), }, { - ContractAddress: BuildContractAddress(1, 2).String(), - ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), + ContractAddress: BuildContractAddress(myCodeInfo.CodeHash, mySenderAddr, "other-label").String(), + ContractInfo: myContractInfoFixture(func(i *wasmTypes.ContractInfo) { + i.Label = "other-label" + }), }, }, Sequences: []types.Sequence{ {IDKey: types.KeyLastCodeID, Value: 2}, - {IDKey: types.KeyLastInstanceID, Value: 3}, }, Params: types.DefaultParams(), }, @@ -307,8 +318,8 @@ func TestGenesisInit(t *testing.T) { src: types.GenesisState{ Contracts: []types.Contract{ { - ContractAddress: BuildContractAddress(1, 1).String(), - ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), + ContractAddress: BuildContractAddress(myCodeInfo.CodeHash, mySenderAddr, myLabel).String(), + ContractInfo: myContractInfoFixture(), }, }, Params: types.DefaultParams(), @@ -323,11 +334,11 @@ func TestGenesisInit(t *testing.T) { }}, Contracts: []types.Contract{ { - ContractAddress: BuildContractAddress(1, 1).String(), - ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), + ContractAddress: BuildContractAddress(myCodeInfo.CodeHash, mySenderAddr, myLabel).String(), + ContractInfo: myContractInfoFixture(), }, { - ContractAddress: BuildContractAddress(1, 1).String(), - ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), + ContractAddress: BuildContractAddress(myCodeInfo.CodeHash, mySenderAddr, myLabel).String(), + ContractInfo: myContractInfoFixture(), }, }, Params: types.DefaultParams(), @@ -342,8 +353,8 @@ func TestGenesisInit(t *testing.T) { }}, Contracts: []types.Contract{ { - ContractAddress: BuildContractAddress(1, 1).String(), - ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), + ContractAddress: BuildContractAddress(myCodeInfo.CodeHash, mySenderAddr, myLabel).String(), + ContractInfo: myContractInfoFixture(), ContractState: []types.Model{ { Key: []byte{0x1}, @@ -381,26 +392,6 @@ func TestGenesisInit(t *testing.T) { Params: types.DefaultParams(), }, }, - "prevent contract id seq init value == count contracts": { - src: types.GenesisState{ - Codes: []types.Code{{ - CodeID: firstCodeID, - CodeInfo: myCodeInfo, - CodeBytes: wasmCode, - }}, - Contracts: []types.Contract{ - { - ContractAddress: BuildContractAddress(1, 1).String(), - ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), - }, - }, - Sequences: []types.Sequence{ - {IDKey: types.KeyLastCodeID, Value: 2}, - {IDKey: types.KeyLastInstanceID, Value: 1}, - }, - Params: types.DefaultParams(), - }, - }, "validator set update called for any genesis messages": { src: wasmTypes.GenesisState{ GenMsgs: []types.GenesisState_GenMsgs{ @@ -559,16 +550,17 @@ func TestImportContractWithCodeHistoryReset(t *testing.T) { } assert.Equal(t, expHistory, keeper.GetContractHistory(ctx, contractAddr)) assert.Equal(t, uint64(2), keeper.PeekAutoIncrementID(ctx, types.KeyLastCodeID)) - assert.Equal(t, uint64(3), keeper.PeekAutoIncrementID(ctx, types.KeyLastInstanceID)) } func TestSupportedGenMsgTypes(t *testing.T) { wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) + wasmHash := sha256.Sum256(wasmCode) var ( myAddress sdk.AccAddress = bytes.Repeat([]byte{1}, types.ContractAddrLen) verifierAddress sdk.AccAddress = bytes.Repeat([]byte{2}, types.ContractAddrLen) beneficiaryAddress sdk.AccAddress = bytes.Repeat([]byte{3}, types.ContractAddrLen) + contractAddr = BuildContractAddress(wasmHash[:], myAddress, "testing") ) const denom = "stake" importState := types.GenesisState{ @@ -600,7 +592,7 @@ func TestSupportedGenMsgTypes(t *testing.T) { Sum: &types.GenesisState_GenMsgs_ExecuteContract{ ExecuteContract: &types.MsgExecuteContract{ Sender: verifierAddress.String(), - Contract: BuildContractAddress(1, 1).String(), + Contract: contractAddr.String(), Msg: []byte(`{"release":{}}`), }, }, @@ -625,7 +617,7 @@ func TestSupportedGenMsgTypes(t *testing.T) { require.NotNil(t, codeInfo) // verify contract instantiated - cInfo := keeper.GetContractInfo(ctx, BuildContractAddress(1, 1)) + cInfo := keeper.GetContractInfo(ctx, contractAddr) require.NotNil(t, cInfo) // verify contract executed @@ -668,7 +660,24 @@ func setupKeeper(t *testing.T) (*Keeper, sdk.Context, []sdk.StoreKey) { wasmConfig := wasmTypes.DefaultWasmConfig() pk := paramskeeper.NewKeeper(encodingConfig.Marshaler, encodingConfig.Amino, keyParams, tkeyParams) - srcKeeper := NewKeeper(encodingConfig.Marshaler, keyWasm, pk.Subspace(wasmTypes.ModuleName), authkeeper.AccountKeeper{}, nil, stakingkeeper.Keeper{}, distributionkeeper.Keeper{}, nil, nil, nil, nil, nil, nil, tempDir, wasmConfig, AvailableCapabilities) + srcKeeper := NewKeeper( + encodingConfig.Marshaler, + keyWasm, + pk.Subspace(wasmTypes.ModuleName), + authkeeper.AccountKeeper{}, + &bankkeeper.BaseKeeper{}, + stakingkeeper.Keeper{}, + distributionkeeper.Keeper{}, + nil, + nil, + nil, + nil, + nil, + nil, + tempDir, + wasmConfig, + AvailableCapabilities, + ) return &srcKeeper, ctx, []sdk.StoreKey{keyWasm, keyParams} } diff --git a/x/wasm/keeper/handler_plugin_test.go b/x/wasm/keeper/handler_plugin_test.go index 4c60bc550f..557478fb44 100644 --- a/x/wasm/keeper/handler_plugin_test.go +++ b/x/wasm/keeper/handler_plugin_test.go @@ -327,7 +327,7 @@ func TestBurnCoinMessageHandlerIntegration(t *testing.T) { // picks the message in the default handler chain ctx, keepers := CreateDefaultTestInput(t) // set some supply - keepers.Faucet.NewFundedAccount(ctx, sdk.NewCoin("denom", sdk.NewInt(10_000_000))) + keepers.Faucet.NewFundedRandomAccount(ctx, sdk.NewCoin("denom", sdk.NewInt(10_000_000))) k := keepers.WasmKeeper example := InstantiateHackatomExampleContract(t, ctx, keepers) // with deposit of 100 stake diff --git a/x/wasm/keeper/ibc_test.go b/x/wasm/keeper/ibc_test.go index ef04b583cb..bdbab1a37c 100644 --- a/x/wasm/keeper/ibc_test.go +++ b/x/wasm/keeper/ibc_test.go @@ -4,6 +4,8 @@ import ( "fmt" "testing" + "github.com/tendermint/tendermint/libs/rand" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/assert" @@ -41,7 +43,7 @@ func TestBindingPortForIBCContractOnInstantiate(t *testing.T) { } func TestContractFromPortID(t *testing.T) { - contractAddr := BuildContractAddress(1, 100) + contractAddr := BuildContractAddress(rand.Bytes(32), RandomAccountAddress(t), "testing") specs := map[string]struct { srcPort string expAddr sdk.AccAddress diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index 6e250e9f63..7426ade1ad 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -4,22 +4,25 @@ import ( "bytes" "context" "encoding/binary" + "encoding/hex" "fmt" "math" "path/filepath" + "reflect" "strconv" "strings" "time" - "github.com/cosmos/cosmos-sdk/types/address" - wasmvm "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/store/prefix" "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" "github.com/tendermint/tendermint/libs/log" @@ -54,6 +57,13 @@ type CoinTransferrer interface { TransferCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error } +// CoinPruner handles the balances for accounts that are pruned on contract instantiate. +// This is an extension point to attach custom logic +type CoinPruner interface { + // PruneBalances handle balances for given address + PruneBalances(ctx sdk.Context, contractAddress sdk.AccAddress) error +} + // WasmVMResponseHandler is an extension point to handles the response data returned by a contract call. type WasmVMResponseHandler interface { // Handle processes the data returned by a contract invocation. @@ -66,6 +76,25 @@ type WasmVMResponseHandler interface { ) ([]byte, error) } +// list of account types that are accepted for wasm contracts. Chains importing wasmd +// can overwrite this list with the WithAcceptedAccountTypesOnContractInstantiation option. +var defaultAcceptedAccountTypes = map[reflect.Type]struct{}{ + reflect.TypeOf(&authtypes.BaseAccount{}): {}, +} + +// list of account types that are replaced with base accounts. Chains importing wasmd +// can overwrite this list with the WithPruneAccountTypesOnContractInstantiation option. +// +// contains vesting account types that can be created post genesis +var defaultPruneAccountTypes = map[reflect.Type]struct{}{ + reflect.TypeOf(&vestingtypes.DelayedVestingAccount{}): {}, + reflect.TypeOf(&vestingtypes.ContinuousVestingAccount{}): {}, + // intentionally not added: genesis account types + // reflect.TypeOf(&vestingtypes.BaseVestingAccount{}): {}, + // reflect.TypeOf(&vestingtypes.PeriodicVestingAccount{}): {}, + // reflect.TypeOf(&vestingtypes.PermanentLockedAccount{}): {}, +} + // Keeper will have a reference to Wasmer with it's own data directory. type Keeper struct { storeKey sdk.StoreKey @@ -79,10 +108,13 @@ type Keeper struct { wasmVMResponseHandler WasmVMResponseHandler messenger Messenger // queryGasLimit is the max wasmvm gas that can be spent on executing a query with a contract - queryGasLimit uint64 - paramSpace paramtypes.Subspace - gasRegister GasRegister - maxQueryStackSize uint32 + queryGasLimit uint64 + paramSpace paramtypes.Subspace + gasRegister GasRegister + maxQueryStackSize uint32 + acceptedAccountTypes map[reflect.Type]struct{} + pruneAccountTypes map[reflect.Type]struct{} + coinPruner CoinPruner } // NewKeeper creates a new contract Keeper instance @@ -116,18 +148,21 @@ func NewKeeper( } keeper := &Keeper{ - storeKey: storeKey, - cdc: cdc, - wasmVM: wasmer, - accountKeeper: accountKeeper, - bank: NewBankCoinTransferrer(bankKeeper), - portKeeper: portKeeper, - capabilityKeeper: capabilityKeeper, - messenger: NewDefaultMessageHandler(router, channelKeeper, capabilityKeeper, bankKeeper, cdc, portSource), - queryGasLimit: wasmConfig.SmartQueryGasLimit, - paramSpace: paramSpace, - gasRegister: NewDefaultWasmGasRegister(), - maxQueryStackSize: types.DefaultMaxQueryStackSize, + storeKey: storeKey, + cdc: cdc, + wasmVM: wasmer, + accountKeeper: accountKeeper, + bank: NewBankCoinTransferrer(bankKeeper), + coinPruner: NewCoinBurner(bankKeeper), + portKeeper: portKeeper, + capabilityKeeper: capabilityKeeper, + messenger: NewDefaultMessageHandler(router, channelKeeper, capabilityKeeper, bankKeeper, cdc, portSource), + queryGasLimit: wasmConfig.SmartQueryGasLimit, + paramSpace: paramSpace, + gasRegister: NewDefaultWasmGasRegister(), + maxQueryStackSize: types.DefaultMaxQueryStackSize, + acceptedAccountTypes: defaultAcceptedAccountTypes, + pruneAccountTypes: defaultPruneAccountTypes, } keeper.wasmVMQueryHandler = DefaultQueryPlugins(bankKeeper, stakingKeeper, distKeeper, channelKeeper, queryRouter, keeper) for _, o := range opts { @@ -161,13 +196,13 @@ func (k Keeper) SetParams(ctx sdk.Context, ps types.Params) { k.paramSpace.SetParamSet(ctx, &ps) } -func (k Keeper) create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, instantiateAccess *types.AccessConfig, authZ AuthorizationPolicy) (codeID uint64, err error) { +func (k Keeper) create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, instantiateAccess *types.AccessConfig, authZ AuthorizationPolicy) (codeID uint64, checksum []byte, err error) { if creator == nil { - return 0, sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "cannot be nil") + return 0, checksum, sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "cannot be nil") } if !authZ.CanCreateCode(k.getUploadAccessConfig(ctx), creator) { - return 0, sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "can not create code") + return 0, checksum, sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "can not create code") } // figure out proper instantiate access defaultAccessConfig := k.getInstantiateAccessConfig(ctx).With(creator) @@ -175,25 +210,25 @@ func (k Keeper) create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, instantiateAccess = &defaultAccessConfig } else if !instantiateAccess.IsSubset(defaultAccessConfig) { // we enforce this must be subset of default upload access - return 0, sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "instantiate access must be subset of default upload access") + return 0, checksum, sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "instantiate access must be subset of default upload access") } if ioutils.IsGzip(wasmCode) { ctx.GasMeter().ConsumeGas(k.gasRegister.UncompressCosts(len(wasmCode)), "Uncompress gzip bytecode") wasmCode, err = ioutils.Uncompress(wasmCode, uint64(types.MaxWasmSize)) if err != nil { - return 0, sdkerrors.Wrap(types.ErrCreateFailed, err.Error()) + return 0, checksum, sdkerrors.Wrap(types.ErrCreateFailed, err.Error()) } } ctx.GasMeter().ConsumeGas(k.gasRegister.CompileCosts(len(wasmCode)), "Compiling wasm bytecode") - checksum, err := k.wasmVM.Create(wasmCode) + checksum, err = k.wasmVM.Create(wasmCode) if err != nil { - return 0, sdkerrors.Wrap(types.ErrCreateFailed, err.Error()) + return 0, checksum, sdkerrors.Wrap(types.ErrCreateFailed, err.Error()) } report, err := k.wasmVM.AnalyzeCode(checksum) if err != nil { - return 0, sdkerrors.Wrap(types.ErrCreateFailed, err.Error()) + return 0, checksum, sdkerrors.Wrap(types.ErrCreateFailed, err.Error()) } codeID = k.autoIncrementID(ctx, types.KeyLastCodeID) k.Logger(ctx).Debug("storing new contract", "capabilities", report.RequiredCapabilities, "code_id", codeID) @@ -203,13 +238,14 @@ func (k Keeper) create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, evt := sdk.NewEvent( types.EventTypeStoreCode, sdk.NewAttribute(types.AttributeKeyCodeID, strconv.FormatUint(codeID, 10)), + sdk.NewAttribute(types.AttributeKeyChecksum, hex.EncodeToString(checksum)), ) for _, f := range strings.Split(report.RequiredCapabilities, ",") { evt.AppendAttributes(sdk.NewAttribute(types.AttributeKeyRequiredCapability, strings.TrimSpace(f))) } ctx.EventManager().EmitEvent(evt) - return codeID, nil + return codeID, checksum, nil } func (k Keeper) storeCodeInfo(ctx sdk.Context, codeID uint64, codeInfo types.CodeInfo) { @@ -244,31 +280,15 @@ func (k Keeper) importCode(ctx sdk.Context, codeID uint64, codeInfo types.CodeIn return nil } -func (k Keeper) instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.AccAddress, initMsg []byte, label string, deposit sdk.Coins, authZ AuthorizationPolicy) (sdk.AccAddress, []byte, error) { +func (k Keeper) instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.AccAddress, initMsg []byte, label string, deposit sdk.Coins, authPolicy AuthorizationPolicy) (sdk.AccAddress, []byte, error) { defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "instantiate") + if creator == nil { + return nil, nil, types.ErrEmpty.Wrap("creator") + } instanceCosts := k.gasRegister.NewContractInstanceCosts(k.IsPinnedCode(ctx, codeID), len(initMsg)) ctx.GasMeter().ConsumeGas(instanceCosts, "Loading CosmWasm module: instantiate") - // create contract address - contractAddress := k.generateContractAddress(ctx, codeID) - existingAcct := k.accountKeeper.GetAccount(ctx, contractAddress) - if existingAcct != nil { - return nil, nil, sdkerrors.Wrap(types.ErrAccountExists, existingAcct.GetAddress().String()) - } - - // deposit initial contract funds - if !deposit.IsZero() { - if err := k.bank.TransferCoins(ctx, creator, contractAddress, deposit); err != nil { - return nil, nil, err - } - } else { - // create an empty account (so we don't have issues later) - // TODO: can we remove this? - contractAccount := k.accountKeeper.NewAccountWithAddress(ctx, contractAddress) - k.accountKeeper.SetAccount(ctx, contractAccount) - } - // get contact info store := ctx.KVStore(k.storeKey) bz := store.Get(types.GetCodeKey(codeID)) @@ -278,10 +298,53 @@ func (k Keeper) instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.A var codeInfo types.CodeInfo k.cdc.MustUnmarshal(bz, &codeInfo) - if !authZ.CanInstantiateContract(codeInfo.InstantiateConfig, creator) { + if !authPolicy.CanInstantiateContract(codeInfo.InstantiateConfig, creator) { return nil, nil, sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "can not instantiate") } + contractAddress := BuildContractAddress(codeInfo.CodeHash, creator, label) + if k.HasContractInfo(ctx, contractAddress) { + return nil, nil, types.ErrDuplicate.Wrap("instance with this code id, sender and label exists: try a different label") + } + + // check account + // every cosmos module can define custom account types when needed. The cosmos-sdk comes with extension points + // to support this and a set of base and vesting account types that we integrated in our default lists. + // But not all account types of other modules are known or may make sense for contracts, therefore we kept this + // decision logic also very flexible and extendable. We provide new options to overwrite the default settings via WithAcceptedAccountTypesOnContractInstantiation and + // WithPruneAccountTypesOnContractInstantiation as constructor arguments + existingAcct := k.accountKeeper.GetAccount(ctx, contractAddress) + if existingAcct != nil { + if existingAcct.GetSequence() != 0 || existingAcct.GetPubKey() != nil { + return nil, nil, types.ErrAccountExists.Wrap("address is claimed by external account") + } + if _, accept := k.acceptedAccountTypes[reflect.TypeOf(existingAcct)]; accept { + // keep account and balance as it is + k.Logger(ctx).Info("instantiate contract with existing account", "address", contractAddress.String()) + } else if _, clear := k.pruneAccountTypes[reflect.TypeOf(existingAcct)]; clear { + k.Logger(ctx).Info("pruning existing account for contract instantiation", "address", contractAddress.String()) + // consider an account in the wasmd namespace spam and overwrite it. + contractAccount := k.accountKeeper.NewAccountWithAddress(ctx, contractAddress) + k.accountKeeper.SetAccount(ctx, contractAccount) + // also handle balance to not open cases where these accounts are abused and become liquid + if err := k.coinPruner.PruneBalances(ctx, contractAddress); err != nil { + return nil, nil, err + } + } else { // unknown account type + return nil, nil, types.ErrAccountExists.Wrapf("refusing to overwrite special account type:: %T", existingAcct) + } + } else { + // create an empty account (so we don't have issues later) + contractAccount := k.accountKeeper.NewAccountWithAddress(ctx, contractAddress) + k.accountKeeper.SetAccount(ctx, contractAccount) + } + // deposit initial contract funds + if !deposit.IsZero() { + if err := k.bank.TransferCoins(ctx, creator, contractAddress, deposit); err != nil { + return nil, nil, err + } + } + // prepare params for contract instantiate call env := types.NewEnv(ctx, contractAddress) info := types.NewInfo(creator, deposit) @@ -955,18 +1018,19 @@ func (k Keeper) consumeRuntimeGas(ctx sdk.Context, gas uint64) { } } -// generates a contract address from codeID + instanceID -func (k Keeper) generateContractAddress(ctx sdk.Context, codeID uint64) sdk.AccAddress { - instanceID := k.autoIncrementID(ctx, types.KeyLastInstanceID) - return BuildContractAddress(codeID, instanceID) -} - -// BuildContractAddress builds an sdk account address for a contract. -func BuildContractAddress(codeID, instanceID uint64) sdk.AccAddress { - contractID := make([]byte, 16) - binary.BigEndian.PutUint64(contractID[:8], codeID) - binary.BigEndian.PutUint64(contractID[8:], instanceID) - return address.Module(types.ModuleName, contractID)[:types.ContractAddrLen] +// BuildContractAddress generates a contract address for the wasm module with len = types.ContractAddrLen using the +// Cosmos SDK address.Module function. +// Internally a key is built containing (len(checksum) | checksum | len(sender_address) | sender_address | len(label) | label). +// All method parameter values must be valid and not be empty or nil. +func BuildContractAddress(checksum []byte, creator sdk.AccAddress, label string) sdk.AccAddress { + checksum = address.MustLengthPrefix(checksum) + creator = address.MustLengthPrefix(creator) + labelBz := address.MustLengthPrefix([]byte(label)) + key := make([]byte, len(checksum)+len(creator)+len(labelBz)) + copy(key[0:], checksum) + copy(key[len(checksum):], creator) + copy(key[len(checksum)+len(creator):], labelBz) + return address.Module(types.ModuleName, key)[:types.ContractAddrLen] } func (k Keeper) autoIncrementID(ctx sdk.Context, lastIDKey []byte) uint64 { @@ -1097,6 +1161,34 @@ func (c BankCoinTransferrer) TransferCoins(parentCtx sdk.Context, fromAddr sdk.A return nil } +var _ CoinPruner = CoinBurner{} + +// CoinBurner default implementation for CoinPruner to burn the coins +type CoinBurner struct { + bank types.BankKeeper +} + +// NewCoinBurner constructor +func NewCoinBurner(bank types.BankKeeper) CoinBurner { + if bank == nil { + panic("bank keeper must not be nil") + } + return CoinBurner{bank: bank} +} + +// PruneBalances burns all coins owned by the account. +func (b CoinBurner) PruneBalances(ctx sdk.Context, address sdk.AccAddress) error { + if amt := b.bank.GetAllBalances(ctx, address); !amt.IsZero() { + if err := b.bank.SendCoinsFromAccountToModule(ctx, address, types.ModuleName, amt); err != nil { + return sdkerrors.Wrap(err, "prune account balance") + } + if err := b.bank.BurnCoins(ctx, types.ModuleName, amt); err != nil { + return sdkerrors.Wrap(err, "burn account balance") + } + } + return nil +} + type msgDispatcher interface { DispatchSubmessages(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, msgs []wasmvmtypes.SubMsg) ([]byte, error) } diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index 0cde32592f..f00f28799f 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -2,19 +2,24 @@ package keeper import ( "bytes" + _ "embed" + "encoding/hex" "encoding/json" "errors" - "math" "os" + "strings" "testing" "time" wasmvm "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" + "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" stypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" distributiontypes "github.com/cosmos/cosmos-sdk/x/distribution/types" fuzz "github.com/google/gofuzz" @@ -27,15 +32,7 @@ import ( "github.com/CosmWasm/wasmd/x/wasm/types" ) -// When migrated to go 1.16, embed package should be used instead. -func init() { - b, err := os.ReadFile("./testdata/hackatom.wasm") - if err != nil { - panic(err) - } - hackatomWasm = b -} - +//go:embed testdata/hackatom.wasm var hackatomWasm []byte const AvailableCapabilities = "iterator,staking,stargate,cosmwasm_1_1" @@ -50,10 +47,10 @@ func TestCreateSuccess(t *testing.T) { keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) em := sdk.NewEventManager() - contractID, err := keeper.Create(ctx.WithEventManager(em), creator, hackatomWasm, nil) + contractID, _, err := keeper.Create(ctx.WithEventManager(em), creator, hackatomWasm, nil) require.NoError(t, err) require.Equal(t, uint64(1), contractID) // and verify content @@ -61,32 +58,33 @@ func TestCreateSuccess(t *testing.T) { require.NoError(t, err) require.Equal(t, hackatomWasm, storedCode) // and events emitted - exp := sdk.Events{sdk.NewEvent("store_code", sdk.NewAttribute("code_id", "1"))} + codeHash := "13a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a5" + exp := sdk.Events{sdk.NewEvent("store_code", sdk.NewAttribute("code_id", "1"), sdk.NewAttribute("code_checksum", codeHash))} assert.Equal(t, exp, em.Events()) } func TestCreateNilCreatorAddress(t *testing.T) { ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) - _, err := keepers.ContractKeeper.Create(ctx, nil, hackatomWasm, nil) + _, _, err := keepers.ContractKeeper.Create(ctx, nil, hackatomWasm, nil) require.Error(t, err, "nil creator is not allowed") } func TestCreateNilWasmCode(t *testing.T) { ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) - _, err := keepers.ContractKeeper.Create(ctx, creator, nil, nil) + _, _, err := keepers.ContractKeeper.Create(ctx, creator, nil, nil) require.Error(t, err, "nil WASM code is not allowed") } func TestCreateInvalidWasmCode(t *testing.T) { ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) - _, err := keepers.ContractKeeper.Create(ctx, creator, []byte("potatoes"), nil) + _, _, err := keepers.ContractKeeper.Create(ctx, creator, []byte("potatoes"), nil) require.Error(t, err, "potatoes are not valid WASM code") } @@ -127,7 +125,7 @@ func TestCreateStoresInstantiatePermission(t *testing.T) { }) fundAccounts(t, ctx, accKeeper, bankKeeper, myAddr, deposit) - codeID, err := keeper.Create(ctx, myAddr, hackatomWasm, nil) + codeID, _, err := keeper.Create(ctx, myAddr, hackatomWasm, nil) require.NoError(t, err) codeInfo := keepers.WasmKeeper.GetCodeInfo(ctx, codeID) @@ -142,8 +140,8 @@ func TestCreateWithParamPermissions(t *testing.T) { keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) - otherAddr := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) + otherAddr := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) specs := map[string]struct { srcPermission types.AccessConfig @@ -172,7 +170,7 @@ func TestCreateWithParamPermissions(t *testing.T) { params := types.DefaultParams() params.CodeUploadAccess = spec.srcPermission keepers.WasmKeeper.SetParams(ctx, params) - _, err := keeper.Create(ctx, creator, hackatomWasm, nil) + _, _, err := keeper.Create(ctx, creator, hackatomWasm, nil) require.True(t, spec.expError.Is(err), err) if spec.expError != nil { return @@ -189,8 +187,8 @@ func TestEnforceValidPermissionsOnCreate(t *testing.T) { contractKeeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) - other := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) + other := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) onlyCreator := types.AccessTypeOnlyAddress.With(creator) onlyOther := types.AccessTypeOnlyAddress.With(other) @@ -249,7 +247,7 @@ func TestEnforceValidPermissionsOnCreate(t *testing.T) { params := types.DefaultParams() params.InstantiateDefaultPermission = spec.defaultPermssion keeper.SetParams(ctx, params) - codeID, err := contractKeeper.Create(ctx, creator, hackatomWasm, spec.requestedPermission) + codeID, _, err := contractKeeper.Create(ctx, creator, hackatomWasm, spec.requestedPermission) require.True(t, spec.expError.Is(err), err) if spec.expError == nil { codeInfo := keeper.GetCodeInfo(ctx, codeID) @@ -264,15 +262,15 @@ func TestCreateDuplicate(t *testing.T) { keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) // create one copy - contractID, err := keeper.Create(ctx, creator, hackatomWasm, nil) + contractID, _, err := keeper.Create(ctx, creator, hackatomWasm, nil) require.NoError(t, err) require.Equal(t, uint64(1), contractID) // create second copy - duplicateID, err := keeper.Create(ctx, creator, hackatomWasm, nil) + duplicateID, _, err := keeper.Create(ctx, creator, hackatomWasm, nil) require.NoError(t, err) require.Equal(t, uint64(2), duplicateID) @@ -292,18 +290,18 @@ func TestCreateWithSimulation(t *testing.T) { WithGasMeter(stypes.NewInfiniteGasMeter()) deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) // create this once in simulation mode - contractID, err := keepers.ContractKeeper.Create(ctx, creator, hackatomWasm, nil) + contractID, _, err := keepers.ContractKeeper.Create(ctx, creator, hackatomWasm, nil) require.NoError(t, err) require.Equal(t, uint64(1), contractID) // then try to create it in non-simulation mode (should not fail) ctx, keepers = CreateTestInput(t, false, AvailableCapabilities) ctx = ctx.WithGasMeter(sdk.NewGasMeter(10_000_000)) - creator = keepers.Faucet.NewFundedAccount(ctx, deposit...) - contractID, err = keepers.ContractKeeper.Create(ctx, creator, hackatomWasm, nil) + creator = keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) + contractID, _, err = keepers.ContractKeeper.Create(ctx, creator, hackatomWasm, nil) require.NoError(t, err) require.Equal(t, uint64(1), contractID) @@ -344,12 +342,12 @@ func TestCreateWithGzippedPayload(t *testing.T) { keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) wasmCode, err := os.ReadFile("./testdata/hackatom.wasm.gzip") require.NoError(t, err, "reading gzipped WASM code") - contractID, err := keeper.Create(ctx, creator, wasmCode, nil) + contractID, _, err := keeper.Create(ctx, creator, wasmCode, nil) require.NoError(t, err) require.Equal(t, uint64(1), contractID) // and verify content @@ -363,34 +361,30 @@ func TestCreateWithBrokenGzippedPayload(t *testing.T) { keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) wasmCode, err := os.ReadFile("./testdata/broken_crc.gzip") require.NoError(t, err, "reading gzipped WASM code") gm := sdk.NewInfiniteGasMeter() - contractID, err := keeper.Create(ctx.WithGasMeter(gm), creator, wasmCode, nil) + codeID, checksum, err := keeper.Create(ctx.WithGasMeter(gm), creator, wasmCode, nil) require.Error(t, err) - assert.Empty(t, contractID) + assert.Empty(t, codeID) + assert.Empty(t, checksum) assert.GreaterOrEqual(t, gm.GasConsumed(), sdk.Gas(121384)) // 809232 * 0.15 (default uncompress costs) = 121384 } func TestInstantiate(t *testing.T) { ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) - keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) - - codeID, err := keeper.Create(ctx, creator, hackatomWasm, nil) - require.NoError(t, err) - - _, _, bob := keyPubAddr() - _, _, fred := keyPubAddr() + creator := sdk.AccAddress(bytes.Repeat([]byte{1}, address.Len)) + keepers.Faucet.Fund(ctx, creator, deposit...) + example := StoreHackatomExampleContract(t, ctx, keepers) initMsg := HackatomExampleInitMsg{ - Verifier: fred, - Beneficiary: bob, + Verifier: RandomAccountAddress(t), + Beneficiary: RandomAccountAddress(t), } initMsgBz, err := json.Marshal(initMsg) require.NoError(t, err) @@ -399,25 +393,25 @@ func TestInstantiate(t *testing.T) { em := sdk.NewEventManager() // create with no balance is also legal - gotContractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx.WithEventManager(em), codeID, creator, nil, initMsgBz, "demo contract 1", nil) + gotContractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx.WithEventManager(em), example.CodeID, creator, nil, initMsgBz, "demo contract 1", nil) require.NoError(t, err) - require.Equal(t, "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr", gotContractAddr.String()) + require.Equal(t, "cosmos1xaq0tcwz9fsqmtxlpzwjn2zr8gw66ljjr079ltfc5pelepcs7sjsk28n5n", gotContractAddr.String()) gasAfter := ctx.GasMeter().GasConsumed() if types.EnableGasVerification { - require.Equal(t, uint64(0x18db5), gasAfter-gasBefore) + require.Equal(t, uint64(0x187b8), gasAfter-gasBefore) } // ensure it is stored properly info := keepers.WasmKeeper.GetContractInfo(ctx, gotContractAddr) require.NotNil(t, info) assert.Equal(t, creator.String(), info.Creator) - assert.Equal(t, codeID, info.CodeID) + assert.Equal(t, example.CodeID, info.CodeID) assert.Equal(t, "demo contract 1", info.Label) exp := []types.ContractCodeHistoryEntry{{ Operation: types.ContractCodeHistoryOperationTypeInit, - CodeID: codeID, + CodeID: example.CodeID, Updated: types.NewAbsoluteTxPosition(ctx), Msg: initMsgBz, }} @@ -439,12 +433,9 @@ func TestInstantiateWithDeposit(t *testing.T) { fred = bytes.Repeat([]byte{2}, types.SDKAddrLen) deposit = sdk.NewCoins(sdk.NewInt64Coin("denom", 100)) - initMsg = HackatomExampleInitMsg{Verifier: fred, Beneficiary: bob} + initMsg = mustMarshal(t, HackatomExampleInitMsg{Verifier: fred, Beneficiary: bob}) ) - initMsgBz, err := json.Marshal(initMsg) - require.NoError(t, err) - specs := map[string]struct { srcActor sdk.AccAddress expError bool @@ -472,11 +463,11 @@ func TestInstantiateWithDeposit(t *testing.T) { if spec.fundAddr { fundAccounts(t, ctx, accKeeper, bankKeeper, spec.srcActor, sdk.NewCoins(sdk.NewInt64Coin("denom", 200))) } - contractID, err := keeper.Create(ctx, spec.srcActor, hackatomWasm, nil) + contractID, _, err := keeper.Create(ctx, spec.srcActor, hackatomWasm, nil) require.NoError(t, err) // when - addr, _, err := keepers.ContractKeeper.Instantiate(ctx, contractID, spec.srcActor, nil, initMsgBz, "my label", deposit) + addr, _, err := keepers.ContractKeeper.Instantiate(ctx, contractID, spec.srcActor, nil, initMsg, "my label", deposit) // then if spec.expError { require.Error(t, err) @@ -527,6 +518,7 @@ func TestInstantiateWithPermissions(t *testing.T) { srcActor: myAddr, }, "onlyAddress with non matching address": { + srcActor: myAddr, srcPermission: types.AccessTypeOnlyAddress.With(otherAddr), expError: sdkerrors.ErrUnauthorized, }, @@ -537,7 +529,7 @@ func TestInstantiateWithPermissions(t *testing.T) { accKeeper, bankKeeper, keeper := keepers.AccountKeeper, keepers.BankKeeper, keepers.ContractKeeper fundAccounts(t, ctx, accKeeper, bankKeeper, spec.srcActor, deposit) - contractID, err := keeper.Create(ctx, myAddr, hackatomWasm, &spec.srcPermission) + contractID, _, err := keeper.Create(ctx, myAddr, hackatomWasm, &spec.srcPermission) require.NoError(t, err) _, _, err = keepers.ContractKeeper.Instantiate(ctx, contractID, spec.srcActor, nil, initMsgBz, "demo contract 1", nil) @@ -546,11 +538,195 @@ func TestInstantiateWithPermissions(t *testing.T) { } } +func TestInstantiateWithUniqueContractAddress(t *testing.T) { + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities) + example := InstantiateHackatomExampleContract(t, parentCtx, keepers) + otherExample := InstantiateReflectExampleContract(t, parentCtx, keepers) + initMsg := mustMarshal(t, HackatomExampleInitMsg{Verifier: example.VerifierAddr, Beneficiary: example.BeneficiaryAddr}) + + otherAddress := DeterministicAccountAddress(t, 1) + keepers.Faucet.Fund(parentCtx, otherAddress, sdk.NewInt64Coin("denom", 100000000)) + used := make(map[string]struct{}) + specs := map[string]struct { + codeID uint64 + sender sdk.AccAddress + label string + initMsg json.RawMessage + expErr error + }{ + "reject duplicate which generates the same address": { + codeID: example.CodeID, + sender: example.CreatorAddr, + label: example.Label, + initMsg: initMsg, + expErr: types.ErrDuplicate, + }, + "different sender": { + codeID: example.CodeID, + sender: otherAddress, + label: example.Label, + initMsg: initMsg, + }, + "different code": { + codeID: otherExample.CodeID, + sender: example.CreatorAddr, + label: example.Label, + initMsg: []byte(`{}`), + }, + "different label": { + codeID: example.CodeID, + sender: example.CreatorAddr, + label: "other label", + initMsg: initMsg, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + ctx, _ := parentCtx.CacheContext() + gotAddr, _, gotErr := keepers.ContractKeeper.Instantiate(ctx, spec.codeID, spec.sender, nil, spec.initMsg, spec.label, example.Deposit) + if spec.expErr != nil { + assert.ErrorIs(t, gotErr, spec.expErr) + return + } + require.NoError(t, gotErr) + expAddr := BuildContractAddress(keepers.WasmKeeper.GetCodeInfo(ctx, spec.codeID).CodeHash, spec.sender, spec.label) + assert.Equal(t, expAddr.String(), gotAddr.String()) + require.NotContains(t, used, gotAddr.String()) + used[gotAddr.String()] = struct{}{} + }) + } +} + +func TestInstantiateWithAccounts(t *testing.T) { + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities) + example := StoreHackatomExampleContract(t, parentCtx, keepers) + require.Equal(t, uint64(1), example.CodeID) + initMsg := mustMarshal(t, HackatomExampleInitMsg{Verifier: RandomAccountAddress(t), Beneficiary: RandomAccountAddress(t)}) + + senderAddr := DeterministicAccountAddress(t, 1) + keepers.Faucet.Fund(parentCtx, senderAddr, sdk.NewInt64Coin("denom", 100000000)) + const myLabel = "testing" + contractAddr := BuildContractAddress(example.Checksum, senderAddr, myLabel) + + lastAccountNumber := keepers.AccountKeeper.GetAccount(parentCtx, senderAddr).GetAccountNumber() + + specs := map[string]struct { + acceptList Option + account authtypes.AccountI + initBalance sdk.Coin + deposit sdk.Coins + expErr error + expAccount authtypes.AccountI + expBalance sdk.Coins + }{ + "unused BaseAccount exists": { + account: authtypes.NewBaseAccount(contractAddr, nil, 0, 0), + initBalance: sdk.NewInt64Coin("denom", 100000000), + expAccount: authtypes.NewBaseAccount(contractAddr, nil, lastAccountNumber+1, 0), // +1 for next seq + expBalance: sdk.NewCoins(sdk.NewInt64Coin("denom", 100000000)), + }, + "BaseAccount with sequence exists": { + account: authtypes.NewBaseAccount(contractAddr, nil, 0, 1), + expErr: types.ErrAccountExists, + }, + "BaseAccount with pubkey exists": { + account: authtypes.NewBaseAccount(contractAddr, &ed25519.PubKey{}, 0, 0), + expErr: types.ErrAccountExists, + }, + "no account existed": { + expAccount: authtypes.NewBaseAccount(contractAddr, nil, lastAccountNumber+1, 0), // +1 for next seq, + expBalance: sdk.NewCoins(), + }, + "no account existed before create with deposit": { + expAccount: authtypes.NewBaseAccount(contractAddr, nil, lastAccountNumber+1, 0), // +1 for next seq + deposit: sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(1_000))), + expBalance: sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(1_000))), + }, + "prune listed DelayedVestingAccount gets overwritten": { + account: vestingtypes.NewDelayedVestingAccount( + authtypes.NewBaseAccount(contractAddr, nil, 0, 0), + sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(1_000))), time.Now().Add(30*time.Hour).Unix()), + initBalance: sdk.NewCoin("denom", sdk.NewInt(1_000)), + deposit: sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(1))), + expAccount: authtypes.NewBaseAccount(contractAddr, nil, lastAccountNumber+2, 0), // +1 for next seq, +1 for spec.account created + expBalance: sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(1))), + }, + "prune listed ContinuousVestingAccount gets overwritten": { + account: vestingtypes.NewContinuousVestingAccount( + authtypes.NewBaseAccount(contractAddr, nil, 0, 0), + sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(1_000))), time.Now().Add(time.Hour).Unix(), time.Now().Add(2*time.Hour).Unix()), + initBalance: sdk.NewCoin("denom", sdk.NewInt(1_000)), + deposit: sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(1))), + expAccount: authtypes.NewBaseAccount(contractAddr, nil, lastAccountNumber+2, 0), // +1 for next seq, +1 for spec.account created + expBalance: sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(1))), + }, + "prune listed account without balance gets overwritten": { + account: vestingtypes.NewContinuousVestingAccount( + authtypes.NewBaseAccount(contractAddr, nil, 0, 0), + sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(0))), time.Now().Add(time.Hour).Unix(), time.Now().Add(2*time.Hour).Unix()), + expAccount: authtypes.NewBaseAccount(contractAddr, nil, lastAccountNumber+2, 0), // +1 for next seq, +1 for spec.account created + expBalance: sdk.NewCoins(), + }, + "unknown account type creates error": { + account: authtypes.NewModuleAccount( + authtypes.NewBaseAccount(contractAddr, nil, 0, 0), + "testing", + ), + initBalance: sdk.NewCoin("denom", sdk.NewInt(1_000)), + expErr: types.ErrAccountExists, + }, + "with option used to set non default type to accept list": { + acceptList: WithAcceptedAccountTypesOnContractInstantiation(&vestingtypes.DelayedVestingAccount{}), + account: vestingtypes.NewDelayedVestingAccount( + authtypes.NewBaseAccount(contractAddr, nil, 0, 0), + sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(1_000))), time.Now().Add(30*time.Hour).Unix()), + initBalance: sdk.NewCoin("denom", sdk.NewInt(1_000)), + deposit: sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(1))), + expAccount: vestingtypes.NewDelayedVestingAccount(authtypes.NewBaseAccount(contractAddr, nil, lastAccountNumber+1, 0), + sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(1_000))), time.Now().Add(30*time.Hour).Unix()), + expBalance: sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(1_001))), + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + ctx, _ := parentCtx.CacheContext() + if spec.account != nil { + keepers.AccountKeeper.SetAccount(ctx, keepers.AccountKeeper.NewAccount(ctx, spec.account)) + } + if !spec.initBalance.IsNil() { + keepers.Faucet.Fund(ctx, spec.account.GetAddress(), spec.initBalance) + } + if spec.acceptList != nil { + spec.acceptList.apply(keepers.WasmKeeper) + } + defer func() { + if spec.acceptList != nil { // reset + WithAcceptedAccountTypesOnContractInstantiation(&authtypes.BaseAccount{}).apply(keepers.WasmKeeper) + } + }() + // when + gotAddr, _, gotErr := keepers.ContractKeeper.Instantiate(ctx, 1, senderAddr, nil, initMsg, myLabel, spec.deposit) + if spec.expErr != nil { + assert.ErrorIs(t, gotErr, spec.expErr) + return + } + require.NoError(t, gotErr) + assert.Equal(t, contractAddr, gotAddr) + // and + gotAcc := keepers.AccountKeeper.GetAccount(ctx, contractAddr) + assert.Equal(t, spec.expAccount, gotAcc) + // and + gotBalance := keepers.BankKeeper.GetAllBalances(ctx, contractAddr) + assert.Equal(t, spec.expBalance, gotBalance) + }) + } +} + func TestInstantiateWithNonExistingCodeID(t *testing.T) { ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) initMsg := HackatomExampleInitMsg{} initMsgBz, err := json.Marshal(initMsg) @@ -585,13 +761,14 @@ func TestExecute(t *testing.T) { deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit.Add(deposit...)...) - fred := keepers.Faucet.NewFundedAccount(ctx, topUp...) + creator := DeterministicAccountAddress(t, 1) + keepers.Faucet.Fund(ctx, creator, deposit.Add(deposit...)...) + fred := keepers.Faucet.NewFundedRandomAccount(ctx, topUp...) + bob := RandomAccountAddress(t) - contractID, err := keeper.Create(ctx, creator, hackatomWasm, nil) + contractID, _, err := keeper.Create(ctx, creator, hackatomWasm, nil) require.NoError(t, err) - _, _, bob := keyPubAddr() initMsg := HackatomExampleInitMsg{ Verifier: fred, Beneficiary: bob, @@ -601,7 +778,8 @@ func TestExecute(t *testing.T) { addr, _, err := keepers.ContractKeeper.Instantiate(ctx, contractID, creator, nil, initMsgBz, "demo contract 3", deposit) require.NoError(t, err) - require.Equal(t, "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr", addr.String()) + // cosmos1eycfqpgtcp4gc9g24cvg6useyncxspq8qurv2z7cs0wzcgvmffaquzwe2e build with code-id 1, DeterministicAccountAddress(t, 1) and label `demo contract 3` + require.Equal(t, "cosmos1eycfqpgtcp4gc9g24cvg6useyncxspq8qurv2z7cs0wzcgvmffaquzwe2e", addr.String()) // ensure bob doesn't exist bobAcct := accKeeper.GetAccount(ctx, bob) @@ -638,7 +816,7 @@ func TestExecute(t *testing.T) { // make sure gas is properly deducted from ctx gasAfter := ctx.GasMeter().GasConsumed() if types.EnableGasVerification { - require.Equal(t, uint64(0x17cd2), gasAfter-gasBefore) + require.Equal(t, uint64(0x17d87), gasAfter-gasBefore) } // ensure bob now exists and got both payments released bobAcct = accKeeper.GetAccount(ctx, bob) @@ -725,7 +903,7 @@ func TestExecuteWithDeposit(t *testing.T) { if spec.fundAddr { fundAccounts(t, ctx, accKeeper, bankKeeper, spec.srcActor, sdk.NewCoins(sdk.NewInt64Coin("denom", 200))) } - codeID, err := keeper.Create(ctx, spec.srcActor, hackatomWasm, nil) + codeID, _, err := keeper.Create(ctx, spec.srcActor, hackatomWasm, nil) require.NoError(t, err) initMsg := HackatomExampleInitMsg{Verifier: spec.srcActor, Beneficiary: spec.beneficiary} @@ -755,7 +933,8 @@ func TestExecuteWithNonExistingAddress(t *testing.T) { keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit.Add(deposit...)...) + creator := DeterministicAccountAddress(t, 1) + keepers.Faucet.Fund(ctx, creator, deposit.Add(deposit...)...) // unauthorized - trialCtx so we don't change state nonExistingAddress := RandomAccountAddress(t) @@ -769,10 +948,11 @@ func TestExecuteWithPanic(t *testing.T) { deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit.Add(deposit...)...) - fred := keepers.Faucet.NewFundedAccount(ctx, topUp...) + creator := DeterministicAccountAddress(t, 1) + keepers.Faucet.Fund(ctx, creator, deposit.Add(deposit...)...) + fred := keepers.Faucet.NewFundedRandomAccount(ctx, topUp...) - contractID, err := keeper.Create(ctx, creator, hackatomWasm, nil) + contractID, _, err := keeper.Create(ctx, creator, hackatomWasm, nil) require.NoError(t, err) _, _, bob := keyPubAddr() @@ -800,10 +980,11 @@ func TestExecuteWithCpuLoop(t *testing.T) { deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit.Add(deposit...)...) - fred := keepers.Faucet.NewFundedAccount(ctx, topUp...) + creator := DeterministicAccountAddress(t, 1) + keepers.Faucet.Fund(ctx, creator, deposit.Add(deposit...)...) + fred := keepers.Faucet.NewFundedRandomAccount(ctx, topUp...) - contractID, err := keeper.Create(ctx, creator, hackatomWasm, nil) + contractID, _, err := keeper.Create(ctx, creator, hackatomWasm, nil) require.NoError(t, err) _, _, bob := keyPubAddr() @@ -841,10 +1022,11 @@ func TestExecuteWithStorageLoop(t *testing.T) { deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit.Add(deposit...)...) - fred := keepers.Faucet.NewFundedAccount(ctx, topUp...) + creator := DeterministicAccountAddress(t, 1) + keepers.Faucet.Fund(ctx, creator, deposit.Add(deposit...)...) + fred := keepers.Faucet.NewFundedRandomAccount(ctx, topUp...) - contractID, err := keeper.Create(ctx, creator, hackatomWasm, nil) + contractID, _, err := keeper.Create(ctx, creator, hackatomWasm, nil) require.NoError(t, err) _, _, bob := keyPubAddr() @@ -877,21 +1059,23 @@ func TestExecuteWithStorageLoop(t *testing.T) { } func TestMigrate(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit.Add(deposit...)...) - fred := keepers.Faucet.NewFundedAccount(ctx, topUp...) - - originalCodeID := StoreHackatomExampleContract(t, ctx, keepers).CodeID - newCodeID := StoreHackatomExampleContract(t, ctx, keepers).CodeID - ibcCodeID := StoreIBCReflectContract(t, ctx, keepers).CodeID + creator := DeterministicAccountAddress(t, 1) + keepers.Faucet.Fund(parentCtx, creator, deposit.Add(deposit...)...) + fred := DeterministicAccountAddress(t, 2) + keepers.Faucet.Fund(parentCtx, fred, topUp...) + + originalCodeID := StoreHackatomExampleContract(t, parentCtx, keepers).CodeID + newCodeID := StoreHackatomExampleContract(t, parentCtx, keepers).CodeID + ibcCodeID := StoreIBCReflectContract(t, parentCtx, keepers).CodeID require.NotEqual(t, originalCodeID, newCodeID) - restrictedCodeExample := StoreHackatomExampleContract(t, ctx, keepers) - require.NoError(t, keeper.SetAccessConfig(ctx, restrictedCodeExample.CodeID, restrictedCodeExample.CreatorAddr, types.AllowNobody)) + restrictedCodeExample := StoreHackatomExampleContract(t, parentCtx, keepers) + require.NoError(t, keeper.SetAccessConfig(parentCtx, restrictedCodeExample.CodeID, restrictedCodeExample.CreatorAddr, types.AllowNobody)) require.NotEqual(t, originalCodeID, restrictedCodeExample.CodeID) anyAddr := RandomAccountAddress(t) @@ -1017,7 +1201,7 @@ func TestMigrate(t *testing.T) { "fail when no IBC callbacks": { admin: fred, caller: fred, - initMsg: IBCReflectInitMsg{ReflectCodeID: StoreReflectContract(t, ctx, keepers)}.GetBytes(t), + initMsg: IBCReflectInitMsg{ReflectCodeID: StoreReflectContract(t, parentCtx, keepers).CodeID}.GetBytes(t), fromCodeID: ibcCodeID, toCodeID: newCodeID, migrateMsg: migMsgBz, @@ -1025,10 +1209,13 @@ func TestMigrate(t *testing.T) { }, } + blockHeight := parentCtx.BlockHeight() for msg, spec := range specs { t.Run(msg, func(t *testing.T) { // given a contract instance - ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) + ctx, _ := parentCtx.WithBlockHeight(blockHeight + 1).CacheContext() + blockHeight++ + contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, spec.fromCodeID, creator, spec.admin, spec.initMsg, "demo contract", nil) require.NoError(t, err) if spec.overrideContractAddr != nil { @@ -1109,15 +1296,16 @@ func TestMigrateWithDispatchedMessage(t *testing.T) { keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit.Add(deposit...)...) - fred := keepers.Faucet.NewFundedAccount(ctx, sdk.NewInt64Coin("denom", 5000)) + creator := DeterministicAccountAddress(t, 1) + keepers.Faucet.Fund(ctx, creator, deposit.Add(deposit...)...) + fred := keepers.Faucet.NewFundedRandomAccount(ctx, sdk.NewInt64Coin("denom", 5000)) burnerCode, err := os.ReadFile("./testdata/burner.wasm") require.NoError(t, err) - originalContractID, err := keeper.Create(ctx, creator, hackatomWasm, nil) + originalContractID, _, err := keeper.Create(ctx, creator, hackatomWasm, nil) require.NoError(t, err) - burnerContractID, err := keeper.Create(ctx, creator, burnerCode, nil) + burnerContractID, _, err := keeper.Create(ctx, creator, burnerCode, nil) require.NoError(t, err) require.NotEqual(t, originalContractID, burnerContractID) @@ -1279,9 +1467,10 @@ func TestSudo(t *testing.T) { accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit.Add(deposit...)...) + creator := DeterministicAccountAddress(t, 1) + keepers.Faucet.Fund(ctx, creator, deposit.Add(deposit...)...) - contractID, err := keeper.Create(ctx, creator, hackatomWasm, nil) + contractID, _, err := keeper.Create(ctx, creator, hackatomWasm, nil) require.NoError(t, err) _, _, bob := keyPubAddr() @@ -1294,7 +1483,7 @@ func TestSudo(t *testing.T) { require.NoError(t, err) addr, _, err := keepers.ContractKeeper.Instantiate(ctx, contractID, creator, nil, initMsgBz, "demo contract 3", deposit) require.NoError(t, err) - require.Equal(t, "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr", addr.String()) + require.Equal(t, "cosmos1eycfqpgtcp4gc9g24cvg6useyncxspq8qurv2z7cs0wzcgvmffaquzwe2e", addr.String()) // the community is broke _, _, community := keyPubAddr() @@ -1358,15 +1547,16 @@ func mustMarshal(t *testing.T, r interface{}) []byte { } func TestUpdateContractAdmin(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit.Add(deposit...)...) - fred := keepers.Faucet.NewFundedAccount(ctx, topUp...) + creator := DeterministicAccountAddress(t, 1) + keepers.Faucet.Fund(parentCtx, creator, deposit.Add(deposit...)...) + fred := keepers.Faucet.NewFundedRandomAccount(parentCtx, topUp...) - originalContractID, err := keeper.Create(ctx, creator, hackatomWasm, nil) + originalContractID, _, err := keeper.Create(parentCtx, creator, hackatomWasm, nil) require.NoError(t, err) _, _, anyAddr := keyPubAddr() @@ -1409,6 +1599,7 @@ func TestUpdateContractAdmin(t *testing.T) { } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { + ctx, _ := parentCtx.CacheContext() addr, _, err := keepers.ContractKeeper.Instantiate(ctx, originalContractID, creator, spec.instAdmin, initMsgBz, "demo contract", nil) require.NoError(t, err) if spec.overrideContractAddr != nil { @@ -1426,15 +1617,16 @@ func TestUpdateContractAdmin(t *testing.T) { } func TestClearContractAdmin(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit.Add(deposit...)...) - fred := keepers.Faucet.NewFundedAccount(ctx, topUp...) + creator := DeterministicAccountAddress(t, 1) + keepers.Faucet.Fund(parentCtx, creator, deposit.Add(deposit...)...) + fred := keepers.Faucet.NewFundedRandomAccount(parentCtx, topUp...) - originalContractID, err := keeper.Create(ctx, creator, hackatomWasm, nil) + originalContractID, _, err := keeper.Create(parentCtx, creator, hackatomWasm, nil) require.NoError(t, err) _, _, anyAddr := keyPubAddr() @@ -1472,6 +1664,7 @@ func TestClearContractAdmin(t *testing.T) { } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { + ctx, _ := parentCtx.CacheContext() addr, _, err := keepers.ContractKeeper.Instantiate(ctx, originalContractID, creator, spec.instAdmin, initMsgBz, "demo contract", nil) require.NoError(t, err) if spec.overrideContractAddr != nil { @@ -1806,52 +1999,103 @@ func TestQueryIsolation(t *testing.T) { } func TestBuildContractAddress(t *testing.T) { + x, y := sdk.GetConfig().GetBech32AccountAddrPrefix(), sdk.GetConfig().GetBech32AccountPubPrefix() + t.Cleanup(func() { + sdk.GetConfig().SetBech32PrefixForAccount(x, y) + }) + sdk.GetConfig().SetBech32PrefixForAccount("purple", "purple") + + // test vectors from https://gist.github.com/webmaster128/e4d401d414bd0e7e6f70482f11877fbe specs := map[string]struct { - srcCodeID uint64 - srcInstanceID uint64 - expectedAddr string + checksum []byte + label string + creator string + expAddress string }{ - "initial contract": { - srcCodeID: 1, - srcInstanceID: 1, - expectedAddr: "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr", - }, - "demo value": { - srcCodeID: 1, - srcInstanceID: 100, - expectedAddr: "cosmos1mujpjkwhut9yjw4xueyugc02evfv46y0dtmnz4lh8xxkkdapym9stu5qm8", - }, - "both below max": { - srcCodeID: math.MaxUint32 - 1, - srcInstanceID: math.MaxUint32 - 1, - }, - "both at max": { - srcCodeID: math.MaxUint32, - srcInstanceID: math.MaxUint32, - }, - "codeID > max u32": { - srcCodeID: math.MaxUint32 + 1, - srcInstanceID: 17, - expectedAddr: "cosmos1673hrexz4h6s0ft04l96ygq667djzh2nsr335kstjp49x5dk6rpsf5t0le", - }, - "instanceID > max u32": { - srcCodeID: 22, - srcInstanceID: math.MaxUint32 + 1, - expectedAddr: "cosmos10q3pgfvmeyy0veekgtqhxujxkhz0vm9zmalqgc7evrhj68q3l62qrdfg4m", + "initial account addr example": { + checksum: fromHex("13A1FC994CC6D1C81B746EE0C0FF6F90043875E0BF1D9BE6B7D779FC978DC2A5"), + label: "instance 1", + creator: "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", + expAddress: "purple1jukvumwqfxapueg6un6rtmafxktcluzv70xc3edz2m5t3slgw49qrmhc03", + }, + "account addr with different label": { + checksum: fromHex("13A1FC994CC6D1C81B746EE0C0FF6F90043875E0BF1D9BE6B7D779FC978DC2A5"), + label: "instance 2", + creator: "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", + expAddress: "purple1jpc2w2vu2t6k7u09p6v8e3w28ptnzvvt2snu5rytlj8qya27dq5sjkwm06", + }, + "initial contract addr example": { + checksum: fromHex("13A1FC994CC6D1C81B746EE0C0FF6F90043875E0BF1D9BE6B7D779FC978DC2A5"), + label: "instance 1", + creator: "purple1nxvenxve42424242hwamhwamenxvenxvmhwamhwaamhwamhwlllsatsy6m", + expAddress: "purple1wde5zlcveuh79w37w5g244qu9xja3hgfulyfkjvkxvwvjzgd5l3qfraz3c", + }, + "contract addr with different label": { + checksum: fromHex("13A1FC994CC6D1C81B746EE0C0FF6F90043875E0BF1D9BE6B7D779FC978DC2A5"), + label: "instance 2", + creator: "purple1nxvenxve42424242hwamhwamenxvenxvmhwamhwaamhwamhwlllsatsy6m", + expAddress: "purple1vae2kf0r3ehtq5q2jmfkg7wp4ckxwrw8dv4pvazz5nlzzu05lxzq878fa9", + }, + "account addr with different checksum": { + checksum: fromHex("1DA6C16DE2CBAF7AD8CBB66F0925BA33F5C278CB2491762D04658C1480EA229B"), + label: "instance 1", + creator: "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", + expAddress: "purple1gmgvt9levtn52mpfal3gl5tv60f47zez3wgczrh5c9352sfm9crs47zt0k", + }, + "account addr with different checksum and label": { + checksum: fromHex("1DA6C16DE2CBAF7AD8CBB66F0925BA33F5C278CB2491762D04658C1480EA229B"), + label: "instance 2", + creator: "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", + expAddress: "purple13jrcqxknt05rhdxmegjzjel666yay6fj3xvfp6445k7a9q2km4wqa7ss34", + }, + "contract addr with different checksum": { + checksum: fromHex("1DA6C16DE2CBAF7AD8CBB66F0925BA33F5C278CB2491762D04658C1480EA229B"), + label: "instance 1", + creator: "purple1nxvenxve42424242hwamhwamenxvenxvmhwamhwaamhwamhwlllsatsy6m", + expAddress: "purple1lu0lf6wmqeuwtrx93ptzvf4l0dyyz2vz6s8h5y9cj42fvhsmracq49pww9", + }, + "contract addr with different checksum and label": { + checksum: fromHex("1DA6C16DE2CBAF7AD8CBB66F0925BA33F5C278CB2491762D04658C1480EA229B"), + label: "instance 2", + creator: "purple1nxvenxve42424242hwamhwamenxvenxvmhwamhwaamhwamhwlllsatsy6m", + expAddress: "purple1zmerc8a9ml2au29rq3knuu35fktef3akceurckr6pf370n0wku7sw3c9mj", + }, + // regression tests + "min label size": { + checksum: fromHex("13A1FC994CC6D1C81B746EE0C0FF6F90043875E0BF1D9BE6B7D779FC978DC2A5"), + label: "x", + creator: "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", + expAddress: "purple16pc8gt824lmp3dh2sxvttj0ykcs02n5p3ldswhv3j7y853gghlfq7mqeh9", + }, + "max label size": { + checksum: fromHex("13A1FC994CC6D1C81B746EE0C0FF6F90043875E0BF1D9BE6B7D779FC978DC2A5"), + label: strings.Repeat("x", types.MaxLabelSize), + creator: "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", + expAddress: "purple1prkdvjmvv4s3tnppfxmlpj259v9cplf3wws4qq9qd7w3s4yqzqeqem4759", }, } for name, spec := range specs { t.Run(name, func(t *testing.T) { - gotAddr := BuildContractAddress(spec.srcCodeID, spec.srcInstanceID) - require.NotNil(t, gotAddr) - assert.Nil(t, sdk.VerifyAddressFormat(gotAddr)) - if len(spec.expectedAddr) > 0 { - require.Equal(t, spec.expectedAddr, gotAddr.String()) - } + creatorAddr, err := sdk.AccAddressFromBech32(spec.creator) + require.NoError(t, err) + + // when + gotAddr := BuildContractAddress(spec.checksum, creatorAddr, spec.label) + + require.Equal(t, spec.expAddress, gotAddr.String()) + require.NoError(t, sdk.VerifyAddressFormat(gotAddr)) }) } } +func fromHex(s string) []byte { + r, err := hex.DecodeString(s) + if err != nil { + panic(err) + } + return r +} + func TestSetAccessConfig(t *testing.T) { parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities) k := keepers.WasmKeeper diff --git a/x/wasm/keeper/legacy_querier_test.go b/x/wasm/keeper/legacy_querier_test.go index 1f22a5082c..1b6006fa30 100644 --- a/x/wasm/keeper/legacy_querier_test.go +++ b/x/wasm/keeper/legacy_querier_test.go @@ -21,13 +21,13 @@ func TestLegacyQueryContractState(t *testing.T) { keeper := keepers.WasmKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit.Add(deposit...)...) - anyAddr := keepers.Faucet.NewFundedAccount(ctx, sdk.NewInt64Coin("denom", 5000)) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit.Add(deposit...)...) + anyAddr := keepers.Faucet.NewFundedRandomAccount(ctx, sdk.NewInt64Coin("denom", 5000)) wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) - contractID, err := keepers.ContractKeeper.Create(ctx, creator, wasmCode, nil) + contractID, _, err := keepers.ContractKeeper.Create(ctx, creator, wasmCode, nil) require.NoError(t, err) _, _, bob := keyPubAddr() @@ -159,13 +159,13 @@ func TestLegacyQueryContractListByCodeOrdering(t *testing.T) { deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 1000000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 500)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit.Add(deposit...)...) - anyAddr := keepers.Faucet.NewFundedAccount(ctx, topUp...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit.Add(deposit...)...) + anyAddr := keepers.Faucet.NewFundedRandomAccount(ctx, topUp...) wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) - codeID, err := keepers.ContractKeeper.Create(ctx, creator, wasmCode, nil) + codeID, _, err := keepers.ContractKeeper.Create(ctx, creator, wasmCode, nil) require.NoError(t, err) _, _, bob := keyPubAddr() diff --git a/x/wasm/keeper/migrations.go b/x/wasm/keeper/migrations.go new file mode 100644 index 0000000000..4d218d504a --- /dev/null +++ b/x/wasm/keeper/migrations.go @@ -0,0 +1,27 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/CosmWasm/wasmd/x/wasm/types" +) + +// Migrator is a struct for handling in-place store migrations. +type Migrator struct { + keeper *Keeper +} + +// NewMigrator returns a new Migrator. +func NewMigrator(keeper *Keeper) Migrator { + return Migrator{keeper: keeper} +} + +var keyLastInstanceID = append(types.SequenceKeyPrefix, []byte("lastContractId")...) + +// Migrate1to2 migrates from version 1 to 2. +// Remove the unused sequence for address generation +func (m Migrator) Migrate1to2(ctx sdk.Context) error { + store := ctx.KVStore(m.keeper.storeKey) + store.Delete(keyLastInstanceID) + return nil +} diff --git a/x/wasm/keeper/migrations_test.go b/x/wasm/keeper/migrations_test.go new file mode 100644 index 0000000000..bc9110a3b3 --- /dev/null +++ b/x/wasm/keeper/migrations_test.go @@ -0,0 +1,20 @@ +package keeper + +import ( + "testing" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/assert" +) + +func TestMigrateV1ToV2(t *testing.T) { + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) + store := ctx.KVStore(keepers.WasmKeeper.storeKey) + store.Set(keyLastInstanceID, sdk.Uint64ToBigEndian(100)) + + // when + NewMigrator(keepers.WasmKeeper).Migrate1to2(ctx) + + // then + assert.False(t, store.Has(keyLastInstanceID)) +} diff --git a/x/wasm/keeper/msg_server.go b/x/wasm/keeper/msg_server.go index 1c45ff52ec..8c2a592ebf 100644 --- a/x/wasm/keeper/msg_server.go +++ b/x/wasm/keeper/msg_server.go @@ -32,13 +32,14 @@ func (m msgServer) StoreCode(goCtx context.Context, msg *types.MsgStoreCode) (*t sdk.NewAttribute(sdk.AttributeKeySender, msg.Sender), )) - codeID, err := m.keeper.Create(ctx, senderAddr, msg.WASMByteCode, msg.InstantiatePermission) + codeID, checksum, err := m.keeper.Create(ctx, senderAddr, msg.WASMByteCode, msg.InstantiatePermission) if err != nil { return nil, err } return &types.MsgStoreCodeResponse{ - CodeID: codeID, + CodeID: codeID, + Checksum: checksum, }, nil } diff --git a/x/wasm/keeper/msg_server_integration_test.go b/x/wasm/keeper/msg_server_integration_test.go new file mode 100644 index 0000000000..dde8ae7744 --- /dev/null +++ b/x/wasm/keeper/msg_server_integration_test.go @@ -0,0 +1,46 @@ +package keeper_test + +import ( + "crypto/sha256" + _ "embed" + "testing" + + "github.com/cosmos/cosmos-sdk/testutil/testdata" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + + "github.com/CosmWasm/wasmd/app" + "github.com/CosmWasm/wasmd/x/wasm/types" +) + +//go:embed testdata/reflect.wasm +var wasmContract []byte + +func TestStoreCode(t *testing.T) { + wasmApp := app.Setup(false) + ctx := wasmApp.BaseApp.NewContext(false, tmproto.Header{}) + _, _, sender := testdata.KeyTestPubAddr() + msg := types.MsgStoreCodeFixture(func(m *types.MsgStoreCode) { + m.WASMByteCode = wasmContract + m.Sender = sender.String() + }) + + // when + rsp, err := wasmApp.MsgServiceRouter().Handler(msg)(ctx, msg) + + // then + require.NoError(t, err) + var result types.MsgStoreCodeResponse + require.NoError(t, wasmApp.AppCodec().Unmarshal(rsp.Data, &result)) + assert.Equal(t, uint64(1), result.CodeID) + expHash := sha256.Sum256(wasmContract) + assert.Equal(t, expHash[:], result.Checksum) + // and + info := wasmApp.WasmKeeper.GetCodeInfo(ctx, 1) + assert.NotNil(t, info) + assert.Equal(t, expHash[:], info.CodeHash) + assert.Equal(t, sender.String(), info.Creator) + assert.Equal(t, types.DefaultParams().InstantiateDefaultPermission.With(sender), info.InstantiateConfig) +} diff --git a/x/wasm/keeper/options.go b/x/wasm/keeper/options.go index c3d9d1248e..e6119b4478 100644 --- a/x/wasm/keeper/options.go +++ b/x/wasm/keeper/options.go @@ -2,7 +2,9 @@ package keeper import ( "fmt" + "reflect" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/prometheus/client_golang/prometheus" "github.com/CosmWasm/wasmd/x/wasm/types" @@ -89,11 +91,25 @@ func WithMessageEncoders(x *MessageEncoders) Option { // WithCoinTransferrer is an optional constructor parameter to set a custom coin transferrer func WithCoinTransferrer(x CoinTransferrer) Option { + if x == nil { + panic("must not be nil") + } return optsFn(func(k *Keeper) { k.bank = x }) } +// WithCoinPruner is an optional constructor parameter to set a custom type that handles balances +// for accounts pruned on contract instantiate +func WithCoinPruner(x CoinPruner) Option { + if x == nil { + panic("must not be nil") + } + return optsFn(func(k *Keeper) { + k.coinPruner = x + }) +} + func WithVMCacheMetrics(r prometheus.Registerer) Option { return optsFn(func(k *Keeper) { NewWasmVMMetricsCollector(k.wasmVM).Register(r) @@ -104,6 +120,9 @@ func WithVMCacheMetrics(r prometheus.Registerer) Option { // When the "gas multiplier" for wasmvm gas conversion is modified inside the new register, // make sure to also use `WithApiCosts` option for non default values func WithGasRegister(x GasRegister) Option { + if x == nil { + panic("must not be nil") + } return optsFn(func(k *Keeper) { k.gasRegister = x }) @@ -123,3 +142,42 @@ func WithMaxQueryStackSize(m uint32) Option { k.maxQueryStackSize = m }) } + +// WithAcceptedAccountTypesOnContractInstantiation sets the accepted account types. Account types of this list won't be overwritten or cause a failure +// when they exist for an address on contract instantiation. +// +// Values should be references and contain the `*authtypes.BaseAccount` as default bank account type. +func WithAcceptedAccountTypesOnContractInstantiation(accts ...authtypes.AccountI) Option { + m := asTypeMap(accts) + return optsFn(func(k *Keeper) { + k.acceptedAccountTypes = m + }) +} + +// WithPruneAccountTypesOnContractInstantiation sets the account types that should be cleared. Account types of this list +// will be overwritten with the BaseAccount type and their balance burned, when they exist for an address on contract +// instantiation. +// +// Values should be references and contain the `*vestingtypes.DelayedVestingAccount`, `*vestingtypes.ContinuousVestingAccount` +// as post genesis account types with an open address range. +func WithPruneAccountTypesOnContractInstantiation(accts ...authtypes.AccountI) Option { + m := asTypeMap(accts) + return optsFn(func(k *Keeper) { + k.pruneAccountTypes = m + }) +} + +func asTypeMap(accts []authtypes.AccountI) map[reflect.Type]struct{} { + m := make(map[reflect.Type]struct{}, len(accts)) + for _, a := range accts { + if a == nil { + panic(types.ErrEmpty.Wrap("address")) + } + at := reflect.TypeOf(a) + if _, exists := m[at]; exists { + panic(types.ErrDuplicate.Wrapf("%T", a)) + } + m[at] = struct{}{} + } + return m +} diff --git a/x/wasm/keeper/options_test.go b/x/wasm/keeper/options_test.go index 07195e0468..b4c7f0861e 100644 --- a/x/wasm/keeper/options_test.go +++ b/x/wasm/keeper/options_test.go @@ -1,9 +1,13 @@ package keeper import ( + "reflect" "testing" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" + bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" distributionkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" @@ -81,10 +85,36 @@ func TestConstructorOptions(t *testing.T) { assert.IsType(t, uint32(1), k.maxQueryStackSize) }, }, + "accepted account types": { + srcOpt: WithAcceptedAccountTypesOnContractInstantiation(&authtypes.BaseAccount{}, &vestingtypes.ContinuousVestingAccount{}), + verify: func(t *testing.T, k Keeper) { + exp := map[reflect.Type]struct{}{ + reflect.TypeOf(&authtypes.BaseAccount{}): {}, + reflect.TypeOf(&vestingtypes.ContinuousVestingAccount{}): {}, + } + assert.Equal(t, exp, k.acceptedAccountTypes) + }, + }, + "prune account types": { + srcOpt: WithPruneAccountTypesOnContractInstantiation(&authtypes.BaseAccount{}, &vestingtypes.ContinuousVestingAccount{}), + verify: func(t *testing.T, k Keeper) { + exp := map[reflect.Type]struct{}{ + reflect.TypeOf(&authtypes.BaseAccount{}): {}, + reflect.TypeOf(&vestingtypes.ContinuousVestingAccount{}): {}, + } + assert.Equal(t, exp, k.pruneAccountTypes) + }, + }, + "coin pruner": { + srcOpt: WithCoinPruner(CoinBurner{}), + verify: func(t *testing.T, k Keeper) { + assert.Equal(t, CoinBurner{}, k.coinPruner) + }, + }, } for name, spec := range specs { t.Run(name, func(t *testing.T) { - k := NewKeeper(nil, nil, paramtypes.NewSubspace(nil, nil, nil, nil, ""), authkeeper.AccountKeeper{}, nil, stakingkeeper.Keeper{}, distributionkeeper.Keeper{}, nil, nil, nil, nil, nil, nil, "tempDir", types.DefaultWasmConfig(), AvailableCapabilities, spec.srcOpt) + k := NewKeeper(nil, nil, paramtypes.NewSubspace(nil, nil, nil, nil, ""), authkeeper.AccountKeeper{}, &bankkeeper.BaseKeeper{}, stakingkeeper.Keeper{}, distributionkeeper.Keeper{}, nil, nil, nil, nil, nil, nil, "tempDir", types.DefaultWasmConfig(), AvailableCapabilities, spec.srcOpt) spec.verify(t, k) }) } diff --git a/x/wasm/keeper/proposal_handler.go b/x/wasm/keeper/proposal_handler.go index 905b073d5e..29b736b00b 100644 --- a/x/wasm/keeper/proposal_handler.go +++ b/x/wasm/keeper/proposal_handler.go @@ -64,7 +64,7 @@ func handleStoreCodeProposal(ctx sdk.Context, k types.ContractOpsKeeper, p types if err != nil { return sdkerrors.Wrap(err, "run as address") } - codeID, err := k.Create(ctx, runAsAddr, p.WASMByteCode, p.InstantiatePermission) + codeID, _, err := k.Create(ctx, runAsAddr, p.WASMByteCode, p.InstantiatePermission) if err != nil { return err } diff --git a/x/wasm/keeper/proposal_integration_test.go b/x/wasm/keeper/proposal_integration_test.go index f7034db562..ace55269db 100644 --- a/x/wasm/keeper/proposal_integration_test.go +++ b/x/wasm/keeper/proposal_integration_test.go @@ -2,6 +2,7 @@ package keeper import ( "bytes" + "crypto/sha256" "encoding/hex" "encoding/json" "errors" @@ -116,9 +117,8 @@ func TestInstantiateProposal(t *testing.T) { require.NoError(t, err) // then - contractAddr, err := sdk.AccAddressFromBech32("cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr") - require.NoError(t, err) - + codeHash := keepers.WasmKeeper.GetCodeInfo(ctx, 1).CodeHash + contractAddr := BuildContractAddress(codeHash, oneAddress, "testing") cInfo := wasmKeeper.GetContractInfo(ctx, contractAddr) require.NotNil(t, cInfo) assert.Equal(t, uint64(1), cInfo.CodeID) @@ -188,9 +188,8 @@ func TestInstantiateProposal_NoAdmin(t *testing.T) { require.NoError(t, err) // then - contractAddr, err := sdk.AccAddressFromBech32("cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr") - require.NoError(t, err) - + codeHash := keepers.WasmKeeper.GetCodeInfo(ctx, 1).CodeHash + contractAddr := BuildContractAddress(codeHash, oneAddress, "testing") cInfo := wasmKeeper.GetContractInfo(ctx, contractAddr) require.NotNil(t, cInfo) assert.Equal(t, uint64(1), cInfo.CodeID) @@ -229,9 +228,9 @@ func TestMigrateProposal(t *testing.T) { require.NoError(t, wasmKeeper.importCode(ctx, 2, codeInfoFixture, wasmCode)) var ( - anyAddress sdk.AccAddress = bytes.Repeat([]byte{0x1}, types.ContractAddrLen) - otherAddress sdk.AccAddress = bytes.Repeat([]byte{0x2}, types.ContractAddrLen) - contractAddr = BuildContractAddress(1, 1) + anyAddress = DeterministicAccountAddress(t, 1) + otherAddress = DeterministicAccountAddress(t, 2) + contractAddr = BuildContractAddress(codeInfoFixture.CodeHash, RandomAccountAddress(t), "") ) contractInfoFixture := types.ContractInfoFixture(func(c *types.ContractInfo) { @@ -408,12 +407,13 @@ func TestSudoProposal(t *testing.T) { } func TestAdminProposals(t *testing.T) { - var ( - otherAddress sdk.AccAddress = bytes.Repeat([]byte{0x2}, types.ContractAddrLen) - contractAddr = BuildContractAddress(1, 1) - ) wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) + var ( + otherAddress = DeterministicAccountAddress(t, 2) + codeHash = sha256.Sum256(wasmCode) + contractAddr = BuildContractAddress(codeHash[:], RandomAccountAddress(t), "") + ) specs := map[string]struct { state types.ContractInfo diff --git a/x/wasm/keeper/querier_test.go b/x/wasm/keeper/querier_test.go index 21df7f94fd..115eeb8419 100644 --- a/x/wasm/keeper/querier_test.go +++ b/x/wasm/keeper/querier_test.go @@ -158,8 +158,9 @@ func TestQuerySmartContractState(t *testing.T) { func TestQuerySmartContractPanics(t *testing.T) { ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) - contractAddr := BuildContractAddress(1, 1) - keepers.WasmKeeper.storeCodeInfo(ctx, 1, types.CodeInfo{}) + creator := RandomAccountAddress(t) + contractAddr := BuildContractAddress([]byte("myCodeHash"), creator, "testing") + keepers.WasmKeeper.storeCodeInfo(ctx, 1, types.CodeInfo{CodeHash: []byte("myCodeHash")}) keepers.WasmKeeper.storeContractInfo(ctx, contractAddr, &types.ContractInfo{ CodeID: 1, Created: types.NewAbsoluteTxPosition(ctx), @@ -262,13 +263,13 @@ func TestQueryContractListByCodeOrdering(t *testing.T) { deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 1000000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 500)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) - anyAddr := keepers.Faucet.NewFundedAccount(ctx, topUp...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) + anyAddr := keepers.Faucet.NewFundedRandomAccount(ctx, topUp...) wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) - codeID, err := keepers.ContractKeeper.Create(ctx, creator, wasmCode, nil) + codeID, _, err := keepers.ContractKeeper.Create(ctx, creator, wasmCode, nil) require.NoError(t, err) _, _, bob := keyPubAddr() diff --git a/x/wasm/keeper/reflect_test.go b/x/wasm/keeper/reflect_test.go index 8e4f4829eb..f478a32935 100644 --- a/x/wasm/keeper/reflect_test.go +++ b/x/wasm/keeper/reflect_test.go @@ -43,18 +43,18 @@ func TestReflectContractSend(t *testing.T) { accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) _, _, bob := keyPubAddr() // upload reflect code - reflectID, err := keeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) + reflectID, _, err := keeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) require.NoError(t, err) require.Equal(t, uint64(1), reflectID) // upload hackatom escrow code escrowCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) - escrowID, err := keeper.Create(ctx, creator, escrowCode, nil) + escrowID, _, err := keeper.Create(ctx, creator, escrowCode, nil) require.NoError(t, err) require.Equal(t, uint64(2), escrowID) @@ -122,12 +122,12 @@ func TestReflectCustomMsg(t *testing.T) { accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) - bob := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) + bob := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) _, _, fred := keyPubAddr() // upload code - codeID, err := keeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) + codeID, _, err := keeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) require.NoError(t, err) require.Equal(t, uint64(1), codeID) @@ -213,10 +213,10 @@ func TestMaskReflectCustomQuery(t *testing.T) { keeper := keepers.WasmKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) // upload code - codeID, err := keepers.ContractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) + codeID, _, err := keepers.ContractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) require.NoError(t, err) require.Equal(t, uint64(1), codeID) @@ -263,10 +263,10 @@ func TestReflectStargateQuery(t *testing.T) { funds := sdk.NewCoins(sdk.NewInt64Coin("denom", 320000)) contractStart := sdk.NewCoins(sdk.NewInt64Coin("denom", 40000)) expectedBalance := funds.Sub(contractStart) - creator := keepers.Faucet.NewFundedAccount(ctx, funds...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, funds...) // upload code - codeID, err := keepers.ContractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) + codeID, _, err := keepers.ContractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) require.NoError(t, err) require.Equal(t, uint64(1), codeID) @@ -303,7 +303,7 @@ func TestReflectTotalSupplyQuery(t *testing.T) { ctx, keepers := CreateTestInput(t, false, ReflectFeatures, WithMessageEncoders(reflectEncoders(cdc)), WithQueryPlugins(reflectPlugins())) keeper := keepers.WasmKeeper // upload code - codeID := StoreReflectContract(t, ctx, keepers) + codeID := StoreReflectContract(t, ctx, keepers).CodeID // creator instantiates a contract and gives it tokens creator := RandomAccountAddress(t) contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, codeID, creator, nil, []byte("{}"), "testing", nil) @@ -356,10 +356,10 @@ func TestReflectInvalidStargateQuery(t *testing.T) { funds := sdk.NewCoins(sdk.NewInt64Coin("denom", 320000)) contractStart := sdk.NewCoins(sdk.NewInt64Coin("denom", 40000)) - creator := keepers.Faucet.NewFundedAccount(ctx, funds...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, funds...) // upload code - codeID, err := keepers.ContractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) + codeID, _, err := keepers.ContractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) require.NoError(t, err) require.Equal(t, uint64(1), codeID) @@ -434,10 +434,10 @@ func TestMaskReflectWasmQueries(t *testing.T) { keeper := keepers.WasmKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) // upload reflect code - reflectID, err := keepers.ContractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) + reflectID, _, err := keepers.ContractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) require.NoError(t, err) require.Equal(t, uint64(1), reflectID) @@ -504,10 +504,10 @@ func TestWasmRawQueryWithNil(t *testing.T) { keeper := keepers.WasmKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) // upload reflect code - reflectID, err := keepers.ContractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) + reflectID, _, err := keepers.ContractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) require.NoError(t, err) require.Equal(t, uint64(1), reflectID) diff --git a/x/wasm/keeper/snapshotter_integration_test.go b/x/wasm/keeper/snapshotter_integration_test.go index bef6cf0050..f100a1698c 100644 --- a/x/wasm/keeper/snapshotter_integration_test.go +++ b/x/wasm/keeper/snapshotter_integration_test.go @@ -55,11 +55,10 @@ func TestSnapshotter(t *testing.T) { for i, v := range spec.wasmFiles { wasmCode, err := os.ReadFile(v) require.NoError(t, err) - codeID, err := contractKeeper.Create(ctx, genesisAddr, wasmCode, nil) + codeID, checksum, err := contractKeeper.Create(ctx, genesisAddr, wasmCode, nil) require.NoError(t, err) require.Equal(t, uint64(i+1), codeID) - hash := sha256.Sum256(wasmCode) - srcCodeIDToChecksum[codeID] = hash[:] + srcCodeIDToChecksum[codeID] = checksum } // create snapshot srcWasmApp.Commit() diff --git a/x/wasm/keeper/staking_test.go b/x/wasm/keeper/staking_test.go index 15f0e0ac70..23ca71819b 100644 --- a/x/wasm/keeper/staking_test.go +++ b/x/wasm/keeper/staking_test.go @@ -103,12 +103,12 @@ func TestInitializeStaking(t *testing.T) { assert.Equal(t, v.GetDelegatorShares(), sdk.NewDec(1234567)) deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000), sdk.NewInt64Coin("stake", 500000)) - creator := k.Faucet.NewFundedAccount(ctx, deposit...) + creator := k.Faucet.NewFundedRandomAccount(ctx, deposit...) // upload staking derivates code stakingCode, err := os.ReadFile("./testdata/staking.wasm") require.NoError(t, err) - stakingID, err := keeper.Create(ctx, creator, stakingCode, nil) + stakingID, _, err := keeper.Create(ctx, creator, stakingCode, nil) require.NoError(t, err) require.Equal(t, uint64(1), stakingID) @@ -186,12 +186,12 @@ func initializeStaking(t *testing.T) initInfo { assert.Equal(t, v.Status, stakingtypes.Bonded) deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000), sdk.NewInt64Coin("stake", 500000)) - creator := k.Faucet.NewFundedAccount(ctx, deposit...) + creator := k.Faucet.NewFundedRandomAccount(ctx, deposit...) // upload staking derivates code stakingCode, err := os.ReadFile("./testdata/staking.wasm") require.NoError(t, err) - stakingID, err := k.ContractKeeper.Create(ctx, creator, stakingCode, nil) + stakingID, _, err := k.ContractKeeper.Create(ctx, creator, stakingCode, nil) require.NoError(t, err) require.Equal(t, uint64(1), stakingID) @@ -239,7 +239,7 @@ func TestBonding(t *testing.T) { // bob has 160k, putting 80k into the contract full := sdk.NewCoins(sdk.NewInt64Coin("stake", 160000)) funds := sdk.NewCoins(sdk.NewInt64Coin("stake", 80000)) - bob := initInfo.faucet.NewFundedAccount(ctx, full...) + bob := initInfo.faucet.NewFundedRandomAccount(ctx, full...) // check contract state before assertBalance(t, ctx, keeper, contractAddr, bob, "0") @@ -287,7 +287,7 @@ func TestUnbonding(t *testing.T) { // bob has 160k, putting 80k into the contract full := sdk.NewCoins(sdk.NewInt64Coin("stake", 160000)) funds := sdk.NewCoins(sdk.NewInt64Coin("stake", 80000)) - bob := initInfo.faucet.NewFundedAccount(ctx, full...) + bob := initInfo.faucet.NewFundedRandomAccount(ctx, full...) bond := StakingHandleMsg{ Bond: &struct{}{}, @@ -354,7 +354,7 @@ func TestReinvest(t *testing.T) { // full is 2x funds, 1x goes to the contract, other stays on his wallet full := sdk.NewCoins(sdk.NewInt64Coin("stake", 400000)) funds := sdk.NewCoins(sdk.NewInt64Coin("stake", 200000)) - bob := initInfo.faucet.NewFundedAccount(ctx, full...) + bob := initInfo.faucet.NewFundedRandomAccount(ctx, full...) // we will stake 200k to a validator with 1M self-bond // this means we should get 1/6 of the rewards @@ -422,7 +422,7 @@ func TestQueryStakingInfo(t *testing.T) { // full is 2x funds, 1x goes to the contract, other stays on his wallet full := sdk.NewCoins(sdk.NewInt64Coin("stake", 400000)) funds := sdk.NewCoins(sdk.NewInt64Coin("stake", 200000)) - bob := initInfo.faucet.NewFundedAccount(ctx, full...) + bob := initInfo.faucet.NewFundedRandomAccount(ctx, full...) // we will stake 200k to a validator with 1M self-bond // this means we should get 1/6 of the rewards @@ -444,10 +444,10 @@ func TestQueryStakingInfo(t *testing.T) { // STEP 2: Prepare the mask contract deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := initInfo.faucet.NewFundedAccount(ctx, deposit...) + creator := initInfo.faucet.NewFundedRandomAccount(ctx, deposit...) // upload mask code - maskID, err := initInfo.contractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) + maskID, _, err := initInfo.contractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) require.NoError(t, err) require.Equal(t, uint64(2), maskID) @@ -599,7 +599,7 @@ func TestQueryStakingPlugin(t *testing.T) { // full is 2x funds, 1x goes to the contract, other stays on his wallet full := sdk.NewCoins(sdk.NewInt64Coin("stake", 400000)) funds := sdk.NewCoins(sdk.NewInt64Coin("stake", 200000)) - bob := initInfo.faucet.NewFundedAccount(ctx, full...) + bob := initInfo.faucet.NewFundedRandomAccount(ctx, full...) // we will stake 200k to a validator with 1M self-bond // this means we should get 1/6 of the rewards @@ -652,7 +652,7 @@ func TestQueryStakingPlugin(t *testing.T) { // adds a few validators and returns a list of validators that are registered func addValidator(t *testing.T, ctx sdk.Context, stakingKeeper stakingkeeper.Keeper, faucet *TestFaucet, value sdk.Coin) sdk.ValAddress { - owner := faucet.NewFundedAccount(ctx, value) + owner := faucet.NewFundedRandomAccount(ctx, value) privKey := secp256k1.GenPrivKey() pubKey := privKey.PubKey() diff --git a/x/wasm/keeper/submsg_test.go b/x/wasm/keeper/submsg_test.go index d1f1d30cda..cd2555fef7 100644 --- a/x/wasm/keeper/submsg_test.go +++ b/x/wasm/keeper/submsg_test.go @@ -26,12 +26,12 @@ func TestDispatchSubMsgSuccessCase(t *testing.T) { deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) contractStart := sdk.NewCoins(sdk.NewInt64Coin("denom", 40000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) creatorBalance := deposit.Sub(contractStart) _, _, fred := keyPubAddr() // upload code - codeID, err := keepers.ContractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) + codeID, _, err := keepers.ContractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) require.NoError(t, err) require.Equal(t, uint64(1), codeID) @@ -110,16 +110,16 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { ctx = ctx.WithBlockGasMeter(sdk.NewInfiniteGasMeter()) keeper := keepers.WasmKeeper contractStart := sdk.NewCoins(sdk.NewInt64Coin(fundedDenom, int64(fundedAmount))) - uploader := keepers.Faucet.NewFundedAccount(ctx, contractStart.Add(contractStart...)...) + uploader := keepers.Faucet.NewFundedRandomAccount(ctx, contractStart.Add(contractStart...)...) // upload code - reflectID, err := keepers.ContractKeeper.Create(ctx, uploader, testdata.ReflectContractWasm(), nil) + reflectID, _, err := keepers.ContractKeeper.Create(ctx, uploader, testdata.ReflectContractWasm(), nil) require.NoError(t, err) // create hackatom contract for testing (for infinite loop) hackatomCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) - hackatomID, err := keepers.ContractKeeper.Create(ctx, uploader, hackatomCode, nil) + hackatomID, _, err := keepers.ContractKeeper.Create(ctx, uploader, hackatomCode, nil) require.NoError(t, err) _, _, bob := keyPubAddr() _, _, fred := keyPubAddr() @@ -282,7 +282,7 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { } for name, tc := range cases { t.Run(name, func(t *testing.T) { - creator := keepers.Faucet.NewFundedAccount(ctx, contractStart...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, contractStart...) _, _, empty := keyPubAddr() contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, reflectID, creator, nil, []byte("{}"), fmt.Sprintf("contract %s", name), contractStart) @@ -366,11 +366,11 @@ func TestDispatchSubMsgEncodeToNoSdkMsg(t *testing.T) { deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) contractStart := sdk.NewCoins(sdk.NewInt64Coin("denom", 40000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) _, _, fred := keyPubAddr() // upload code - codeID, err := keepers.ContractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) + codeID, _, err := keepers.ContractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) require.NoError(t, err) // creator instantiates a contract and gives it tokens @@ -432,11 +432,11 @@ func TestDispatchSubMsgConditionalReplyOn(t *testing.T) { deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) contractStart := sdk.NewCoins(sdk.NewInt64Coin("denom", 40000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) _, _, fred := keyPubAddr() // upload code - codeID, err := keepers.ContractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) + codeID, _, err := keepers.ContractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) require.NoError(t, err) // creator instantiates a contract and gives it tokens diff --git a/x/wasm/keeper/test_common.go b/x/wasm/keeper/test_common.go index 8b0f782047..fff90af36b 100644 --- a/x/wasm/keeper/test_common.go +++ b/x/wasm/keeper/test_common.go @@ -1,6 +1,7 @@ package keeper import ( + "bytes" "encoding/binary" "encoding/json" "fmt" @@ -8,7 +9,9 @@ import ( "testing" "time" - "github.com/CosmWasm/wasmd/x/wasm/keeper/testdata" + "github.com/cosmos/cosmos-sdk/x/auth/vesting" + + "github.com/cosmos/cosmos-sdk/types/address" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" @@ -91,6 +94,7 @@ var moduleBasics = module.NewBasicManager( upgrade.AppModuleBasic{}, evidence.AppModuleBasic{}, transfer.AppModuleBasic{}, + vesting.AppModuleBasic{}, ) func MakeTestCodec(t testing.TB) codec.Codec { @@ -162,7 +166,7 @@ func (f *TestFaucet) Fund(parentCtx sdk.Context, receiver sdk.AccAddress, amount f.balance = f.balance.Sub(amounts) } -func (f *TestFaucet) NewFundedAccount(ctx sdk.Context, amounts ...sdk.Coin) sdk.AccAddress { +func (f *TestFaucet) NewFundedRandomAccount(ctx sdk.Context, amounts ...sdk.Coin) sdk.AccAddress { _, _, addr := keyPubAddr() f.Fund(ctx, addr, amounts...) return addr @@ -464,7 +468,7 @@ func handleStoreCode(ctx sdk.Context, k types.ContractOpsKeeper, msg *types.MsgS if err != nil { return nil, sdkerrors.Wrap(err, "sender") } - codeID, err := k.Create(ctx, senderAddr, msg.WASMByteCode, msg.InstantiatePermission) + codeID, _, err := k.Create(ctx, senderAddr, msg.WASMByteCode, msg.InstantiatePermission) if err != nil { return nil, err } @@ -523,6 +527,11 @@ func RandomAccountAddress(_ testing.TB) sdk.AccAddress { return addr } +// DeterministicAccountAddress creates a test address with v repeated to valid address size +func DeterministicAccountAddress(_ testing.TB, v byte) sdk.AccAddress { + return bytes.Repeat([]byte{v}, address.Len) +} + func RandomBech32AccountAddress(t testing.TB) string { return RandomAccountAddress(t).String() } @@ -532,6 +541,7 @@ type ExampleContract struct { Creator crypto.PrivKey CreatorAddr sdk.AccAddress CodeID uint64 + Checksum []byte } func StoreHackatomExampleContract(t testing.TB, ctx sdk.Context, keepers TestKeepers) ExampleContract { @@ -546,11 +556,8 @@ func StoreIBCReflectContract(t testing.TB, ctx sdk.Context, keepers TestKeepers) return StoreExampleContract(t, ctx, keepers, "./testdata/ibc_reflect.wasm") } -func StoreReflectContract(t testing.TB, ctx sdk.Context, keepers TestKeepers) uint64 { - _, _, creatorAddr := keyPubAddr() - codeID, err := keepers.ContractKeeper.Create(ctx, creatorAddr, testdata.ReflectContractWasm(), nil) - require.NoError(t, err) - return codeID +func StoreReflectContract(t testing.TB, ctx sdk.Context, keepers TestKeepers) ExampleContract { + return StoreExampleContract(t, ctx, keepers, "./testdata/reflect.wasm") } func StoreExampleContract(t testing.TB, ctx sdk.Context, keepers TestKeepers, wasmFile string) ExampleContract { @@ -561,9 +568,10 @@ func StoreExampleContract(t testing.TB, ctx sdk.Context, keepers TestKeepers, wa wasmCode, err := os.ReadFile(wasmFile) require.NoError(t, err) - codeID, err := keepers.ContractKeeper.Create(ctx, creatorAddr, wasmCode, nil) + codeID, _, err := keepers.ContractKeeper.Create(ctx, creatorAddr, wasmCode, nil) require.NoError(t, err) - return ExampleContract{anyAmount, creator, creatorAddr, codeID} + hash := keepers.WasmKeeper.GetCodeInfo(ctx, codeID).CodeHash + return ExampleContract{anyAmount, creator, creatorAddr, codeID, hash} } var wasmIdent = []byte("\x00\x61\x73\x6D") @@ -602,9 +610,9 @@ func StoreRandomContractWithAccessConfig( fundAccounts(t, ctx, keepers.AccountKeeper, keepers.BankKeeper, creatorAddr, anyAmount) keepers.WasmKeeper.wasmVM = mock wasmCode := append(wasmIdent, rand.Bytes(10)...) //nolint:gocritic - codeID, err := keepers.ContractKeeper.Create(ctx, creatorAddr, wasmCode, cfg) + codeID, checksum, err := keepers.ContractKeeper.Create(ctx, creatorAddr, wasmCode, cfg) require.NoError(t, err) - exampleContract := ExampleContract{InitialAmount: anyAmount, Creator: creator, CreatorAddr: creatorAddr, CodeID: codeID} + exampleContract := ExampleContract{InitialAmount: anyAmount, Creator: creator, CreatorAddr: creatorAddr, CodeID: codeID, Checksum: checksum} return exampleContract } @@ -615,6 +623,8 @@ type HackatomExampleInstance struct { VerifierAddr sdk.AccAddress Beneficiary crypto.PrivKey BeneficiaryAddr sdk.AccAddress + Label string + Deposit sdk.Coins } // InstantiateHackatomExampleContract load and instantiate the "./testdata/hackatom.wasm" contract @@ -632,7 +642,8 @@ func InstantiateHackatomExampleContract(t testing.TB, ctx sdk.Context, keepers T initialAmount := sdk.NewCoins(sdk.NewInt64Coin("denom", 100)) adminAddr := contract.CreatorAddr - contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, contract.CodeID, contract.CreatorAddr, adminAddr, initMsgBz, "demo contract to query", initialAmount) + label := "demo contract to query" + contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, contract.CodeID, contract.CreatorAddr, adminAddr, initMsgBz, label, initialAmount) require.NoError(t, err) return HackatomExampleInstance{ ExampleContract: contract, @@ -641,6 +652,31 @@ func InstantiateHackatomExampleContract(t testing.TB, ctx sdk.Context, keepers T VerifierAddr: verifierAddr, Beneficiary: beneficiary, BeneficiaryAddr: beneficiaryAddr, + Label: label, + Deposit: initialAmount, + } +} + +type ExampleInstance struct { + ExampleContract + Contract sdk.AccAddress + Label string + Deposit sdk.Coins +} + +// InstantiateReflectExampleContract load and instantiate the "./testdata/reflect.wasm" contract +func InstantiateReflectExampleContract(t testing.TB, ctx sdk.Context, keepers TestKeepers) ExampleInstance { + example := StoreReflectContract(t, ctx, keepers) + initialAmount := sdk.NewCoins(sdk.NewInt64Coin("denom", 100)) + label := "demo contract to query" + contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, example.CodeID, example.CreatorAddr, nil, []byte("{}"), label, initialAmount) + + require.NoError(t, err) + return ExampleInstance{ + ExampleContract: example, + Contract: contractAddr, + Label: label, + Deposit: initialAmount, } } @@ -664,7 +700,7 @@ type IBCReflectExampleInstance struct { // InstantiateIBCReflectContract load and instantiate the "./testdata/ibc_reflect.wasm" contract func InstantiateIBCReflectContract(t testing.TB, ctx sdk.Context, keepers TestKeepers) IBCReflectExampleInstance { - reflectID := StoreReflectContract(t, ctx, keepers) + reflectID := StoreReflectContract(t, ctx, keepers).CodeID ibcReflectID := StoreIBCReflectContract(t, ctx, keepers).CodeID initMsgBz := IBCReflectInitMsg{ diff --git a/x/wasm/module.go b/x/wasm/module.go index a237a910d4..2433fe0219 100644 --- a/x/wasm/module.go +++ b/x/wasm/module.go @@ -111,7 +111,7 @@ type AppModule struct { // module. It should be incremented on each consensus-breaking change // introduced by the module. To avoid wrong/empty versions, the initial version // should be set to 1. -func (AppModule) ConsensusVersion() uint64 { return 1 } +func (AppModule) ConsensusVersion() uint64 { return 2 } // NewAppModule creates a new AppModule object func NewAppModule( @@ -134,6 +134,11 @@ func NewAppModule( func (am AppModule) RegisterServices(cfg module.Configurator) { types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(keeper.NewDefaultPermissionKeeper(am.keeper))) types.RegisterQueryServer(cfg.QueryServer(), NewQuerier(am.keeper)) + + m := keeper.NewMigrator(am.keeper) + if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil { + panic(err) + } } func (am AppModule) LegacyQuerierHandler(amino *codec.LegacyAmino) sdk.Querier { //nolint:staticcheck diff --git a/x/wasm/module_test.go b/x/wasm/module_test.go index 8417225ade..d3530e5a3a 100644 --- a/x/wasm/module_test.go +++ b/x/wasm/module_test.go @@ -1,11 +1,14 @@ package wasm import ( + "bytes" "encoding/json" "fmt" "os" "testing" + "github.com/cosmos/cosmos-sdk/types/address" + "github.com/CosmWasm/wasmd/x/wasm/keeper/testdata" sdk "github.com/cosmos/cosmos-sdk/types" @@ -145,7 +148,8 @@ type state struct { func TestHandleInstantiate(t *testing.T) { data := setupTest(t) - creator := data.faucet.NewFundedAccount(data.ctx, sdk.NewInt64Coin("denom", 100000)) + creator := sdk.AccAddress(bytes.Repeat([]byte{1}, address.Len)) + data.faucet.Fund(data.ctx, creator, sdk.NewInt64Coin("denom", 100000)) h := data.module.Route().Handler() q := data.module.LegacyQuerierHandler(nil) @@ -179,7 +183,7 @@ func TestHandleInstantiate(t *testing.T) { require.NoError(t, err) contractBech32Addr := parseInitResponse(t, res.Data) - require.Equal(t, "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr", contractBech32Addr) + require.Equal(t, "cosmos1400ax8h2dxe8ch64sus5sczqdhwv28hpjkkaphpa83he4fhz6k4qcm9kul", contractBech32Addr) // this should be standard x/wasm init event, nothing from contract require.Equal(t, 3, len(res.Events), prettyEvents(res.Events)) require.Equal(t, "message", res.Events[0].Type) @@ -206,8 +210,10 @@ func TestHandleExecute(t *testing.T) { deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) - creator := data.faucet.NewFundedAccount(data.ctx, deposit.Add(deposit...)...) - fred := data.faucet.NewFundedAccount(data.ctx, topUp...) + creator := sdk.AccAddress(bytes.Repeat([]byte{1}, address.Len)) + data.faucet.Fund(data.ctx, creator, sdk.NewInt64Coin("denom", 100000*2)) + + fred := data.faucet.NewFundedRandomAccount(data.ctx, topUp...) h := data.module.Route().Handler() q := data.module.LegacyQuerierHandler(nil) @@ -238,7 +244,7 @@ func TestHandleExecute(t *testing.T) { require.NoError(t, err) contractBech32Addr := parseInitResponse(t, res.Data) - require.Equal(t, "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr", contractBech32Addr) + require.Equal(t, "cosmos1400ax8h2dxe8ch64sus5sczqdhwv28hpjkkaphpa83he4fhz6k4qcm9kul", contractBech32Addr) // this should be standard x/wasm message event, init event, plus a bank send event (2), with no custom contract events require.Equal(t, 6, len(res.Events), prettyEvents(res.Events)) require.Equal(t, "message", res.Events[0].Type) @@ -341,8 +347,9 @@ func TestHandleExecuteEscrow(t *testing.T) { deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) - creator := data.faucet.NewFundedAccount(data.ctx, deposit.Add(deposit...)...) - fred := data.faucet.NewFundedAccount(data.ctx, topUp...) + creator := sdk.AccAddress(bytes.Repeat([]byte{1}, address.Len)) + data.faucet.Fund(data.ctx, creator, sdk.NewInt64Coin("denom", 100000)) + fred := data.faucet.NewFundedRandomAccount(data.ctx, topUp...) h := data.module.Route().Handler() @@ -370,7 +377,7 @@ func TestHandleExecuteEscrow(t *testing.T) { res, err = h(data.ctx, &initCmd) require.NoError(t, err) contractBech32Addr := parseInitResponse(t, res.Data) - require.Equal(t, "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr", contractBech32Addr) + require.Equal(t, "cosmos1400ax8h2dxe8ch64sus5sczqdhwv28hpjkkaphpa83he4fhz6k4qcm9kul", contractBech32Addr) handleMsg := map[string]interface{}{ "release": map[string]interface{}{}, diff --git a/x/wasm/simulation/genesis.go b/x/wasm/simulation/genesis.go index 039a4394c4..5271bd2365 100644 --- a/x/wasm/simulation/genesis.go +++ b/x/wasm/simulation/genesis.go @@ -15,7 +15,6 @@ func RandomizedGenState(simstate *module.SimulationState) { Contracts: nil, Sequences: []types.Sequence{ {IDKey: types.KeyLastCodeID, Value: simstate.Rand.Uint64()}, - {IDKey: types.KeyLastInstanceID, Value: simstate.Rand.Uint64()}, }, GenMsgs: nil, } diff --git a/x/wasm/types/events.go b/x/wasm/types/events.go index 251b95f042..579024ed0c 100644 --- a/x/wasm/types/events.go +++ b/x/wasm/types/events.go @@ -23,6 +23,7 @@ const ( AttributeKeyContractAddr = "_contract_address" AttributeKeyCodeID = "code_id" + AttributeKeyChecksum = "code_checksum" AttributeKeyResultDataHex = "result" AttributeKeyRequiredCapability = "required_capability" ) diff --git a/x/wasm/types/exported_keepers.go b/x/wasm/types/exported_keepers.go index 88f9d980b3..df09957915 100644 --- a/x/wasm/types/exported_keepers.go +++ b/x/wasm/types/exported_keepers.go @@ -26,7 +26,7 @@ type ViewKeeper interface { // ContractOpsKeeper contains mutable operations on a contract. type ContractOpsKeeper interface { // Create uploads and compiles a WASM contract, returning a short identifier for the contract - Create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, instantiateAccess *AccessConfig) (codeID uint64, err error) + Create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, instantiateAccess *AccessConfig) (codeID uint64, checksum []byte, err error) // Instantiate creates an instance of a WASM contract Instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.AccAddress, initMsg []byte, label string, deposit sdk.Coins) (sdk.AccAddress, []byte, error) diff --git a/x/wasm/types/keys.go b/x/wasm/types/keys.go index fb636ef4f3..9660360cb8 100644 --- a/x/wasm/types/keys.go +++ b/x/wasm/types/keys.go @@ -32,8 +32,7 @@ var ( PinnedCodeIndexPrefix = []byte{0x07} TXCounterPrefix = []byte{0x08} - KeyLastCodeID = append(SequenceKeyPrefix, []byte("lastCodeId")...) - KeyLastInstanceID = append(SequenceKeyPrefix, []byte("lastContractId")...) + KeyLastCodeID = append(SequenceKeyPrefix, []byte("lastCodeId")...) ) // GetCodeKey constructs the key for retreiving the ID for the WASM code diff --git a/x/wasm/types/proposal.go b/x/wasm/types/proposal.go index 748a03895b..acf30784c9 100644 --- a/x/wasm/types/proposal.go +++ b/x/wasm/types/proposal.go @@ -170,7 +170,7 @@ func (p InstantiateContractProposal) ValidateBasic() error { return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "code id is required") } - if err := validateLabel(p.Label); err != nil { + if err := ValidateLabel(p.Label); err != nil { return err } diff --git a/x/wasm/types/tx.go b/x/wasm/types/tx.go index 498dc28266..0c83018df0 100644 --- a/x/wasm/types/tx.go +++ b/x/wasm/types/tx.go @@ -95,7 +95,7 @@ func (msg MsgInstantiateContract) ValidateBasic() error { return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "code id is required") } - if err := validateLabel(msg.Label); err != nil { + if err := ValidateLabel(msg.Label); err != nil { return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "label is required") } diff --git a/x/wasm/types/tx.pb.go b/x/wasm/types/tx.pb.go index 7976d9e8f0..52d5098de4 100644 --- a/x/wasm/types/tx.pb.go +++ b/x/wasm/types/tx.pb.go @@ -87,6 +87,8 @@ var xxx_messageInfo_MsgStoreCode proto.InternalMessageInfo type MsgStoreCodeResponse struct { // CodeID is the reference to the stored WASM code CodeID uint64 `protobuf:"varint,1,opt,name=code_id,json=codeId,proto3" json:"code_id,omitempty"` + // Checksum is the sha256 hash of the stored code + Checksum []byte `protobuf:"bytes,2,opt,name=checksum,proto3" json:"checksum,omitempty"` } func (m *MsgStoreCodeResponse) Reset() { *m = MsgStoreCodeResponse{} } @@ -611,55 +613,55 @@ func init() { func init() { proto.RegisterFile("cosmwasm/wasm/v1/tx.proto", fileDescriptor_4f74d82755520264) } var fileDescriptor_4f74d82755520264 = []byte{ - // 759 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xcd, 0x6e, 0xd3, 0x4a, - 0x14, 0x8e, 0x1b, 0x27, 0x4d, 0x4e, 0x73, 0x7b, 0x23, 0xdf, 0x36, 0x37, 0xf5, 0xbd, 0x72, 0xa2, - 0x80, 0x8a, 0x17, 0x60, 0x37, 0x45, 0x62, 0xc3, 0xaa, 0x49, 0x59, 0xb4, 0x92, 0x11, 0x72, 0x55, - 0x2a, 0xd8, 0x44, 0x13, 0x7b, 0x6a, 0x2c, 0x1a, 0x4f, 0xf0, 0x71, 0x9b, 0xf6, 0x25, 0x10, 0x3b, - 0xde, 0x81, 0xb7, 0x60, 0xd7, 0x15, 0xea, 0x06, 0x89, 0x55, 0x80, 0xf4, 0x2d, 0x58, 0x21, 0xff, - 0xa5, 0x6e, 0xea, 0xa4, 0x41, 0x88, 0x4d, 0x32, 0xc7, 0xf3, 0x7d, 0xe7, 0xcc, 0xf9, 0xf4, 0xcd, - 0x19, 0x58, 0x33, 0x18, 0xf6, 0x06, 0x04, 0x7b, 0x6a, 0xf0, 0x73, 0xd2, 0x54, 0xbd, 0x53, 0xa5, - 0xef, 0x32, 0x8f, 0x09, 0xe5, 0x78, 0x4b, 0x09, 0x7e, 0x4e, 0x9a, 0xa2, 0xe4, 0x7f, 0x61, 0xa8, - 0x76, 0x09, 0x52, 0xf5, 0xa4, 0xd9, 0xa5, 0x1e, 0x69, 0xaa, 0x06, 0xb3, 0x9d, 0x90, 0x21, 0xae, - 0x58, 0xcc, 0x62, 0xc1, 0x52, 0xf5, 0x57, 0xd1, 0xd7, 0xff, 0x6f, 0x96, 0x38, 0xeb, 0x53, 0x0c, - 0x77, 0x1b, 0x1f, 0x39, 0x28, 0x69, 0x68, 0xed, 0x79, 0xcc, 0xa5, 0x6d, 0x66, 0x52, 0xa1, 0x02, - 0x79, 0xa4, 0x8e, 0x49, 0xdd, 0x2a, 0x57, 0xe7, 0xe4, 0xa2, 0x1e, 0x45, 0xc2, 0x23, 0x58, 0xf6, - 0xf9, 0x9d, 0xee, 0x99, 0x47, 0x3b, 0x06, 0x33, 0x69, 0x75, 0xa1, 0xce, 0xc9, 0xa5, 0x56, 0x79, - 0x34, 0xac, 0x95, 0x0e, 0xb6, 0xf6, 0xb4, 0xd6, 0x99, 0x17, 0x64, 0xd0, 0x4b, 0x3e, 0x2e, 0x8e, - 0x84, 0x7d, 0xa8, 0xd8, 0x0e, 0x7a, 0xc4, 0xf1, 0x6c, 0xe2, 0xd1, 0x4e, 0x9f, 0xba, 0x3d, 0x1b, - 0xd1, 0x66, 0x4e, 0x35, 0x57, 0xe7, 0xe4, 0xa5, 0x4d, 0x49, 0x99, 0xec, 0x53, 0xd9, 0x32, 0x0c, - 0x8a, 0xd8, 0x66, 0xce, 0xa1, 0x6d, 0xe9, 0xab, 0x09, 0xf6, 0xb3, 0x31, 0x79, 0x97, 0x2f, 0x64, - 0xcb, 0xfc, 0x2e, 0x5f, 0xe0, 0xcb, 0xb9, 0xc6, 0x63, 0x58, 0x49, 0xb6, 0xa0, 0x53, 0xec, 0x33, - 0x07, 0xa9, 0x70, 0x07, 0x16, 0xfd, 0x83, 0x76, 0x6c, 0x33, 0xe8, 0x85, 0x6f, 0xc1, 0x68, 0x58, - 0xcb, 0xfb, 0x90, 0x9d, 0x6d, 0x3d, 0xef, 0x6f, 0xed, 0x98, 0x8d, 0xb7, 0x0b, 0x50, 0xd1, 0xd0, - 0xda, 0xb9, 0xaa, 0xd2, 0x66, 0x8e, 0xe7, 0x12, 0xc3, 0x9b, 0x2a, 0xc5, 0x0a, 0xe4, 0x88, 0xd9, - 0xb3, 0x9d, 0x40, 0x81, 0xa2, 0x1e, 0x06, 0xc9, 0x6a, 0xd9, 0x69, 0xd5, 0x7c, 0xea, 0x11, 0xe9, - 0xd2, 0xa3, 0x2a, 0x1f, 0x52, 0x83, 0x40, 0x90, 0x21, 0xdb, 0x43, 0x2b, 0x10, 0xa4, 0xd4, 0xaa, - 0xfc, 0x18, 0xd6, 0x04, 0x9d, 0x0c, 0xe2, 0x63, 0x68, 0x14, 0x91, 0x58, 0x54, 0xf7, 0x21, 0x02, - 0x81, 0xdc, 0xe1, 0xb1, 0x63, 0x62, 0x35, 0x5f, 0xcf, 0xca, 0x4b, 0x9b, 0x6b, 0x4a, 0x68, 0x09, - 0xc5, 0xb7, 0x84, 0x12, 0x59, 0x42, 0x69, 0x33, 0xdb, 0x69, 0x6d, 0x9c, 0x0f, 0x6b, 0x99, 0x0f, - 0x5f, 0x6b, 0xb2, 0x65, 0x7b, 0xaf, 0x8e, 0xbb, 0x8a, 0xc1, 0x7a, 0x6a, 0xe4, 0x9f, 0xf0, 0xef, - 0x01, 0x9a, 0xaf, 0x23, 0x2b, 0xf8, 0x04, 0xd4, 0xc3, 0xcc, 0x8d, 0xa7, 0x20, 0xa5, 0xeb, 0x31, - 0xd6, 0xb5, 0x0a, 0x8b, 0xc4, 0x34, 0x5d, 0x8a, 0x18, 0x09, 0x13, 0x87, 0x82, 0x00, 0xbc, 0x49, - 0x3c, 0x12, 0x5a, 0x43, 0x0f, 0xd6, 0x8d, 0xcf, 0x1c, 0x08, 0x1a, 0x5a, 0x4f, 0x4e, 0xa9, 0x71, - 0x3c, 0x87, 0xb8, 0x22, 0x14, 0x8c, 0x08, 0x13, 0xe9, 0x3b, 0x8e, 0x63, 0x9d, 0xb2, 0xbf, 0xa0, - 0x53, 0xee, 0x8f, 0xe9, 0xb4, 0x01, 0xe2, 0xcd, 0xb6, 0xc6, 0x1a, 0xc5, 0x4a, 0x70, 0x09, 0x25, - 0xde, 0x87, 0x4a, 0x68, 0xb6, 0xe5, 0x92, 0xdf, 0x54, 0x62, 0x2e, 0xb3, 0x45, 0x72, 0xf1, 0xb7, - 0xca, 0x15, 0xf5, 0x32, 0x71, 0xb0, 0x99, 0xbd, 0x10, 0x58, 0xd6, 0xd0, 0xda, 0xef, 0x9b, 0xc4, - 0xa3, 0x5b, 0x81, 0xff, 0xa7, 0xb5, 0xf1, 0x1f, 0x14, 0x1d, 0x3a, 0xe8, 0x24, 0x6f, 0x4c, 0xc1, - 0xa1, 0x83, 0x90, 0x94, 0xec, 0x31, 0x7b, 0xbd, 0xc7, 0x46, 0x35, 0xb8, 0x98, 0x89, 0x12, 0xf1, - 0x81, 0x1a, 0x6d, 0xf8, 0x4b, 0x43, 0xab, 0x7d, 0x44, 0x89, 0x3b, 0xbb, 0xf6, 0xac, 0xf4, 0xff, - 0xc2, 0xea, 0xb5, 0x24, 0x71, 0xf6, 0xcd, 0x4f, 0x3c, 0x64, 0x35, 0xb4, 0x84, 0x3d, 0x28, 0x5e, - 0x8d, 0xc5, 0x94, 0x31, 0x95, 0x9c, 0x39, 0xe2, 0xfa, 0xec, 0xfd, 0xb1, 0x96, 0x6f, 0xe0, 0x9f, - 0xb4, 0x51, 0x23, 0xa7, 0xd2, 0x53, 0x90, 0xe2, 0xc6, 0xbc, 0xc8, 0x71, 0x49, 0x0a, 0x7f, 0x4f, - 0x5e, 0xbe, 0xbb, 0xa9, 0x49, 0x26, 0x50, 0xe2, 0xfd, 0x79, 0x50, 0xc9, 0x32, 0x93, 0xce, 0x4e, - 0x2f, 0x33, 0x81, 0x9a, 0x52, 0x66, 0x9a, 0x19, 0x5f, 0xc0, 0x52, 0xd2, 0x75, 0xf5, 0x54, 0x72, - 0x02, 0x21, 0xca, 0xb7, 0x21, 0xc6, 0xa9, 0x9f, 0x03, 0x24, 0x3c, 0x55, 0x4b, 0xe5, 0x5d, 0x01, - 0xc4, 0x7b, 0xb7, 0x00, 0xe2, 0xbc, 0xad, 0xed, 0xf3, 0xef, 0x52, 0xe6, 0x7c, 0x24, 0x71, 0x17, - 0x23, 0x89, 0xfb, 0x36, 0x92, 0xb8, 0x77, 0x97, 0x52, 0xe6, 0xe2, 0x52, 0xca, 0x7c, 0xb9, 0x94, - 0x32, 0x2f, 0xd7, 0x13, 0x83, 0xa7, 0xcd, 0xb0, 0x77, 0x10, 0x3f, 0xd5, 0xa6, 0x7a, 0x1a, 0x3e, - 0xd9, 0xc1, 0xf0, 0xe9, 0xe6, 0x83, 0x07, 0xfb, 0xe1, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x56, - 0xd2, 0x4b, 0x17, 0x33, 0x08, 0x00, 0x00, + // 766 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xcb, 0x6e, 0xd3, 0x40, + 0x14, 0x8d, 0x1b, 0x27, 0x4d, 0x6e, 0x43, 0x89, 0x4c, 0x1a, 0x52, 0x83, 0x9c, 0x28, 0xa0, 0xe2, + 0x05, 0xd8, 0x4d, 0x91, 0xd8, 0x37, 0x29, 0x8b, 0x56, 0x32, 0x42, 0xae, 0x4a, 0x05, 0x9b, 0x68, + 0x62, 0x4f, 0x5d, 0xab, 0xb5, 0x27, 0x78, 0x9c, 0xa6, 0xfd, 0x09, 0xc4, 0x8e, 0x7f, 0xe0, 0x2f, + 0xd8, 0x75, 0x85, 0xba, 0x41, 0x62, 0x15, 0x20, 0xfd, 0x0b, 0x56, 0xc8, 0xcf, 0xba, 0xa9, 0x93, + 0x06, 0x21, 0x36, 0xce, 0xdc, 0x99, 0x73, 0x5f, 0x27, 0x67, 0xee, 0xc0, 0xaa, 0x46, 0xa8, 0x35, + 0x44, 0xd4, 0x92, 0xfd, 0xcf, 0x49, 0x4b, 0x76, 0x4f, 0xa5, 0xbe, 0x43, 0x5c, 0xc2, 0x95, 0xa3, + 0x23, 0xc9, 0xff, 0x9c, 0xb4, 0x78, 0xc1, 0xdb, 0x21, 0x54, 0xee, 0x21, 0x8a, 0xe5, 0x93, 0x56, + 0x0f, 0xbb, 0xa8, 0x25, 0x6b, 0xc4, 0xb4, 0x03, 0x0f, 0xbe, 0x62, 0x10, 0x83, 0xf8, 0x4b, 0xd9, + 0x5b, 0x85, 0xbb, 0x0f, 0x6f, 0xa6, 0x38, 0xeb, 0x63, 0x1a, 0x9c, 0x36, 0xbf, 0x30, 0x50, 0x52, + 0xa8, 0xb1, 0xeb, 0x12, 0x07, 0x77, 0x88, 0x8e, 0xb9, 0x2a, 0xe4, 0x29, 0xb6, 0x75, 0xec, 0xd4, + 0x98, 0x06, 0x23, 0x16, 0xd5, 0xd0, 0xe2, 0x5e, 0xc0, 0xb2, 0xe7, 0xdf, 0xed, 0x9d, 0xb9, 0xb8, + 0xab, 0x11, 0x1d, 0xd7, 0x16, 0x1a, 0x8c, 0x58, 0x6a, 0x97, 0xc7, 0xa3, 0x7a, 0x69, 0x7f, 0x73, + 0x57, 0x69, 0x9f, 0xb9, 0x7e, 0x04, 0xb5, 0xe4, 0xe1, 0x22, 0x8b, 0xdb, 0x83, 0xaa, 0x69, 0x53, + 0x17, 0xd9, 0xae, 0x89, 0x5c, 0xdc, 0xed, 0x63, 0xc7, 0x32, 0x29, 0x35, 0x89, 0x5d, 0xcb, 0x35, + 0x18, 0x71, 0x69, 0x43, 0x90, 0x26, 0xfb, 0x94, 0x36, 0x35, 0x0d, 0x53, 0xda, 0x21, 0xf6, 0x81, + 0x69, 0xa8, 0x2b, 0x09, 0xef, 0xd7, 0xb1, 0xf3, 0x0e, 0x5b, 0xc8, 0x96, 0xd9, 0x1d, 0xb6, 0xc0, + 0x96, 0x73, 0xcd, 0x7d, 0xa8, 0x24, 0x5b, 0x50, 0x31, 0xed, 0x13, 0x9b, 0x62, 0xee, 0x11, 0x2c, + 0x7a, 0x85, 0x76, 0x4d, 0xdd, 0xef, 0x85, 0x6d, 0xc3, 0x78, 0x54, 0xcf, 0x7b, 0x90, 0xed, 0x2d, + 0x35, 0xef, 0x1d, 0x6d, 0xeb, 0x1c, 0x0f, 0x05, 0xed, 0x10, 0x6b, 0x47, 0x74, 0x60, 0x05, 0x1d, + 0xa9, 0xb1, 0xdd, 0xfc, 0xb0, 0x00, 0x55, 0x85, 0x1a, 0xdb, 0x57, 0x15, 0x74, 0x88, 0xed, 0x3a, + 0x48, 0x73, 0xa7, 0xd2, 0x54, 0x81, 0x1c, 0xd2, 0x2d, 0xd3, 0xf6, 0x63, 0x15, 0xd5, 0xc0, 0x48, + 0x56, 0x92, 0x9d, 0x5a, 0x49, 0x05, 0x72, 0xc7, 0xa8, 0x87, 0x8f, 0x6b, 0x6c, 0xe0, 0xea, 0x1b, + 0x9c, 0x08, 0x59, 0x8b, 0x1a, 0x3e, 0x59, 0xa5, 0x76, 0xf5, 0xf7, 0xa8, 0xce, 0xa9, 0x68, 0x18, + 0x95, 0xa1, 0x60, 0x4a, 0x91, 0x81, 0x55, 0x0f, 0xc2, 0x21, 0xc8, 0x1d, 0x0c, 0x6c, 0x9d, 0xd6, + 0xf2, 0x8d, 0xac, 0xb8, 0xb4, 0xb1, 0x2a, 0x05, 0x72, 0x91, 0x3c, 0xb9, 0x48, 0xa1, 0x5c, 0xa4, + 0x0e, 0x31, 0xed, 0xf6, 0xfa, 0xf9, 0xa8, 0x9e, 0xf9, 0xfc, 0xa3, 0x2e, 0x1a, 0xa6, 0x7b, 0x38, + 0xe8, 0x49, 0x1a, 0xb1, 0xe4, 0x50, 0x5b, 0xc1, 0xcf, 0x33, 0xaa, 0x1f, 0x85, 0x32, 0xf1, 0x1c, + 0xa8, 0x1a, 0x44, 0x6e, 0xbe, 0x02, 0x21, 0x9d, 0x8f, 0x98, 0xf3, 0x1a, 0x2c, 0x22, 0x5d, 0x77, + 0x30, 0xa5, 0x21, 0x31, 0x91, 0xc9, 0x71, 0xc0, 0xea, 0xc8, 0x45, 0x21, 0xc9, 0xfe, 0xba, 0xf9, + 0x8d, 0x01, 0x4e, 0xa1, 0xc6, 0xcb, 0x53, 0xac, 0x0d, 0xe6, 0x20, 0xd7, 0xfb, 0xaf, 0x42, 0x4c, + 0xc8, 0x6f, 0x6c, 0x47, 0x3c, 0x65, 0xff, 0x82, 0xa7, 0xdc, 0x7f, 0xe3, 0x69, 0x1d, 0xf8, 0x9b, + 0x6d, 0xc5, 0x1c, 0x45, 0x4c, 0x30, 0x09, 0x26, 0x3e, 0x05, 0x4c, 0x28, 0xa6, 0xe1, 0xa0, 0x7f, + 0x64, 0x62, 0x2e, 0xb1, 0x85, 0x74, 0xb1, 0xb7, 0xd2, 0x15, 0xf6, 0x32, 0x51, 0xd8, 0xcc, 0x5e, + 0x10, 0x2c, 0x2b, 0xd4, 0xd8, 0xeb, 0xeb, 0xc8, 0xc5, 0x9b, 0xbe, 0xfe, 0xa7, 0xb5, 0xf1, 0x00, + 0x8a, 0x36, 0x1e, 0x76, 0x93, 0x37, 0xa6, 0x60, 0xe3, 0x61, 0xe0, 0x94, 0xec, 0x31, 0x7b, 0xbd, + 0xc7, 0x66, 0xcd, 0xbf, 0x98, 0x89, 0x14, 0x51, 0x41, 0xcd, 0x0e, 0xdc, 0x51, 0xa8, 0xd1, 0x39, + 0xc6, 0xc8, 0x99, 0x9d, 0x7b, 0x56, 0xf8, 0xfb, 0xb0, 0x72, 0x2d, 0x48, 0x14, 0x7d, 0xe3, 0x2b, + 0x0b, 0x59, 0x85, 0x1a, 0xdc, 0x2e, 0x14, 0xaf, 0x46, 0x66, 0xca, 0x08, 0x4b, 0xce, 0x23, 0x7e, + 0x6d, 0xf6, 0x79, 0xcc, 0xe5, 0x7b, 0xb8, 0x97, 0x36, 0x6a, 0xc4, 0x54, 0xf7, 0x14, 0x24, 0xbf, + 0x3e, 0x2f, 0x32, 0x4e, 0x89, 0xe1, 0xee, 0xe4, 0xe5, 0x7b, 0x9c, 0x1a, 0x64, 0x02, 0xc5, 0x3f, + 0x9d, 0x07, 0x95, 0x4c, 0x33, 0xa9, 0xec, 0xf4, 0x34, 0x13, 0xa8, 0x29, 0x69, 0xa6, 0x89, 0xf1, + 0x2d, 0x2c, 0x25, 0x55, 0xd7, 0x48, 0x75, 0x4e, 0x20, 0x78, 0xf1, 0x36, 0x44, 0x1c, 0xfa, 0x0d, + 0x40, 0x42, 0x53, 0xf5, 0x54, 0xbf, 0x2b, 0x00, 0xff, 0xe4, 0x16, 0x40, 0x14, 0xb7, 0xbd, 0x75, + 0xfe, 0x4b, 0xc8, 0x9c, 0x8f, 0x05, 0xe6, 0x62, 0x2c, 0x30, 0x3f, 0xc7, 0x02, 0xf3, 0xf1, 0x52, + 0xc8, 0x5c, 0x5c, 0x0a, 0x99, 0xef, 0x97, 0x42, 0xe6, 0xdd, 0x5a, 0x62, 0xf0, 0x74, 0x08, 0xb5, + 0xf6, 0xa3, 0x67, 0x5c, 0x97, 0x4f, 0x83, 0xe7, 0xdc, 0x1f, 0x3e, 0xbd, 0xbc, 0xff, 0x98, 0x3f, + 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0xef, 0x6b, 0xa0, 0xa3, 0x4f, 0x08, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1007,6 +1009,13 @@ func (m *MsgStoreCodeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.Checksum) > 0 { + i -= len(m.Checksum) + copy(dAtA[i:], m.Checksum) + i = encodeVarintTx(dAtA, i, uint64(len(m.Checksum))) + i-- + dAtA[i] = 0x12 + } if m.CodeID != 0 { i = encodeVarintTx(dAtA, i, uint64(m.CodeID)) i-- @@ -1458,6 +1467,10 @@ func (m *MsgStoreCodeResponse) Size() (n int) { if m.CodeID != 0 { n += 1 + sovTx(uint64(m.CodeID)) } + l = len(m.Checksum) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } return n } @@ -1854,6 +1867,40 @@ func (m *MsgStoreCodeResponse) Unmarshal(dAtA []byte) error { break } } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Checksum", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Checksum = append(m.Checksum[:0], dAtA[iNdEx:postIndex]...) + if m.Checksum == nil { + m.Checksum = []byte{} + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) diff --git a/x/wasm/types/tx_test.go b/x/wasm/types/tx_test.go index b0ea43e969..b59ad7ce40 100644 --- a/x/wasm/types/tx_test.go +++ b/x/wasm/types/tx_test.go @@ -84,6 +84,7 @@ func TestInstantiateContractValidation(t *testing.T) { badAddress := bad.String() // proper address size goodAddress := sdk.AccAddress(make([]byte, 20)).String() + sdk.GetConfig().SetAddressVerifier(VerifyAddressLen()) cases := map[string]struct { msg MsgInstantiateContract diff --git a/x/wasm/types/types.go b/x/wasm/types/types.go index 3712af192c..6453c5f1d0 100644 --- a/x/wasm/types/types.go +++ b/x/wasm/types/types.go @@ -88,7 +88,7 @@ func (c *ContractInfo) ValidateBasic() error { return sdkerrors.Wrap(err, "admin") } } - if err := validateLabel(c.Label); err != nil { + if err := ValidateLabel(c.Label); err != nil { return sdkerrors.Wrap(err, "label") } if c.Extension == nil { diff --git a/x/wasm/types/validation.go b/x/wasm/types/validation.go index 4984fa28dd..0619c7f082 100644 --- a/x/wasm/types/validation.go +++ b/x/wasm/types/validation.go @@ -22,7 +22,8 @@ func validateWasmCode(s []byte) error { return nil } -func validateLabel(label string) error { +// ValidateLabel ensure label constraints +func ValidateLabel(label string) error { if label == "" { return sdkerrors.Wrap(ErrEmpty, "is required") } From bf734517b601924cc69b713d42fbca2df1ec1439 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 10 Sep 2022 22:01:27 +0700 Subject: [PATCH 091/120] Revert "turbo 46" This reverts commit 91cba511a183043897852aee8a821e487a78136d. --- go.mod | 26 +++-------- go.sum | 137 +++++++-------------------------------------------------- 2 files changed, 22 insertions(+), 141 deletions(-) diff --git a/go.mod b/go.mod index f04d86a1fa..fa2ea1c394 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/CosmWasm/wasmvm v1.0.0 github.com/cosmos/cosmos-db v0.0.0-20220901120321-77d98dabb5d3 github.com/cosmos/cosmos-sdk v0.46.1 - github.com/cosmos/iavl v0.19.2-0.20220831121246-807f8c542e48 + github.com/cosmos/iavl v0.19.1 github.com/cosmos/ibc-go/v5 v5.0.0-rc1 github.com/cosmos/interchain-accounts v0.3.2 github.com/dvsekhvalnov/jose2go v1.5.0 @@ -42,8 +42,6 @@ require ( filippo.io/edwards25519 v1.0.0-rc.1 // indirect github.com/99designs/keyring v1.2.1 // indirect github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect - github.com/DataDog/zstd v1.5.0 // indirect - github.com/HdrHistogram/hdrhistogram-go v1.1.2 // indirect github.com/Workiva/go-datastructures v1.0.53 // indirect github.com/armon/go-metrics v0.4.0 // indirect github.com/aws/aws-sdk-go v1.40.45 // indirect @@ -55,11 +53,6 @@ require ( github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect - github.com/cockroachdb/errors v1.8.1 // indirect - github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f // indirect - github.com/cockroachdb/pebble v0.0.0-20220817183557-09c6e030a677 // indirect - github.com/cockroachdb/redact v1.0.8 // indirect - github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2 // indirect github.com/coinbase/rosetta-sdk-go v0.7.9 // indirect github.com/confio/ics23/go v0.7.0 // indirect github.com/cosmos/btcutil v1.0.4 // indirect @@ -86,7 +79,7 @@ require ( github.com/golang/glog v1.0.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/snappy v0.0.4 // indirect - github.com/google/btree v1.1.2 // indirect + github.com/google/btree v1.0.1 // indirect github.com/google/orderedcode v0.0.1 // indirect github.com/googleapis/gax-go/v2 v2.4.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect @@ -109,14 +102,11 @@ require ( github.com/jmhodges/levigo v1.0.0 // indirect github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d // indirect github.com/klauspost/compress v1.15.9 // indirect - github.com/kr/pretty v0.3.0 // indirect - github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.6 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect - github.com/linxGnu/grocksdb v1.7.5 // indirect github.com/magiconair/properties v1.8.6 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.16 // indirect + github.com/mattn/go-colorable v0.1.12 // indirect + github.com/mattn/go-isatty v0.0.14 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 // indirect github.com/minio/highwayhash v1.0.2 // indirect @@ -132,7 +122,6 @@ require ( github.com/prometheus/common v0.37.0 // indirect github.com/prometheus/procfs v0.8.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 // indirect - github.com/rogpeppe/go-internal v1.8.1 // indirect github.com/rs/cors v1.8.2 // indirect github.com/rs/zerolog v1.27.0 // indirect github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa // indirect @@ -147,11 +136,11 @@ require ( github.com/zondax/hid v0.9.1-0.20220302062450-5552068d2266 // indirect go.etcd.io/bbolt v1.3.6 // indirect go.opencensus.io v0.23.0 // indirect - golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa // indirect + golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect - golang.org/x/net v0.0.0-20220812174116-3211cb980234 // indirect + golang.org/x/net v0.0.0-20220726230323-06994584191e // indirect golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 // indirect - golang.org/x/sys v0.0.0-20220817070843-5a390386f1f2 // indirect + golang.org/x/sys v0.0.0-20220727055044-e65921a090b8 // indirect golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 // indirect golang.org/x/text v0.3.7 // indirect golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df // indirect @@ -167,7 +156,6 @@ require ( replace ( // Use the cosmos-flavored keyring library github.com/99designs/keyring => github.com/cosmos/keyring v1.1.7-0.20210622111912-ef00f8ac3d76 - github.com/cosmos/cosmos-sdk => github.com/notional-labs/cosmos-sdk v0.46.0-craft.0.20220907004034-2a40a2ecd9c5 // Fix upstream GHSA-h395-qcrw-5vmq vulnerability. // TODO Remove it: https://github.com/cosmos/cosmos-sdk/issues/10409 github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.7.0 diff --git a/go.sum b/go.sum index b8fb65037a..828a21f44c 100644 --- a/go.sum +++ b/go.sum @@ -70,7 +70,6 @@ filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmG filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= git.sr.ht/~sircmpwn/getopt v0.0.0-20191230200459-23622cc906b3/go.mod h1:wMEGFFFNuPos7vHmWXfszqImLppbc0wEhh6JBfJIUgw= git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9/go.mod h1:BVJwbDfVjCjoFiKrhkei6NdGcZYpkDkdyCdg1ukytRA= -github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= @@ -79,25 +78,16 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/CloudyKit/fastprinter v0.0.0-20170127035650-74b38d55f37a/go.mod h1:EFZQ978U7x8IRnstaskI3IysnWY5Ao3QgZUKOXlsAdw= -github.com/CloudyKit/jet v2.1.3-0.20180809161101-62edd43e4f88+incompatible/go.mod h1:HPYO+50pSWkPoj9Q/eq0aRGByCL6ScRlUmiEX5Zgm+w= github.com/CosmWasm/wasmvm v1.0.0 h1:NRmnHe3xXsKn2uEcB1F5Ha323JVAhON+BI6L177dlKc= github.com/CosmWasm/wasmvm v1.0.0/go.mod h1:ei0xpvomwSdONsxDuONzV7bL1jSET1M8brEx0FCXc+A= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= -github.com/DataDog/zstd v1.5.0 h1:+K/VEwIAaPcHiMtQvpLD4lqW7f0Gk3xdYZmI1hD+CXo= github.com/DataDog/zstd v1.5.0/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= -github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= -github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= -github.com/Joker/jade v1.0.1-0.20190614124447-d475f43051e7/go.mod h1:6E6s8o2AE4KhCrqr6GRJjdC/gNfTdxkIXvuGZZda2VM= 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/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= -github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= @@ -110,7 +100,6 @@ github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1: github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -145,7 +134,6 @@ github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7 github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= -github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -216,20 +204,7 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/cockroachdb/datadriven v1.0.0/go.mod h1:5Ib8Meh+jk1RlHIXej6Pzevx/NLlNvQB9pmSBZErGA4= -github.com/cockroachdb/errors v1.6.1/go.mod h1:tm6FTP5G81vwJ5lC0SizQo374JNCOPrHyXGitRJoDqM= -github.com/cockroachdb/errors v1.8.1 h1:A5+txlVZfOqFBDa4mGz2bUWSp0aHElvHX2bKkdbQu+Y= -github.com/cockroachdb/errors v1.8.1/go.mod h1:qGwQn6JmZ+oMjuLwjWzUNqblqk0xl4CVV3SQbGwK7Ac= -github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f h1:o/kfcElHqOiXqcou5a3rIlMc7oJbMQkeLk0VQJ7zgqY= -github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= -github.com/cockroachdb/pebble v0.0.0-20220817183557-09c6e030a677 h1:qbb/AE938DFhOajUYh9+OXELpSF9KZw2ZivtmW6eX1Q= -github.com/cockroachdb/pebble v0.0.0-20220817183557-09c6e030a677/go.mod h1:890yq1fUb9b6dGNwssgeUO5vQV9qfXnCPxAJhBQfXw0= -github.com/cockroachdb/redact v1.0.8 h1:8QG/764wK+vmEYoOlfobpe12EQcS81ukx/a4hdVMxNw= -github.com/cockroachdb/redact v1.0.8/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2 h1:IKgmqgMQlVJIZj19CdocBeSfSaiCbEBZGKODaixqtHM= -github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2/go.mod h1:8BT+cPK6xvFOcRlk0R8eg+OTkcqI6baNH4xAkpiYVvQ= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= github.com/coinbase/kryptology v1.8.0/go.mod h1:RYXOAPdzOGUe3qlSFkMGn58i3xUA8hmxYHksuq+8ciI= github.com/coinbase/rosetta-sdk-go v0.7.9 h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZr9ZvoCcA= github.com/coinbase/rosetta-sdk-go v0.7.9/go.mod h1:0/knutI7XGVqXmmH4OQD8OckFrbQ8yMsUZTG7FXCR2M= @@ -248,17 +223,17 @@ github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1 github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.4 h1:n7C2ngKXo7UC9gNyMNLbzqz7Asuf+7Qv4gnX/rOdQ44= github.com/cosmos/btcutil v1.0.4/go.mod h1:Ffqc8Hn6TJUdDgHBwIZLtrLQC1KdJ9jGJl/TvgUaxbU= -github.com/cosmos/cosmos-db v0.0.0-20220901120321-77d98dabb5d3 h1:h2ENpR9rZnqLE85EdN+OoGZ3DUH9Xjfozz44wnA3Or8= -github.com/cosmos/cosmos-db v0.0.0-20220901120321-77d98dabb5d3/go.mod h1:5DZPX2HFdg4n1PWFXRR/q7J2e1mxRc+A7g3UMnrKHkM= github.com/cosmos/cosmos-proto v1.0.0-alpha7 h1:yqYUOHF2jopwZh4dVQp3xgqwftE5/2hkrwIV6vkUbO0= github.com/cosmos/cosmos-proto v1.0.0-alpha7/go.mod h1:dosO4pSAbJF8zWCzCoTWP7nNsjcvSUBQmniFxDg5daw= +github.com/cosmos/cosmos-sdk v0.46.1 h1:7vUZXMyrmEb4xtBYpz1TobtrcnpgiZTi+tVjc0XWB4o= +github.com/cosmos/cosmos-sdk v0.46.1/go.mod h1:2+o8Qw8qnE02V+lQVZDJFQ8tri/hsiA5GmWaPERqVa0= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= -github.com/cosmos/iavl v0.19.2-0.20220831121246-807f8c542e48 h1:EsahAnhcFjgBEw5YmpKC4WPIXuq+/wtfv8wILvlzH7M= -github.com/cosmos/iavl v0.19.2-0.20220831121246-807f8c542e48/go.mod h1:QDVpRN0MG85An81kvRwB/yhAA6AuMvlTRM+CJTdslpg= +github.com/cosmos/iavl v0.19.1 h1:3gaq9b6SjiB0KBTygRnAvEGml2pQlu1TH8uma5g63Ys= +github.com/cosmos/iavl v0.19.1/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= github.com/cosmos/ibc-go/v5 v5.0.0-rc1 h1:9cgpYmHh2jodB/t3LwB/pYA2sG9rdKB9cmXP0D5M0Fs= github.com/cosmos/ibc-go/v5 v5.0.0-rc1/go.mod h1:Wqsguq98Iuns8tgTv8+xaGYbC+Q8zJfbpjzT6IgMJbs= github.com/cosmos/interchain-accounts v0.3.2 h1:7S5rSndahpjkzUvG00kKZrTZsEuVHuVC9a7p0qDVcF8= @@ -293,7 +268,6 @@ github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= -github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= @@ -325,7 +299,6 @@ github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1 github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -337,19 +310,15 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m 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= -github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= -github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4/go.mod h1:T9YF2M40nIgbVgp3rreNmTged+9HrbNTIQf1PsaIiTA= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= @@ -359,11 +328,9 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= -github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9/go.mod h1:106OIgooyS7OzLDOpUGgm9fA3bQENb/cFSyyBmMoJDs= 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= @@ -371,10 +338,7 @@ github.com/gin-gonic/gin v1.7.0 h1:jGB9xAJQ12AIGNB4HguylppmDK1Am9ppF7XnGXXJuoU= github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= -github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= -github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= 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= @@ -392,7 +356,6 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V 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-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= @@ -419,9 +382,7 @@ github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5x github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= -github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= @@ -468,11 +429,10 @@ github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= -github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= -github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= +github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -489,7 +449,6 @@ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -541,7 +500,6 @@ github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= @@ -610,10 +568,8 @@ github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpO github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/huin/goupnp v1.0.3-0.20220313090229-ca81a64b4204/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= -github.com/hydrogen18/memlistener v0.0.0-20141126152155-54553eb933fb/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= 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 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= @@ -630,10 +586,6 @@ github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19y github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= -github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= -github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= -github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0/go.mod h1:pMCz62A0xJL6I+umB2YTlFRwWXaDFA0jy+5HzGiJjqI= -github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= @@ -662,27 +614,17 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= -github.com/juju/loggo v0.0.0-20180524022052-584905176618/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U= -github.com/juju/testing v0.0.0-20180920084828-472a3e8b2073/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= -github.com/kataras/golog v0.0.9/go.mod h1:12HJgwBIZFNGL0EJnMRhmvGA0PQGx8VFwrZtM4CqbAk= -github.com/kataras/iris/v12 v12.0.1/go.mod h1:udK4vLQKkdDqMGJJVd/msuMtN6hpYJhg/lSzuxjhO+U= -github.com/kataras/neffos v0.0.10/go.mod h1:ZYmJC07hQPW67eKuzlfY7SO3bC0mw83A3j6im82hfqw= -github.com/kataras/pio v0.0.0-20190103105442-ea782b38602d/go.mod h1:NV88laa9UiiDuX9AhMbDPkGYSPugBOV6yTZB1l2K9Z0= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d h1:Z+RDyXzjKE0i2sTjZ/b1uxiGtPhFy34Ou/Tk0qwN0kM= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc= 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/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.9.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= 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= @@ -690,7 +632,6 @@ github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8 github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY= github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -700,13 +641,11 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g= github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= @@ -719,8 +658,6 @@ github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6 github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/linxGnu/grocksdb v1.7.5 h1:nB/Z6OsxvO4VJqn4CYaUubYh0523YBsAPvrW5Gc7cnY= -github.com/linxGnu/grocksdb v1.7.5/go.mod h1:8RUIOKch4MgftfkmgG4FPVkPUwvbLWlX/FcDkJFXIbo= github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -734,30 +671,24 @@ github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVc github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= 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.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= 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-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= 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/mediocregopher/mediocre-go-lib v0.0.0-20181029021733-cb65787f37ed/go.mod h1:dSsfyI2zABAdhcbvkXqgxOxrCsbYeHCPgrZkku60dSg= -github.com/mediocregopher/radix/v3 v3.3.0/go.mod h1:EmfVyvspXz1uZEyPBMyGK+kjWiKQGvsUt6O3Pj+LDCQ= -github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 h1:hLDRPB66XQT/8+wG9WsDpiCvZf1yKO7sz7scAjSlBa0= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= @@ -786,7 +717,6 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= -github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= 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= @@ -799,16 +729,12 @@ github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats.go v1.8.1/go.mod h1:BrFz9vVn0fU3AcH9Vn4Kd7W0NpJ651tD5omQ3M8LwxM= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.0.2/go.mod h1:dab7URMsZm6Z/jp9Z5UGa87Uutgc2mVpXLC4B7TDb/4= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/neilotoole/errgroup v0.1.6/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/notional-labs/cosmos-sdk v0.46.0-craft.0.20220907004034-2a40a2ecd9c5 h1:5GNz1gNr/gRaTxWjzlw3a708ZvKsPmDZDPWoHhlyWJQ= -github.com/notional-labs/cosmos-sdk v0.46.0-craft.0.20220907004034-2a40a2ecd9c5/go.mod h1:1ewwrHQB6DXP6jmMDyF1u8TwBbZ9INgyjNAT+KKzKkg= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= @@ -819,7 +745,6 @@ github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0= github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= @@ -861,9 +786,6 @@ github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= -github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -928,9 +850,7 @@ github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRr github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= -github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= +github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= 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= @@ -941,17 +861,14 @@ github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa h1:0U2s5loxrTy6/VgfVoLuVLFJcURKLH49ie0zSch7gh4= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= -github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -1046,26 +963,16 @@ github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oW 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/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -1120,8 +1027,8 @@ golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa h1:zuSxTR4o9y82ebqCUJYNGJbGPo6sKVl54f/TVDObg1c= -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1136,7 +1043,6 @@ 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-20200513190911-00229845015e/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= @@ -1177,7 +1083,6 @@ golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -1187,7 +1092,6 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1228,8 +1132,8 @@ golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220812174116-3211cb980234 h1:RDqmgfe7SvlMWoqC3xwQ2blLO3fcWcxMa3eBLRdRW7E= -golang.org/x/net v0.0.0-20220812174116-3211cb980234/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20220726230323-06994584191e h1:wOQNKh1uuDGRnmgF0jDxh7ctgGy/3P4rYWQRVJD4/Yg= +golang.org/x/net v0.0.0-20220726230323-06994584191e/go.mod h1:AaygXjzTFtRAg2ttMY5RMuhpJ3cNnI0XpyFJD1iQRSM= 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= @@ -1262,7 +1166,6 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1349,7 +1252,6 @@ golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/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-20210909193231-528a39cd75f3/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-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1364,9 +1266,8 @@ golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/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-20220520151302-bc2c85ada10a/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-20220817070843-5a390386f1f2 h1:fqTvyMIIj+HRzMmnzr9NtpHP6uVpvB5fkHcgPDC4nu8= -golang.org/x/sys v0.0.0-20220817070843-5a390386f1f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220727055044-e65921a090b8 h1:dyU22nBWzrmTQxtNrr4dzVOvaw35nUYE279vF9UmsI8= +golang.org/x/sys v0.0.0-20220727055044-e65921a090b8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1391,14 +1292,12 @@ golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -1463,8 +1362,6 @@ golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNq gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= -gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM= -gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= @@ -1517,7 +1414,6 @@ google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1603,7 +1499,6 @@ google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b h1:SfSkJugek6xm7lWywqth4r2iTrYLpD8lOj1nMIIhMNM= google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= -google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= 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.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -1664,7 +1559,6 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= @@ -1675,7 +1569,6 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI= gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= From 0cf56ad445ab75742b48c254c54496c9f46a6103 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 10 Sep 2022 22:01:45 +0700 Subject: [PATCH 092/120] Revert "turbo46" This reverts commit f452fd1c44292608ecece6c3460e52acc15bdf8d. --- app/app.go | 2 +- app/app_test.go | 2 +- app/sim_test.go | 2 +- app/test_helpers.go | 2 +- benchmarks/app_test.go | 2 +- benchmarks/bench_test.go | 2 +- cmd/wasmd/root.go | 2 +- go.mod | 4 ++-- x/wasm/keeper/ante_test.go | 2 +- x/wasm/keeper/bench_test.go | 2 +- x/wasm/keeper/genesis_test.go | 2 +- x/wasm/keeper/query_plugins_test.go | 2 +- x/wasm/keeper/test_common.go | 2 +- x/wasm/types/iavl_range_test.go | 2 +- 14 files changed, 15 insertions(+), 15 deletions(-) diff --git a/app/app.go b/app/app.go index 62dfb5a631..baeb5df62b 100644 --- a/app/app.go +++ b/app/app.go @@ -95,7 +95,6 @@ import ( // Note: please do your research before using this in production app, this is a demo and not an officially // supported IBC team implementation. It has no known issues, but do your own research before using it. - dbm "github.com/cosmos/cosmos-db" storetypes "github.com/cosmos/cosmos-sdk/store/types" intertx "github.com/cosmos/interchain-accounts/x/inter-tx" intertxkeeper "github.com/cosmos/interchain-accounts/x/inter-tx/keeper" @@ -108,6 +107,7 @@ import ( "github.com/tendermint/tendermint/libs/log" tmos "github.com/tendermint/tendermint/libs/os" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + dbm "github.com/tendermint/tm-db" wasmappparams "github.com/CosmWasm/wasmd/app/params" "github.com/CosmWasm/wasmd/x/wasm" diff --git a/app/app_test.go b/app/app_test.go index 23bcf45e7f..46f0725262 100644 --- a/app/app_test.go +++ b/app/app_test.go @@ -6,7 +6,6 @@ import ( "testing" "time" - db "github.com/cosmos/cosmos-db" codectypes "github.com/cosmos/cosmos-sdk/codec/types" cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" @@ -19,6 +18,7 @@ import ( "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/libs/log" tmtypes "github.com/tendermint/tendermint/types" + db "github.com/tendermint/tm-db" abci "github.com/tendermint/tendermint/abci/types" diff --git a/app/sim_test.go b/app/sim_test.go index 31e9cd94e6..925bc03ec5 100644 --- a/app/sim_test.go +++ b/app/sim_test.go @@ -11,7 +11,6 @@ import ( "github.com/cosmos/cosmos-sdk/store" "github.com/cosmos/cosmos-sdk/store/prefix" - dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" @@ -38,6 +37,7 @@ import ( "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/libs/log" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + dbm "github.com/tendermint/tm-db" "github.com/CosmWasm/wasmd/x/wasm" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" diff --git a/app/test_helpers.go b/app/test_helpers.go index 20952d642d..6c2e8133cb 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -12,7 +12,6 @@ import ( "time" "cosmossdk.io/math" - dbm "github.com/cosmos/cosmos-db" bam "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" codectypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -34,6 +33,7 @@ import ( "github.com/tendermint/tendermint/libs/log" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" + dbm "github.com/tendermint/tm-db" "github.com/CosmWasm/wasmd/x/wasm" ) diff --git a/benchmarks/app_test.go b/benchmarks/app_test.go index 99538cc2f2..6a1c98dda3 100644 --- a/benchmarks/app_test.go +++ b/benchmarks/app_test.go @@ -9,11 +9,11 @@ import ( "github.com/stretchr/testify/require" - dbm "github.com/cosmos/cosmos-db" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" + dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/simapp/helpers" diff --git a/benchmarks/bench_test.go b/benchmarks/bench_test.go index 9f8198d45d..0cd181f5d1 100644 --- a/benchmarks/bench_test.go +++ b/benchmarks/bench_test.go @@ -8,9 +8,9 @@ import ( "github.com/stretchr/testify/require" "github.com/syndtr/goleveldb/leveldb/opt" - dbm "github.com/cosmos/cosmos-db" abci "github.com/tendermint/tendermint/abci/types" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/cmd/wasmd/root.go b/cmd/wasmd/root.go index ca0b3db74c..5a6e6accf1 100644 --- a/cmd/wasmd/root.go +++ b/cmd/wasmd/root.go @@ -6,7 +6,6 @@ import ( "os" "path/filepath" - dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/config" @@ -32,6 +31,7 @@ import ( tmcfg "github.com/tendermint/tendermint/config" tmcli "github.com/tendermint/tendermint/libs/cli" "github.com/tendermint/tendermint/libs/log" + dbm "github.com/tendermint/tm-db" "github.com/CosmWasm/wasmd/app" "github.com/CosmWasm/wasmd/app/params" diff --git a/go.mod b/go.mod index fa2ea1c394..f9e23e209d 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,6 @@ require ( cosmossdk.io/errors v1.0.0-beta.7 cosmossdk.io/math v1.0.0-beta.3 github.com/CosmWasm/wasmvm v1.0.0 - github.com/cosmos/cosmos-db v0.0.0-20220901120321-77d98dabb5d3 github.com/cosmos/cosmos-sdk v0.46.1 github.com/cosmos/iavl v0.19.1 github.com/cosmos/ibc-go/v5 v5.0.0-rc1 @@ -29,6 +28,7 @@ require ( github.com/stretchr/testify v1.8.0 github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 github.com/tendermint/tendermint v0.34.21 + github.com/tendermint/tm-db v0.6.7 google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b google.golang.org/grpc v1.49.0 gopkg.in/yaml.v2 v2.4.0 @@ -56,6 +56,7 @@ require ( github.com/coinbase/rosetta-sdk-go v0.7.9 // indirect github.com/confio/ics23/go v0.7.0 // indirect github.com/cosmos/btcutil v1.0.4 // indirect + github.com/cosmos/cosmos-db v0.0.0-20220901120321-77d98dabb5d3 // indirect github.com/cosmos/cosmos-proto v1.0.0-alpha7 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gorocksdb v1.2.0 // indirect @@ -131,7 +132,6 @@ require ( github.com/tendermint/btcd v0.1.1 // indirect github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 // indirect github.com/tendermint/go-amino v0.16.0 // indirect - github.com/tendermint/tm-db v0.6.7 // indirect github.com/ulikunitz/xz v0.5.8 // indirect github.com/zondax/hid v0.9.1-0.20220302062450-5552068d2266 // indirect go.etcd.io/bbolt v1.3.6 // indirect diff --git a/x/wasm/keeper/ante_test.go b/x/wasm/keeper/ante_test.go index 092b1aa397..e96332c9fe 100644 --- a/x/wasm/keeper/ante_test.go +++ b/x/wasm/keeper/ante_test.go @@ -8,7 +8,6 @@ import ( "github.com/CosmWasm/wasmd/x/wasm/keeper" - dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/store" storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -16,6 +15,7 @@ import ( "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/libs/log" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + dbm "github.com/tendermint/tm-db" "github.com/CosmWasm/wasmd/x/wasm/types" ) diff --git a/x/wasm/keeper/bench_test.go b/x/wasm/keeper/bench_test.go index cfed0f2bdc..1ad1693bb5 100644 --- a/x/wasm/keeper/bench_test.go +++ b/x/wasm/keeper/bench_test.go @@ -4,9 +4,9 @@ import ( "os" "testing" - dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" "github.com/stretchr/testify/require" + dbm "github.com/tendermint/tm-db" "github.com/CosmWasm/wasmd/x/wasm/types" ) diff --git a/x/wasm/keeper/genesis_test.go b/x/wasm/keeper/genesis_test.go index e3e99be1aa..001e4c5edc 100644 --- a/x/wasm/keeper/genesis_test.go +++ b/x/wasm/keeper/genesis_test.go @@ -11,7 +11,6 @@ import ( "testing" "time" - dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/store" "github.com/cosmos/cosmos-sdk/store/prefix" storetypes "github.com/cosmos/cosmos-sdk/store/types" @@ -29,6 +28,7 @@ import ( "github.com/tendermint/tendermint/libs/log" "github.com/tendermint/tendermint/proto/tendermint/crypto" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + dbm "github.com/tendermint/tm-db" "github.com/CosmWasm/wasmd/x/wasm/types" wasmTypes "github.com/CosmWasm/wasmd/x/wasm/types" diff --git a/x/wasm/keeper/query_plugins_test.go b/x/wasm/keeper/query_plugins_test.go index e64a1a9595..555521d68f 100644 --- a/x/wasm/keeper/query_plugins_test.go +++ b/x/wasm/keeper/query_plugins_test.go @@ -4,8 +4,8 @@ import ( "encoding/json" "testing" - dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/store" + dbm "github.com/tendermint/tm-db" wasmvmtypes "github.com/CosmWasm/wasmvm/types" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/wasm/keeper/test_common.go b/x/wasm/keeper/test_common.go index 2909429002..b1d6edcb40 100644 --- a/x/wasm/keeper/test_common.go +++ b/x/wasm/keeper/test_common.go @@ -10,7 +10,6 @@ import ( "github.com/CosmWasm/wasmd/x/wasm/keeper/testdata" - dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/std" @@ -71,6 +70,7 @@ import ( "github.com/tendermint/tendermint/libs/log" "github.com/tendermint/tendermint/libs/rand" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + dbm "github.com/tendermint/tm-db" wasmappparams "github.com/CosmWasm/wasmd/app/params" diff --git a/x/wasm/types/iavl_range_test.go b/x/wasm/types/iavl_range_test.go index 2d6472b986..1e5bdc92ab 100644 --- a/x/wasm/types/iavl_range_test.go +++ b/x/wasm/types/iavl_range_test.go @@ -3,11 +3,11 @@ package types import ( "testing" - dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/store" "github.com/cosmos/cosmos-sdk/store/iavl" iavl2 "github.com/cosmos/iavl" "github.com/stretchr/testify/require" + dbm "github.com/tendermint/tm-db" ) // This is modeled close to From 5354d3fc91ddefdd2120904f055ad3d2fa4af585 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 10 Sep 2022 22:22:48 +0700 Subject: [PATCH 093/120] fix flagproposaltype --- x/wasm/client/cli/gov_tx.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/x/wasm/client/cli/gov_tx.go b/x/wasm/client/cli/gov_tx.go index f9a5681570..3322129fc3 100644 --- a/x/wasm/client/cli/gov_tx.go +++ b/x/wasm/client/cli/gov_tx.go @@ -94,7 +94,7 @@ func ProposalStoreCodeCmd() *cobra.Command { cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") + cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd } @@ -172,7 +172,7 @@ func ProposalInstantiateContractCmd() *cobra.Command { cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") + cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd } @@ -235,7 +235,7 @@ func ProposalMigrateContractCmd() *cobra.Command { cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") + cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd } @@ -314,7 +314,7 @@ func ProposalExecuteContractCmd() *cobra.Command { cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") + cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd } @@ -374,7 +374,7 @@ func ProposalSudoContractCmd() *cobra.Command { cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") + cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd } @@ -435,7 +435,7 @@ func ProposalUpdateContractAdminCmd() *cobra.Command { cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") + cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd } @@ -490,7 +490,7 @@ func ProposalClearContractAdminCmd() *cobra.Command { cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") + cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd } @@ -549,7 +549,7 @@ func ProposalPinCodesCmd() *cobra.Command { cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") + cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd } @@ -620,7 +620,7 @@ func ProposalUnpinCodesCmd() *cobra.Command { cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") + cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd } @@ -738,6 +738,6 @@ $ %s tx gov submit-proposal update-instantiate-config 1:nobody 2:everybody 3:%s1 cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(flagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") + cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") return cmd } From 44c1674f13fcea4a812cc7bfcc6c05ad4ec76ef5 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sun, 11 Sep 2022 08:12:24 +0700 Subject: [PATCH 094/120] update --- x/wasm/client/cli/gov_tx.go | 20 +++++++++---------- x/wasm/keeper/proposal_integration_test.go | 23 ++++++++-------------- 2 files changed, 18 insertions(+), 25 deletions(-) diff --git a/x/wasm/client/cli/gov_tx.go b/x/wasm/client/cli/gov_tx.go index 3322129fc3..3e1deb31cf 100644 --- a/x/wasm/client/cli/gov_tx.go +++ b/x/wasm/client/cli/gov_tx.go @@ -94,7 +94,7 @@ func ProposalStoreCodeCmd() *cobra.Command { cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") + cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") //nolint:staticcheck return cmd } @@ -172,7 +172,7 @@ func ProposalInstantiateContractCmd() *cobra.Command { cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") + cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") //nolint:staticcheck return cmd } @@ -235,7 +235,7 @@ func ProposalMigrateContractCmd() *cobra.Command { cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") + cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") //nolint:staticcheck return cmd } @@ -314,7 +314,7 @@ func ProposalExecuteContractCmd() *cobra.Command { cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") + cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") //nolint:staticcheck return cmd } @@ -374,7 +374,7 @@ func ProposalSudoContractCmd() *cobra.Command { cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") + cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") //nolint:staticcheck return cmd } @@ -435,7 +435,7 @@ func ProposalUpdateContractAdminCmd() *cobra.Command { cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") + cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") //nolint:staticcheck return cmd } @@ -490,7 +490,7 @@ func ProposalClearContractAdminCmd() *cobra.Command { cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") + cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") //nolint:staticcheck return cmd } @@ -549,7 +549,7 @@ func ProposalPinCodesCmd() *cobra.Command { cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") + cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") //nolint:staticcheck return cmd } @@ -620,7 +620,7 @@ func ProposalUnpinCodesCmd() *cobra.Command { cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") + cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") //nolint:staticcheck return cmd } @@ -738,6 +738,6 @@ $ %s tx gov submit-proposal update-instantiate-config 1:nobody 2:everybody 3:%s1 cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") cmd.Flags().String(cli.FlagProposal, "", "Proposal file path (if this path is given, other proposal flags are ignored)") //nolint:staticcheck // type values must match the "ProposalHandler" "routes" in cli - cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") + cmd.Flags().String(cli.FlagProposalType, "", "Permission of proposal, types: store-code/instantiate/migrate/update-admin/clear-admin/text/parameter_change/software_upgrade") //nolint:staticcheck return cmd } diff --git a/x/wasm/keeper/proposal_integration_test.go b/x/wasm/keeper/proposal_integration_test.go index 6e3c25f92d..cf5c88d28c 100644 --- a/x/wasm/keeper/proposal_integration_test.go +++ b/x/wasm/keeper/proposal_integration_test.go @@ -35,7 +35,6 @@ func TestStoreCodeProposal(t *testing.T) { wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) - myActorAddress := govKeeper.GetGovernanceAccount(ctx).GetAddress().String() specs := map[string]struct { codeID int64 unpinCode bool @@ -53,30 +52,24 @@ func TestStoreCodeProposal(t *testing.T) { ctx, _ := parentCtx.CacheContext() myActorAddress := RandomBech32AccountAddress(t) - msgContent, err := govv1.NewLegacyContent(src, myActorAddress) - require.NoError(t, err) - - // when stored - _, err = govKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, "testing 123") - require.NoError(t, err) - - // and proposal execute - handler := govKeeper.LegacyRouter().GetRoute(src.ProposalRoute()) - err = handler(ctx, src) - require.NoError(t, err) src := types.StoreCodeProposalFixture(func(p *types.StoreCodeProposal) { p.RunAs = myActorAddress p.WASMByteCode = wasmCode p.UnpinCode = spec.unpinCode }) + msgContent, err := govv1.NewLegacyContent(src, myActorAddress) + require.NoError(t, err) + + em := sdk.NewEventManager() + // when stored - storedProposal, err := govKeeper.SubmitProposal(ctx, src) + _, err = govKeeper.SubmitProposal(ctx, []sdk.Msg{msgContent}, "testing123") require.NoError(t, err) // and proposal execute - handler := govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) - err = handler(ctx, storedProposal.GetContent()) + handler := govKeeper.LegacyRouter().GetRoute(src.ProposalRoute()) + err = handler(ctx.WithEventManager(em), src) require.NoError(t, err) // then From 5df3568d9db4d894761f83861be8a6c33e29d892 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Mon, 12 Sep 2022 14:32:41 +0700 Subject: [PATCH 095/120] use keyed fields --- x/wasm/keeper/reflect_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/wasm/keeper/reflect_test.go b/x/wasm/keeper/reflect_test.go index e8f04ecf74..d6e4f6531c 100644 --- a/x/wasm/keeper/reflect_test.go +++ b/x/wasm/keeper/reflect_test.go @@ -331,7 +331,7 @@ func TestReflectTotalSupplyQuery(t *testing.T) { Chain: &testdata.ChainQuery{ Request: &wasmvmtypes.QueryRequest{ Bank: &wasmvmtypes.BankQuery{ - Supply: &wasmvmtypes.SupplyQuery{spec.denom}, + Supply: &wasmvmtypes.SupplyQuery{Denom: spec.denom}, }, }, }, From 4a1d1b1e4216a81e2ea52bd7046aaa4d65adbd82 Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Wed, 14 Sep 2022 10:35:47 +0200 Subject: [PATCH 096/120] Add factory contract scenario --- x/wasm/keeper/keeper_test.go | 79 ++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index f00f28799f..b8c6f5a114 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -6,11 +6,14 @@ import ( "encoding/hex" "encoding/json" "errors" + "fmt" "os" "strings" "testing" "time" + "github.com/cosmos/cosmos-sdk/baseapp" + wasmvm "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" @@ -755,6 +758,82 @@ func TestInstantiateWithContractDataResponse(t *testing.T) { assert.Equal(t, []byte("my-response-data"), data) } +func TestInstantiateWithContractFactoryChildQueriesParent(t *testing.T) { + // Scenario: + // given a factory contract stored + // when instantiated, the contract creates a new child contract instance + // and the child contracts queries the senders ContractInfo on instantiation + // then the factory contract's ContractInfo should be returned to the child contract + // + // see also: https://github.com/CosmWasm/wasmd/issues/896 + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) + keeper := keepers.WasmKeeper + + var instantiationCount int + callbacks := make([]func(codeID wasmvm.Checksum, env wasmvmtypes.Env, info wasmvmtypes.MessageInfo, initMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.Response, uint64, error), 2) + wasmerMock := &wasmtesting.MockWasmer{ + // dispatch instantiation calls to callbacks + InstantiateFn: func(codeID wasmvm.Checksum, env wasmvmtypes.Env, info wasmvmtypes.MessageInfo, initMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.Response, uint64, error) { + require.Greater(t, len(callbacks), instantiationCount, "unexpected call to instantiation") + do := callbacks[instantiationCount] + instantiationCount++ + return do(codeID, env, info, initMsg, store, goapi, querier, gasMeter, gasLimit, deserCost) + }, + AnalyzeCodeFn: wasmtesting.WithoutIBCAnalyzeFn, + CreateFn: wasmtesting.NoOpCreateFn, + } + + // overwrite wasmvm in router + router := baseapp.NewMsgServiceRouter() + router.SetInterfaceRegistry(keepers.EncodingConfig.InterfaceRegistry) + types.RegisterMsgServer(router, NewMsgServerImpl(NewDefaultPermissionKeeper(keeper))) + keeper.messenger = NewDefaultMessageHandler(router, nil, nil, nil, keepers.EncodingConfig.Marshaler, nil) + // overwrite wasmvm in response handler + keeper.wasmVMResponseHandler = NewDefaultWasmVMContractResponseHandler(NewMessageDispatcher(keeper.messenger, keeper)) + + example := StoreRandomContract(t, ctx, keepers, wasmerMock) + // factory contract + callbacks[0] = func(codeID wasmvm.Checksum, env wasmvmtypes.Env, info wasmvmtypes.MessageInfo, initMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.Response, uint64, error) { + t.Log("called factory") + return &wasmvmtypes.Response{Data: []byte("parent"), Messages: []wasmvmtypes.SubMsg{ + { + ID: 1, ReplyOn: wasmvmtypes.ReplyNever, + Msg: wasmvmtypes.CosmosMsg{ + Wasm: &wasmvmtypes.WasmMsg{ + Instantiate: &wasmvmtypes.InstantiateMsg{CodeID: example.CodeID, Msg: []byte(`{}`), Label: "child"}, + }, + }, + }, + }}, 0, nil + } + + // child contract + var capturedSenderAddr string + var capturedCodeInfo []byte + callbacks[1] = func(codeID wasmvm.Checksum, env wasmvmtypes.Env, info wasmvmtypes.MessageInfo, initMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.Response, uint64, error) { + t.Log("called child") + capturedSenderAddr = info.Sender + var err error + capturedCodeInfo, err = querier.Query(wasmvmtypes.QueryRequest{ + Wasm: &wasmvmtypes.WasmQuery{ + ContractInfo: &wasmvmtypes.ContractInfoQuery{ContractAddr: info.Sender}, + }, + }, gasLimit) + require.NoError(t, err) + return &wasmvmtypes.Response{Data: []byte("child")}, 0, nil + } + + // when + parentAddr, data, err := keepers.ContractKeeper.Instantiate(ctx, example.CodeID, example.CreatorAddr, nil, nil, "test", nil) + + // then + require.NoError(t, err) + assert.Equal(t, []byte("parent"), data) + require.Equal(t, parentAddr.String(), capturedSenderAddr) + expCodeInfo := fmt.Sprintf(`{"code_id":%d,"creator":%q,"pinned":false}`, example.CodeID, example.CreatorAddr.String()) + assert.JSONEq(t, expCodeInfo, string(capturedCodeInfo)) +} + func TestExecute(t *testing.T) { ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper From 0b400d6c8802ba78f53a38db912d089cc1dc695b Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Wed, 14 Sep 2022 12:34:50 +0200 Subject: [PATCH 097/120] Fix genesis message tooling --- x/wasm/client/cli/genesis_msg.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/x/wasm/client/cli/genesis_msg.go b/x/wasm/client/cli/genesis_msg.go index d7936e0145..0859b03251 100644 --- a/x/wasm/client/cli/genesis_msg.go +++ b/x/wasm/client/cli/genesis_msg.go @@ -8,6 +8,8 @@ import ( "errors" "fmt" + "github.com/CosmWasm/wasmd/x/wasm/ioutils" + "github.com/CosmWasm/wasmd/x/wasm/keeper" "github.com/cosmos/cosmos-sdk/client" @@ -283,7 +285,15 @@ func GetAllCodes(state *types.GenesisState) []CodeMeta { creator := sdk.MustAccAddressFromBech32(msg.Sender) accessConfig = state.Params.InstantiateDefaultPermission.With(creator) } - hash := sha256.Sum256(msg.WASMByteCode) + bz := msg.WASMByteCode + if ioutils.IsGzip(msg.WASMByteCode) { + var err error + bz, err = ioutils.Uncompress(msg.WASMByteCode, uint64(types.MaxWasmSize)) + if err != nil { + panic(fmt.Sprintf("failed to unzip wasm binary: %s", err)) + } + } + hash := sha256.Sum256(bz) all = append(all, CodeMeta{ CodeID: seq, Info: types.CodeInfo{ From 2d896aaefe4f0cdc57ee535c9163bd2facebbdc3 Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Wed, 14 Sep 2022 15:43:29 +0200 Subject: [PATCH 098/120] Minor cleanup --- x/wasm/simulation/operations.go | 80 ++++++++++++++------------------- 1 file changed, 34 insertions(+), 46 deletions(-) diff --git a/x/wasm/simulation/operations.go b/x/wasm/simulation/operations.go index 41903002a1..13c2f01670 100644 --- a/x/wasm/simulation/operations.go +++ b/x/wasm/simulation/operations.go @@ -114,7 +114,7 @@ func WeightedOperations( } // SimulateMsgStoreCode generates a MsgStoreCode with random values -func SimulateMsgStoreCode(ak types.AccountKeeper, bk simulation.BankKeeper, wasmKeeper WasmKeeper, wasmBz []byte, gas uint64) simtypes.Operation { +func SimulateMsgStoreCode(ak types.AccountKeeper, bk BankKeeper, wasmKeeper WasmKeeper, wasmBz []byte, gas uint64) simtypes.Operation { return func( r *rand.Rand, app *baseapp.BaseApp, @@ -136,21 +136,7 @@ func SimulateMsgStoreCode(ak types.AccountKeeper, bk simulation.BankKeeper, wasm WASMByteCode: wasmBz, InstantiatePermission: &config, } - - txCtx := simulation.OperationInput{ - R: r, - App: app, - TxGen: simappparams.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: &msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - } - + txCtx := BuildOperationInput(r, app, ctx, &msg, simAccount, ak, bk, nil) return GenAndDeliverTxWithRandFees(txCtx, gas) } } @@ -202,22 +188,7 @@ func SimulateMsgInstantiateContract(ak types.AccountKeeper, bk BankKeeper, wasmK Msg: []byte(`{}`), Funds: deposit, } - - txCtx := simulation.OperationInput{ - R: r, - App: app, - TxGen: simappparams.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: &msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - CoinsSpentInMsg: deposit, - } - + txCtx := BuildOperationInput(r, app, ctx, &msg, simAccount, ak, bk, deposit) return simulation.GenAndDeliverTxWithRandFees(txCtx) } } @@ -275,24 +246,41 @@ func SimulateMsgExecuteContract( return simtypes.NoOpMsg(types.ModuleName, types.MsgExecuteContract{}.Type(), "contract execute payload"), nil, err } - txCtx := simulation.OperationInput{ - R: r, - App: app, - TxGen: simappparams.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: &msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - CoinsSpentInMsg: deposit, - } + txCtx := BuildOperationInput(r, app, ctx, &msg, simAccount, ak, bk, deposit) return simulation.GenAndDeliverTxWithRandFees(txCtx) } } +// BuildOperationInput helper to build object +func BuildOperationInput( + r *rand.Rand, + app *baseapp.BaseApp, + ctx sdk.Context, + msg interface { + sdk.Msg + Type() string + }, + simAccount simtypes.Account, + ak types.AccountKeeper, + bk BankKeeper, + deposit sdk.Coins, +) simulation.OperationInput { + return simulation.OperationInput{ + R: r, + App: app, + TxGen: simappparams.MakeTestEncodingConfig().TxConfig, + Cdc: nil, + Msg: msg, + MsgType: msg.Type(), + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: deposit, + } +} + // DefaultSimulationExecuteContractSelector picks the first contract address func DefaultSimulationExecuteContractSelector(ctx sdk.Context, wasmKeeper WasmKeeper) sdk.AccAddress { var r sdk.AccAddress From 4d81fd44de0c992713762d6c062af2753ab279b0 Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Wed, 14 Sep 2022 15:56:12 +0200 Subject: [PATCH 099/120] Bump ibc proto to v3.2.0 --- .../ibc/applications/transfer/v1/query.proto | 21 ++++++++++++++++- .../proto/ibc/core/channel/v1/tx.proto | 11 +++++---- .../proto/ibc/core/client/v1/client.proto | 11 +++++---- .../proto/ibc/core/client/v1/query.proto | 23 +++++++++++++++++++ .../ibc/core/commitment/v1/commitment.proto | 2 +- .../tendermint/v1/tendermint.proto | 13 +++++------ 6 files changed, 64 insertions(+), 17 deletions(-) diff --git a/third_party/proto/ibc/applications/transfer/v1/query.proto b/third_party/proto/ibc/applications/transfer/v1/query.proto index 2ed28049fd..5298338c10 100644 --- a/third_party/proto/ibc/applications/transfer/v1/query.proto +++ b/third_party/proto/ibc/applications/transfer/v1/query.proto @@ -30,12 +30,17 @@ service Query { rpc DenomHash(QueryDenomHashRequest) returns (QueryDenomHashResponse) { option (google.api.http).get = "/ibc/apps/transfer/v1/denom_hashes/{trace}"; } + + // EscrowAddress returns the escrow address for a particular port and channel id. + rpc EscrowAddress(QueryEscrowAddressRequest) returns (QueryEscrowAddressResponse) { + option (google.api.http).get = "/ibc/apps/transfer/v1/channels/{channel_id}/ports/{port_id}/escrow_address"; + } } // QueryDenomTraceRequest is the request type for the Query/DenomTrace RPC // method message QueryDenomTraceRequest { - // hash (in hex format) of the denomination trace information. + // hash (in hex format) or denom (full denom with ibc prefix) of the denomination trace information. string hash = 1; } @@ -84,3 +89,17 @@ message QueryDenomHashResponse { // hash (in hex format) of the denomination trace information. string hash = 1; } + +// QueryEscrowAddressRequest is the request type for the EscrowAddress RPC method. +message QueryEscrowAddressRequest { + // unique port identifier + string port_id = 1; + // unique channel identifier + string channel_id = 2; +} + +// QueryEscrowAddressResponse is the response type of the EscrowAddress RPC method. +message QueryEscrowAddressResponse { + // the escrow account address + string escrow_address = 1; +} \ No newline at end of file diff --git a/third_party/proto/ibc/core/channel/v1/tx.proto b/third_party/proto/ibc/core/channel/v1/tx.proto index d4d6df1d5e..d34b00e912 100644 --- a/third_party/proto/ibc/core/channel/v1/tx.proto +++ b/third_party/proto/ibc/core/channel/v1/tx.proto @@ -47,11 +47,11 @@ enum ResponseResultType { option (gogoproto.goproto_enum_prefix) = false; // Default zero value enumeration - RESPONSE_RESULT_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "UNSPECIFIED"]; + RESPONSE_RESULT_TYPE_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "UNSPECIFIED"]; // The message did not call the IBC application callbacks (because, for example, the packet had already been relayed) - RESPONSE_RESULT_NOOP = 1 [(gogoproto.enumvalue_customname) = "NOOP"]; + RESPONSE_RESULT_TYPE_NOOP = 1 [(gogoproto.enumvalue_customname) = "NOOP"]; // The message was executed successfully - RESPONSE_RESULT_SUCCESS = 2 [(gogoproto.enumvalue_customname) = "SUCCESS"]; + RESPONSE_RESULT_TYPE_SUCCESS = 2 [(gogoproto.enumvalue_customname) = "SUCCESS"]; } // MsgChannelOpenInit defines an sdk.Msg to initialize a channel handshake. It @@ -68,6 +68,7 @@ message MsgChannelOpenInit { // MsgChannelOpenInitResponse defines the Msg/ChannelOpenInit response type. message MsgChannelOpenInitResponse { string channel_id = 1 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + string version = 2; } // MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel @@ -91,7 +92,9 @@ message MsgChannelOpenTry { } // MsgChannelOpenTryResponse defines the Msg/ChannelOpenTry response type. -message MsgChannelOpenTryResponse {} +message MsgChannelOpenTryResponse { + string version = 1; +} // MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge // the change of channel state to TRYOPEN on Chain B. diff --git a/third_party/proto/ibc/core/client/v1/client.proto b/third_party/proto/ibc/core/client/v1/client.proto index 657d99ed20..f97263c4fc 100644 --- a/third_party/proto/ibc/core/client/v1/client.proto +++ b/third_party/proto/ibc/core/client/v1/client.proto @@ -7,6 +7,7 @@ option go_package = "github.com/cosmos/ibc-go/v3/modules/core/02-client/types"; import "gogoproto/gogo.proto"; import "google/protobuf/any.proto"; import "cosmos/upgrade/v1beta1/upgrade.proto"; +import "cosmos_proto/cosmos.proto"; // IdentifiedClientState defines a client state with an additional client // identifier field. @@ -41,7 +42,8 @@ message ClientConsensusStates { // handler may fail if the subject and the substitute do not match in client and // chain parameters (with exception to latest height, frozen height, and chain-id). message ClientUpdateProposal { - option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_getters) = false; + option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; // the title of the update proposal string title = 1; // the description of the proposal @@ -56,9 +58,10 @@ message ClientUpdateProposal { // UpgradeProposal is a gov Content type for initiating an IBC breaking // upgrade. message UpgradeProposal { - option (gogoproto.goproto_getters) = false; - option (gogoproto.goproto_stringer) = false; - option (gogoproto.equal) = true; + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = false; + option (gogoproto.equal) = true; + option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; string title = 1; string description = 2; diff --git a/third_party/proto/ibc/core/client/v1/query.proto b/third_party/proto/ibc/core/client/v1/query.proto index 91a906fe54..33a4191cd0 100644 --- a/third_party/proto/ibc/core/client/v1/query.proto +++ b/third_party/proto/ibc/core/client/v1/query.proto @@ -36,6 +36,11 @@ service Query { option (google.api.http).get = "/ibc/core/client/v1/consensus_states/{client_id}"; } + // ConsensusStateHeights queries the height of every consensus states associated with a given client. + rpc ConsensusStateHeights(QueryConsensusStateHeightsRequest) returns (QueryConsensusStateHeightsResponse) { + option (google.api.http).get = "/ibc/core/client/v1/consensus_states/{client_id}/heights"; + } + // Status queries the status of an IBC client. rpc ClientStatus(QueryClientStatusRequest) returns (QueryClientStatusResponse) { option (google.api.http).get = "/ibc/core/client/v1/client_status/{client_id}"; @@ -137,6 +142,24 @@ message QueryConsensusStatesResponse { cosmos.base.query.v1beta1.PageResponse pagination = 2; } +// QueryConsensusStateHeightsRequest is the request type for Query/ConsensusStateHeights +// RPC method. +message QueryConsensusStateHeightsRequest { + // client identifier + string client_id = 1; + // pagination request + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryConsensusStateHeightsResponse is the response type for the +// Query/ConsensusStateHeights RPC method +message QueryConsensusStateHeightsResponse { + // consensus state heights + repeated Height consensus_state_heights = 1 [(gogoproto.nullable) = false]; + // pagination response + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + // QueryClientStatusRequest is the request type for the Query/ClientStatus RPC // method message QueryClientStatusRequest { diff --git a/third_party/proto/ibc/core/commitment/v1/commitment.proto b/third_party/proto/ibc/core/commitment/v1/commitment.proto index f0118b7165..b0afed2273 100644 --- a/third_party/proto/ibc/core/commitment/v1/commitment.proto +++ b/third_party/proto/ibc/core/commitment/v1/commitment.proto @@ -5,7 +5,7 @@ package ibc.core.commitment.v1; option go_package = "github.com/cosmos/ibc-go/v3/modules/core/23-commitment/types"; import "gogoproto/gogo.proto"; -import "confio/proofs.proto"; +import "proofs.proto"; // MerkleRoot defines a merkle root hash. // In the Cosmos SDK, the AppHash of a block header becomes the root. diff --git a/third_party/proto/ibc/lightclients/tendermint/v1/tendermint.proto b/third_party/proto/ibc/lightclients/tendermint/v1/tendermint.proto index ac39341dbf..2815fe6ad2 100644 --- a/third_party/proto/ibc/lightclients/tendermint/v1/tendermint.proto +++ b/third_party/proto/ibc/lightclients/tendermint/v1/tendermint.proto @@ -6,7 +6,7 @@ option go_package = "github.com/cosmos/ibc-go/v3/modules/light-clients/07-tender import "tendermint/types/validator.proto"; import "tendermint/types/types.proto"; -import "confio/proofs.proto"; +import "proofs.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; import "ibc/core/client/v1/client.proto"; @@ -52,12 +52,11 @@ message ClientState { // "upgradedIBCState"}` repeated string upgrade_path = 9 [(gogoproto.moretags) = "yaml:\"upgrade_path\""]; - // This flag, when set to true, will allow governance to recover a client - // which has expired - bool allow_update_after_expiry = 10 [(gogoproto.moretags) = "yaml:\"allow_update_after_expiry\""]; - // This flag, when set to true, will allow governance to unfreeze a client - // whose chain has experienced a misbehaviour event - bool allow_update_after_misbehaviour = 11 [(gogoproto.moretags) = "yaml:\"allow_update_after_misbehaviour\""]; + // allow_update_after_expiry is deprecated + bool allow_update_after_expiry = 10 [deprecated = true, (gogoproto.moretags) = "yaml:\"allow_update_after_expiry\""]; + // allow_update_after_misbehaviour is deprecated + bool allow_update_after_misbehaviour = 11 + [deprecated = true, (gogoproto.moretags) = "yaml:\"allow_update_after_misbehaviour\""]; } // ConsensusState defines the consensus state from Tendermint. From e3aad1b3df2d67a28dba9649b1f8bd3e0b554e58 Mon Sep 17 00:00:00 2001 From: faddat Date: Thu, 15 Sep 2022 14:05:08 +0000 Subject: [PATCH 100/120] bank keeper --- go.mod | 2 +- go.sum | 34 ++++++++++++++++++++-------------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index 93f60189d8..c1b7961cb9 100644 --- a/go.mod +++ b/go.mod @@ -156,7 +156,7 @@ require ( replace ( // Fix upstream GHSA-h395-qcrw-5vmq vulnerability. // TODO Remove it: https://github.com/cosmos/cosmos-sdk/issues/10409 - github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.7.0 + github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.8.1 // latest grpc doesn't work with with our modified proto compiler, so we need to enforce // the following version across all dependencies. github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 diff --git a/go.sum b/go.sum index 6ef9be73f6..2a18b59172 100644 --- a/go.sum +++ b/go.sum @@ -334,8 +334,8 @@ github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW 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.7.0 h1:jGB9xAJQ12AIGNB4HguylppmDK1Am9ppF7XnGXXJuoU= -github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= +github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= +github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= @@ -360,12 +360,12 @@ github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dT github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= 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.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= -github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= +github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= +github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= +github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= +github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= +github.com/go-playground/validator/v10 v10.10.0 h1:I7mrTYv78z8k8VXa/qJlOlEXn/nBh+BF8dHX5nt/dr0= +github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= @@ -376,6 +376,8 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/goccy/go-json v0.9.7 h1:IcB+Aqpx/iMHu5Yooh7jEzJk1JZ7Pjtmys2ukPr7EeM= +github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -639,6 +641,7 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -647,8 +650,8 @@ github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+ github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= -github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs= github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= @@ -773,6 +776,7 @@ github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtP 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.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg= github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= @@ -849,6 +853,8 @@ github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRr github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= @@ -951,11 +957,11 @@ github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+l github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/tyler-smith/go-bip39 v1.0.2/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= -github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo= +github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= 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/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= +github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/ulikunitz/xz v0.5.8 h1:ERv8V6GKqVi23rgu5cj9pVfVzJbOqAY2Ntl88O6c2nQ= github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= From f6e02fd5283b3f46a5f5064d465fd9c2ca998b5a Mon Sep 17 00:00:00 2001 From: vuong Date: Thu, 15 Sep 2022 22:07:12 +0700 Subject: [PATCH 101/120] fix test genesis with valset --- x/wasm/keeper/genesis_test.go | 3 ++- x/wasm/keeper/msg_server_integration_test.go | 25 +++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/x/wasm/keeper/genesis_test.go b/x/wasm/keeper/genesis_test.go index 43f9be32b2..4027639ee2 100644 --- a/x/wasm/keeper/genesis_test.go +++ b/x/wasm/keeper/genesis_test.go @@ -18,6 +18,7 @@ import ( storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" + bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" distributionkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper" govtypesv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper" @@ -659,7 +660,7 @@ func setupKeeper(t *testing.T) (*Keeper, sdk.Context, []storetypes.StoreKey) { wasmConfig := wasmTypes.DefaultWasmConfig() pk := paramskeeper.NewKeeper(encodingConfig.Marshaler, encodingConfig.Amino, keyParams, tkeyParams) - srcKeeper := NewKeeper(encodingConfig.Marshaler, keyWasm, pk.Subspace(wasmTypes.ModuleName), authkeeper.AccountKeeper{}, nil, stakingkeeper.Keeper{}, distributionkeeper.Keeper{}, nil, nil, nil, nil, nil, nil, tempDir, wasmConfig, AvailableCapabilities) + srcKeeper := NewKeeper(encodingConfig.Marshaler, keyWasm, pk.Subspace(wasmTypes.ModuleName), authkeeper.AccountKeeper{}, bankkeeper.BaseKeeper{}, stakingkeeper.Keeper{}, distributionkeeper.Keeper{}, nil, nil, nil, nil, nil, nil, tempDir, wasmConfig, AvailableCapabilities) return &srcKeeper, ctx, []storetypes.StoreKey{keyWasm, keyParams} } diff --git a/x/wasm/keeper/msg_server_integration_test.go b/x/wasm/keeper/msg_server_integration_test.go index dde8ae7744..c4a75dcf9f 100644 --- a/x/wasm/keeper/msg_server_integration_test.go +++ b/x/wasm/keeper/msg_server_integration_test.go @@ -5,11 +5,17 @@ import ( _ "embed" "testing" + cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" + "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" "github.com/cosmos/cosmos-sdk/testutil/testdata" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + tmtypes "github.com/tendermint/tendermint/types" "github.com/CosmWasm/wasmd/app" "github.com/CosmWasm/wasmd/x/wasm/types" @@ -19,7 +25,24 @@ import ( var wasmContract []byte func TestStoreCode(t *testing.T) { - wasmApp := app.Setup(false) + senderPrivKey := ed25519.GenPrivKey() + pubKey, err := cryptocodec.ToTmPubKeyInterface(senderPrivKey.PubKey()) + require.NoError(t, err) + + senderAddr := senderPrivKey.PubKey().Address().Bytes() + acc := authtypes.NewBaseAccount(senderAddr, senderPrivKey.PubKey(), 0, 0) + amount, ok := sdk.NewIntFromString("10000000000000000000") + require.True(t, ok) + + balance := banktypes.Balance{ + Address: acc.GetAddress().String(), + Coins: sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, amount)), + } + validator := tmtypes.NewValidator(pubKey, 1) + valSet := tmtypes.NewValidatorSet([]*tmtypes.Validator{validator}) + + wasmApp := app.SetupWithGenesisValSet(t, valSet, []authtypes.GenesisAccount{acc}, nil, balance) + ctx := wasmApp.BaseApp.NewContext(false, tmproto.Header{}) _, _, sender := testdata.KeyTestPubAddr() msg := types.MsgStoreCodeFixture(func(m *types.MsgStoreCode) { From 427e367c31597232f03b5da6196c8356d676ced6 Mon Sep 17 00:00:00 2001 From: vuong Date: Fri, 16 Sep 2022 13:01:41 +0700 Subject: [PATCH 102/120] gov address --- x/wasm/keeper/keeper_test.go | 2 +- x/wasm/keeper/proposal_integration_test.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index f881a3e256..d2317e04f4 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -399,7 +399,7 @@ func TestInstantiate(t *testing.T) { gasAfter := ctx.GasMeter().GasConsumed() if types.EnableGasVerification { - require.Equal(t, uint64(0x187b8), gasAfter-gasBefore) + require.Equal(t, uint64(0x1a258), gasAfter-gasBefore) } // ensure it is stored properly diff --git a/x/wasm/keeper/proposal_integration_test.go b/x/wasm/keeper/proposal_integration_test.go index cf5c88d28c..6fd2c2e3f5 100644 --- a/x/wasm/keeper/proposal_integration_test.go +++ b/x/wasm/keeper/proposal_integration_test.go @@ -51,14 +51,14 @@ func TestStoreCodeProposal(t *testing.T) { t.Run(msg, func(t *testing.T) { ctx, _ := parentCtx.CacheContext() myActorAddress := RandomBech32AccountAddress(t) - + govAddress := govKeeper.GetGovernanceAccount(ctx).GetAddress().String() src := types.StoreCodeProposalFixture(func(p *types.StoreCodeProposal) { p.RunAs = myActorAddress p.WASMByteCode = wasmCode p.UnpinCode = spec.unpinCode }) - msgContent, err := govv1.NewLegacyContent(src, myActorAddress) + msgContent, err := govv1.NewLegacyContent(src, govAddress) require.NoError(t, err) em := sdk.NewEventManager() From 459cefae5a9adc9912e48db74afc2638956c686d Mon Sep 17 00:00:00 2001 From: vuong Date: Sun, 18 Sep 2022 13:42:24 +0700 Subject: [PATCH 103/120] gas in test --- x/wasm/keeper/keeper_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index d2317e04f4..13fa2e7a40 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -399,7 +399,7 @@ func TestInstantiate(t *testing.T) { gasAfter := ctx.GasMeter().GasConsumed() if types.EnableGasVerification { - require.Equal(t, uint64(0x1a258), gasAfter-gasBefore) + require.Equal(t, uint64(0x195be), gasAfter-gasBefore) } // ensure it is stored properly @@ -818,7 +818,7 @@ func TestExecute(t *testing.T) { // make sure gas is properly deducted from ctx gasAfter := ctx.GasMeter().GasConsumed() if types.EnableGasVerification { - require.Equal(t, uint64(0x17d87), gasAfter-gasBefore) + require.Equal(t, uint64(0x1a258), gasAfter-gasBefore) } // ensure bob now exists and got both payments released bobAcct = accKeeper.GetAccount(ctx, bob) From a9d2918000067e957964685761f8620d4e955e2e Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Tue, 20 Sep 2022 08:52:12 +0200 Subject: [PATCH 104/120] Update changelog --- CHANGELOG.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4811418454..47818a853a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,23 @@ # Changelog ## [Unreleased](https://github.com/CosmWasm/wasmd/tree/HEAD) + +- Allow AccessConfig to use a list of addresses instead of just a single address [\#945](https://github.com/CosmWasm/wasmd/issues/945) +- Make contract addresses predictable \("deterministic"\) [\#942](https://github.com/CosmWasm/wasmd/issues/942) +- Add query for the total supply of a coin [\#903](https://github.com/CosmWasm/wasmd/pull/903) ([larry0x](https://github.com/larry0x)) - Upgrade go to v1.18 [\#866]https://github.com/CosmWasm/wasmd/pull/866/) ([faddat](https://github.com/faddat)) - Upgrade to ibc-go v3.2.0 [\#937](https://github.com/CosmWasm/wasmd/pull/937) ([faddat](https://github.com/faddat)) - Upgrade to cosmos-sdk v0.45.8 [\#964](https://github.com/CosmWasm/wasmd/pull/964/) ([faddat](https://github.com/faddat)) - Upgrade wasmvm to v1.1.0 [\#984](https://github.com/CosmWasm/wasmd/pull/984), see [wasmvm v1.1.0](https://github.com/CosmWasm/wasmvm/releases/tag/v1.1.0) - +- Add documentation how to add x/wasm to a new Cosmos SDK chain [\#876](https://github.com/CosmWasm/wasmd/issues/876) +- Upgrade keyring / go-keychain dependencies (removes deprecate warning) [\#957](https://github.com/CosmWasm/wasmd/issues/957) +- Make contract pinning an optional field in StoreCode proposals [\#972](https://github.com/CosmWasm/wasmd/issues/972) +- Add gRPC query for WASM params [\#889](https://github.com/CosmWasm/wasmd/issues/889) +- Expose Keepers in app.go? [\#881](https://github.com/CosmWasm/wasmd/issues/881) +- Remove unused `flagProposalType` flag in gov proposals [\#849](https://github.com/CosmWasm/wasmd/issues/849) +- Restrict code access config modifications [\#901](https://github.com/CosmWasm/wasmd/pull/901) ([alpe](https://github.com/alpe)) +- Prevent migration to a restricted code [\#900](https://github.com/CosmWasm/wasmd/pull/900) ([alpe](https://github.com/alpe)) +- Charge gas to unzip wasm code [\#898](https://github.com/CosmWasm/wasmd/pull/898) ([alpe](https://github.com/alpe)) [Full Changelog](https://github.com/CosmWasm/wasmd/compare/v0.28.0...HEAD) From bad814e19b0f258c76179343c6c9c7f51bc943fc Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Tue, 20 Sep 2022 09:02:31 +0200 Subject: [PATCH 105/120] Add migration note --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 47818a853a..52676a23a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ - Make contract addresses predictable \("deterministic"\) [\#942](https://github.com/CosmWasm/wasmd/issues/942) - Add query for the total supply of a coin [\#903](https://github.com/CosmWasm/wasmd/pull/903) ([larry0x](https://github.com/larry0x)) - Upgrade go to v1.18 [\#866]https://github.com/CosmWasm/wasmd/pull/866/) ([faddat](https://github.com/faddat)) -- Upgrade to ibc-go v3.2.0 [\#937](https://github.com/CosmWasm/wasmd/pull/937) ([faddat](https://github.com/faddat)) +- Upgrade to ibc-go v3.2.0 REQUIRES [MIGRATION](https://github.com/cosmos/ibc-go/blob/v3.2.0/docs/migrations/support-denoms-with-slashes.md) [\#937](https://github.com/CosmWasm/wasmd/pull/937) ([faddat](https://github.com/faddat)) - Upgrade to cosmos-sdk v0.45.8 [\#964](https://github.com/CosmWasm/wasmd/pull/964/) ([faddat](https://github.com/faddat)) - Upgrade wasmvm to v1.1.0 [\#984](https://github.com/CosmWasm/wasmd/pull/984), see [wasmvm v1.1.0](https://github.com/CosmWasm/wasmvm/releases/tag/v1.1.0) - Add documentation how to add x/wasm to a new Cosmos SDK chain [\#876](https://github.com/CosmWasm/wasmd/issues/876) @@ -19,6 +19,9 @@ - Prevent migration to a restricted code [\#900](https://github.com/CosmWasm/wasmd/pull/900) ([alpe](https://github.com/alpe)) - Charge gas to unzip wasm code [\#898](https://github.com/CosmWasm/wasmd/pull/898) ([alpe](https://github.com/alpe)) +Migration notes: +- See ibc-go [migration notes](https://github.com/cosmos/ibc-go/blob/v3.2.0/docs/migrations/support-denoms-with-slashes.md) [\#937](https://github.com/CosmWasm/wasmd/pull/937) + [Full Changelog](https://github.com/CosmWasm/wasmd/compare/v0.28.0...HEAD) ## [v0.28.0](https://github.com/CosmWasm/wasmd/tree/v0.28.0) (2022-07-29) From d40888ac8b5c7b1d2e3459aee26946cef5d16eca Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Tue, 20 Sep 2022 10:07:09 +0200 Subject: [PATCH 106/120] Fix master -> main in CI config --- .circleci/config.yml | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f0767528e5..a94d0cb0b4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -161,15 +161,17 @@ jobs: - run: name: Build Docker artifact command: docker build --pull -t "cosmwasm/wasmd:${CIRCLE_SHA1}" . - - run: - name: Push application Docker image to docker hub - command: | - if [ "${CIRCLE_BRANCH}" = "master" ]; then - docker tag "cosmwasm/wasmd:${CIRCLE_SHA1}" cosmwasm/wasmd:latest - docker login --password-stdin -u "$DOCKER_USER" \<<<"$DOCKER_PASS" - docker push cosmwasm/wasmd:latest - docker logout - fi + - when: + condition: + equal: [ main, << pipeline.git.branch >> ] + steps: + - run: + name: Push application Docker image to docker hub + command: | + docker tag "cosmwasm/wasmd:${CIRCLE_SHA1}" cosmwasm/wasmd:latest + docker login --password-stdin -u "$DOCKER_USER" \<<<"$DOCKER_PASS" + docker push cosmwasm/wasmd:latest + docker logout docker-tagged: executor: golang @@ -194,14 +196,14 @@ workflows: version: 2 test-suite: jobs: - # this is now a slow process... let's only run on master + # this is now a slow process... let's only run on main and PR branches we care about - docker-image: requires: - setup-dependencies filters: branches: only: - - master + - main - docker-tagged: filters: tags: From f0072e6ff9662905332ccc9cc30533cd614a4e09 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Tue, 20 Sep 2022 13:05:09 +0200 Subject: [PATCH 107/120] Always run docker-image --- .circleci/config.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a94d0cb0b4..40c9c28344 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -196,14 +196,9 @@ workflows: version: 2 test-suite: jobs: - # this is now a slow process... let's only run on main and PR branches we care about - docker-image: requires: - setup-dependencies - filters: - branches: - only: - - main - docker-tagged: filters: tags: From a8842ef774d147aa1b23991f98680d6e3e96086e Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Tue, 20 Sep 2022 12:56:37 +0200 Subject: [PATCH 108/120] Add libwasmvm version check --- .circleci/config.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 40c9c28344..9b226efb97 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -161,6 +161,17 @@ jobs: - run: name: Build Docker artifact command: docker build --pull -t "cosmwasm/wasmd:${CIRCLE_SHA1}" . + - run: + name: Ensure libwasmvm version is correct + command: | + IN_DOCKER=$(docker run --rm "cosmwasm/wasmd:${CIRCLE_SHA1}" /usr/bin/wasmd query wasm libwasmvm-version) + echo "Runtime libwasmvm-version in docker: $IN_DOCKER" + IN_GOMOD=$(go list -m github.com/CosmWasm/wasmvm | cut -d" " -f2 | cut -d"v" -f2) + echo "wasmvm version in go.mod: $IN_GOMOD" + if [[ "$IN_DOCKER" != "$IN_GOMOD" ]]; then + echo "Mismatch of wasmvm versions detected" + exit 1 + fi - when: condition: equal: [ main, << pipeline.git.branch >> ] From 76df37d5fd1d12877b7dd3e987f799109d52fa5e Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Tue, 20 Sep 2022 13:00:33 +0200 Subject: [PATCH 109/120] Bump wasmvm to 1.1.1 --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 6699cd8286..4fb3cf9892 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/CosmWasm/wasmd go 1.18 require ( - github.com/CosmWasm/wasmvm v1.1.0 + github.com/CosmWasm/wasmvm v1.1.1 github.com/cosmos/cosmos-sdk v0.45.8 github.com/cosmos/iavl v0.19.1 github.com/cosmos/ibc-go/v3 v3.2.0 diff --git a/go.sum b/go.sum index fe9da2d4b6..d242411a15 100644 --- a/go.sum +++ b/go.sum @@ -59,8 +59,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/CosmWasm/wasmvm v1.1.0 h1:FLd2njaJcZPgq/yLrXtQdndg0oG/QySKpWyVP2tBCnQ= -github.com/CosmWasm/wasmvm v1.1.0/go.mod h1:ei0xpvomwSdONsxDuONzV7bL1jSET1M8brEx0FCXc+A= +github.com/CosmWasm/wasmvm v1.1.1 h1:0xtdrmmsP9fibe+x42WcMkp5aQ738BICgcH3FNVLzm4= +github.com/CosmWasm/wasmvm v1.1.1/go.mod h1:ei0xpvomwSdONsxDuONzV7bL1jSET1M8brEx0FCXc+A= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= From 0ec5b77480cb6ec56a3d2c1f5b78f9d9e59a83cf Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Tue, 20 Sep 2022 13:36:33 +0200 Subject: [PATCH 110/120] Upgrade .a files to 1.1.1 --- Dockerfile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0fac41b100..42494493c7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,10 +16,10 @@ WORKDIR /code COPY . /code/ # See https://github.com/CosmWasm/wasmvm/releases -ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.1.0/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a -ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.1.0/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a -RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep 728993b91b35037ae8d9933c3a9ee018e49a7926571ce4109f55d9954efcbe9a -RUN sha256sum /lib/libwasmvm_muslc.x86_64.a | grep d06607db7bda6d3981f0717133584dd5480a6bca7b1e208b4526e68f3ccf3b31 +ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.1.1/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a +ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.1.1/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a +RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep 9ecb037336bd56076573dc18c26631a9d2099a7f2b40dc04b6cae31ffb4c8f9a +RUN sha256sum /lib/libwasmvm_muslc.x86_64.a | grep 6e4de7ba9bad4ae9679c7f9ecf7e283dd0160e71567c6a7be6ae47c81ebe7f32 # Copy the library you want to the final location that will be found by the linker flag `-lwasmvm_muslc` RUN cp /lib/libwasmvm_muslc.${arch}.a /lib/libwasmvm_muslc.a From 8ee2c9330ca1fa4d31b8c0113c56b77655134f8a Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Tue, 20 Sep 2022 15:54:26 +0200 Subject: [PATCH 111/120] Fix path to proofs in protos --- third_party/proto/confio/README.md | 1 + third_party/proto/confio/proofs.proto | 2 +- third_party/proto/ibc/core/commitment/v1/commitment.proto | 2 +- .../proto/ibc/lightclients/tendermint/v1/tendermint.proto | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 third_party/proto/confio/README.md diff --git a/third_party/proto/confio/README.md b/third_party/proto/confio/README.md new file mode 100644 index 0000000000..c57da2e224 --- /dev/null +++ b/third_party/proto/confio/README.md @@ -0,0 +1 @@ +This project can be found at: https://github.com/confio/ics23 diff --git a/third_party/proto/confio/proofs.proto b/third_party/proto/confio/proofs.proto index da43503ecb..12d9e2da69 100644 --- a/third_party/proto/confio/proofs.proto +++ b/third_party/proto/confio/proofs.proto @@ -1,7 +1,6 @@ syntax = "proto3"; package ics23; -option go_package = "github.com/confio/ics23/go"; enum HashOp { // NO_HASH is the default if no data passed. Note this is an illegal argument some places. @@ -11,6 +10,7 @@ enum HashOp { KECCAK = 3; RIPEMD160 = 4; BITCOIN = 5; // ripemd160(sha256(x)) + SHA512_256 = 6; } /** diff --git a/third_party/proto/ibc/core/commitment/v1/commitment.proto b/third_party/proto/ibc/core/commitment/v1/commitment.proto index b0afed2273..f0118b7165 100644 --- a/third_party/proto/ibc/core/commitment/v1/commitment.proto +++ b/third_party/proto/ibc/core/commitment/v1/commitment.proto @@ -5,7 +5,7 @@ package ibc.core.commitment.v1; option go_package = "github.com/cosmos/ibc-go/v3/modules/core/23-commitment/types"; import "gogoproto/gogo.proto"; -import "proofs.proto"; +import "confio/proofs.proto"; // MerkleRoot defines a merkle root hash. // In the Cosmos SDK, the AppHash of a block header becomes the root. diff --git a/third_party/proto/ibc/lightclients/tendermint/v1/tendermint.proto b/third_party/proto/ibc/lightclients/tendermint/v1/tendermint.proto index 2815fe6ad2..f04dc17565 100644 --- a/third_party/proto/ibc/lightclients/tendermint/v1/tendermint.proto +++ b/third_party/proto/ibc/lightclients/tendermint/v1/tendermint.proto @@ -6,7 +6,7 @@ option go_package = "github.com/cosmos/ibc-go/v3/modules/light-clients/07-tender import "tendermint/types/validator.proto"; import "tendermint/types/types.proto"; -import "proofs.proto"; +import "confio/proofs.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; import "ibc/core/client/v1/client.proto"; From 7fb0a3acdb772be9ab044bde2d2be313f3fb80fe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Sep 2022 08:20:56 +0000 Subject: [PATCH 112/120] Bump github.com/cosmos/ibc-go/v3 from 3.2.0 to 3.3.0 Bumps [github.com/cosmos/ibc-go/v3](https://github.com/cosmos/ibc-go) from 3.2.0 to 3.3.0. - [Release notes](https://github.com/cosmos/ibc-go/releases) - [Changelog](https://github.com/cosmos/ibc-go/blob/v3.3.0/CHANGELOG.md) - [Commits](https://github.com/cosmos/ibc-go/compare/v3.2.0...v3.3.0) --- updated-dependencies: - dependency-name: github.com/cosmos/ibc-go/v3 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 4fb3cf9892..aed1e1aede 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/CosmWasm/wasmvm v1.1.1 github.com/cosmos/cosmos-sdk v0.45.8 github.com/cosmos/iavl v0.19.1 - github.com/cosmos/ibc-go/v3 v3.2.0 + github.com/cosmos/ibc-go/v3 v3.3.0 github.com/cosmos/interchain-accounts v0.1.0 github.com/dvsekhvalnov/jose2go v1.5.0 github.com/gogo/protobuf v1.3.3 diff --git a/go.sum b/go.sum index d242411a15..b9ed8af879 100644 --- a/go.sum +++ b/go.sum @@ -171,8 +171,8 @@ github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4 github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= github.com/cosmos/iavl v0.19.1 h1:3gaq9b6SjiB0KBTygRnAvEGml2pQlu1TH8uma5g63Ys= github.com/cosmos/iavl v0.19.1/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= -github.com/cosmos/ibc-go/v3 v3.2.0 h1:Mh+RWo5FHPMM1Xsrar3uwKufdEGdIp5LDkVk9cYKYYA= -github.com/cosmos/ibc-go/v3 v3.2.0/go.mod h1:DrDYXJjWNwgv72cK1Il+BegtyGIDXcx+cnJwWGzve6o= +github.com/cosmos/ibc-go/v3 v3.3.0 h1:r8gYUvQreMQrf4R5RgedK9gcbjLk4uE2q6fuZGjf4n0= +github.com/cosmos/ibc-go/v3 v3.3.0/go.mod h1:VUWLHw0C3USmTQZnTdkuXXdUdLbW8zsK3lV1Ieposog= github.com/cosmos/interchain-accounts v0.1.0 h1:QmuwNsf1Hxl3P5GSGt7Z+JeuHPiZw4Z34R/038P5T6s= github.com/cosmos/interchain-accounts v0.1.0/go.mod h1:Fv6LXDs+0ng4mIDVWwEJMXbAIMxY4kiq+A7Bw1Fb9AY= github.com/cosmos/ledger-cosmos-go v0.11.1 h1:9JIYsGnXP613pb2vPjFeMMjBI5lEDsEaF6oYorTy6J4= From 54fec05c1198fbbf58d123ae30a2e622d3997b1c Mon Sep 17 00:00:00 2001 From: Alexander Peters Date: Wed, 21 Sep 2022 15:13:58 +0200 Subject: [PATCH 113/120] Prune vesting accounts balances (#1003) * Prevent out of gas * Prune vesting account denoms only * Fix test state * Move account exists error up again * Review feedback: better naming --- x/wasm/keeper/keeper.go | 85 +++++++++++++++++------------------ x/wasm/keeper/keeper_test.go | 75 ++++++++++++++++++++++++++++--- x/wasm/keeper/options.go | 19 ++------ x/wasm/keeper/options_test.go | 16 ++----- 4 files changed, 116 insertions(+), 79 deletions(-) diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index 7426ade1ad..c349603613 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -22,7 +22,7 @@ import ( "github.com/cosmos/cosmos-sdk/types/address" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" + vestingexported "github.com/cosmos/cosmos-sdk/x/auth/vesting/exported" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" "github.com/tendermint/tendermint/libs/log" @@ -57,11 +57,13 @@ type CoinTransferrer interface { TransferCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error } -// CoinPruner handles the balances for accounts that are pruned on contract instantiate. +// AccountPruner handles the balances and data cleanup for accounts that are pruned on contract instantiate. // This is an extension point to attach custom logic -type CoinPruner interface { - // PruneBalances handle balances for given address - PruneBalances(ctx sdk.Context, contractAddress sdk.AccAddress) error +type AccountPruner interface { + // CleanupExistingAccount handles the cleanup process for balances and data of the given account. The persisted account + // type is already reset to base account at this stage. + // The method returns true when the account address can be reused. Unsupported account types are rejected by returning false + CleanupExistingAccount(ctx sdk.Context, existingAccount authtypes.AccountI) (handled bool, err error) } // WasmVMResponseHandler is an extension point to handles the response data returned by a contract call. @@ -82,19 +84,6 @@ var defaultAcceptedAccountTypes = map[reflect.Type]struct{}{ reflect.TypeOf(&authtypes.BaseAccount{}): {}, } -// list of account types that are replaced with base accounts. Chains importing wasmd -// can overwrite this list with the WithPruneAccountTypesOnContractInstantiation option. -// -// contains vesting account types that can be created post genesis -var defaultPruneAccountTypes = map[reflect.Type]struct{}{ - reflect.TypeOf(&vestingtypes.DelayedVestingAccount{}): {}, - reflect.TypeOf(&vestingtypes.ContinuousVestingAccount{}): {}, - // intentionally not added: genesis account types - // reflect.TypeOf(&vestingtypes.BaseVestingAccount{}): {}, - // reflect.TypeOf(&vestingtypes.PeriodicVestingAccount{}): {}, - // reflect.TypeOf(&vestingtypes.PermanentLockedAccount{}): {}, -} - // Keeper will have a reference to Wasmer with it's own data directory. type Keeper struct { storeKey sdk.StoreKey @@ -113,8 +102,7 @@ type Keeper struct { gasRegister GasRegister maxQueryStackSize uint32 acceptedAccountTypes map[reflect.Type]struct{} - pruneAccountTypes map[reflect.Type]struct{} - coinPruner CoinPruner + accountPruner AccountPruner } // NewKeeper creates a new contract Keeper instance @@ -153,7 +141,7 @@ func NewKeeper( wasmVM: wasmer, accountKeeper: accountKeeper, bank: NewBankCoinTransferrer(bankKeeper), - coinPruner: NewCoinBurner(bankKeeper), + accountPruner: NewVestingCoinBurner(bankKeeper), portKeeper: portKeeper, capabilityKeeper: capabilityKeeper, messenger: NewDefaultMessageHandler(router, channelKeeper, capabilityKeeper, bankKeeper, cdc, portSource), @@ -162,7 +150,6 @@ func NewKeeper( gasRegister: NewDefaultWasmGasRegister(), maxQueryStackSize: types.DefaultMaxQueryStackSize, acceptedAccountTypes: defaultAcceptedAccountTypes, - pruneAccountTypes: defaultPruneAccountTypes, } keeper.wasmVMQueryHandler = DefaultQueryPlugins(bankKeeper, stakingKeeper, distKeeper, channelKeeper, queryRouter, keeper) for _, o := range opts { @@ -321,17 +308,18 @@ func (k Keeper) instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.A if _, accept := k.acceptedAccountTypes[reflect.TypeOf(existingAcct)]; accept { // keep account and balance as it is k.Logger(ctx).Info("instantiate contract with existing account", "address", contractAddress.String()) - } else if _, clear := k.pruneAccountTypes[reflect.TypeOf(existingAcct)]; clear { - k.Logger(ctx).Info("pruning existing account for contract instantiation", "address", contractAddress.String()) + } else { // consider an account in the wasmd namespace spam and overwrite it. + k.Logger(ctx).Info("pruning existing account for contract instantiation", "address", contractAddress.String()) contractAccount := k.accountKeeper.NewAccountWithAddress(ctx, contractAddress) k.accountKeeper.SetAccount(ctx, contractAccount) // also handle balance to not open cases where these accounts are abused and become liquid - if err := k.coinPruner.PruneBalances(ctx, contractAddress); err != nil { - return nil, nil, err + switch handled, err := k.accountPruner.CleanupExistingAccount(ctx, existingAcct); { + case err != nil: + return nil, nil, sdkerrors.Wrap(err, "prune balance") + case !handled: + return nil, nil, types.ErrAccountExists.Wrap("address is claimed by external account") } - } else { // unknown account type - return nil, nil, types.ErrAccountExists.Wrapf("refusing to overwrite special account type:: %T", existingAcct) } } else { // create an empty account (so we don't have issues later) @@ -1161,32 +1149,41 @@ func (c BankCoinTransferrer) TransferCoins(parentCtx sdk.Context, fromAddr sdk.A return nil } -var _ CoinPruner = CoinBurner{} +var _ AccountPruner = VestingCoinBurner{} -// CoinBurner default implementation for CoinPruner to burn the coins -type CoinBurner struct { +// VestingCoinBurner default implementation for AccountPruner to burn the coins +type VestingCoinBurner struct { bank types.BankKeeper } -// NewCoinBurner constructor -func NewCoinBurner(bank types.BankKeeper) CoinBurner { +// NewVestingCoinBurner constructor +func NewVestingCoinBurner(bank types.BankKeeper) VestingCoinBurner { if bank == nil { panic("bank keeper must not be nil") } - return CoinBurner{bank: bank} + return VestingCoinBurner{bank: bank} } -// PruneBalances burns all coins owned by the account. -func (b CoinBurner) PruneBalances(ctx sdk.Context, address sdk.AccAddress) error { - if amt := b.bank.GetAllBalances(ctx, address); !amt.IsZero() { - if err := b.bank.SendCoinsFromAccountToModule(ctx, address, types.ModuleName, amt); err != nil { - return sdkerrors.Wrap(err, "prune account balance") - } - if err := b.bank.BurnCoins(ctx, types.ModuleName, amt); err != nil { - return sdkerrors.Wrap(err, "burn account balance") - } +// CleanupExistingAccount accepts only vesting account types to burns all their original vesting coin balances. +// Other account types will be rejected and returned as unhandled. +func (b VestingCoinBurner) CleanupExistingAccount(ctx sdk.Context, existingAcc authtypes.AccountI) (handled bool, err error) { + v, ok := existingAcc.(vestingexported.VestingAccount) + if !ok { + return false, nil } - return nil + + ctx = ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) + coinsToBurn := sdk.NewCoins() + for _, orig := range v.GetOriginalVesting() { // focus on the coin denoms that were setup originally; getAllBalances has some issues + coinsToBurn = append(coinsToBurn, b.bank.GetBalance(ctx, existingAcc.GetAddress(), orig.Denom)) + } + if err := b.bank.SendCoinsFromAccountToModule(ctx, existingAcc.GetAddress(), types.ModuleName, coinsToBurn); err != nil { + return false, sdkerrors.Wrap(err, "prune account balance") + } + if err := b.bank.BurnCoins(ctx, types.ModuleName, coinsToBurn); err != nil { + return false, sdkerrors.Wrap(err, "burn account balance") + } + return true, nil } type msgDispatcher interface { diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index b8c6f5a114..5235141f36 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -12,16 +12,16 @@ import ( "testing" "time" - "github.com/cosmos/cosmos-sdk/baseapp" - wasmvm "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" + "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" stypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/address" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + "github.com/cosmos/cosmos-sdk/x/auth/vesting" vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" distributiontypes "github.com/cosmos/cosmos-sdk/x/distribution/types" @@ -645,7 +645,7 @@ func TestInstantiateWithAccounts(t *testing.T) { deposit: sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(1_000))), expBalance: sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(1_000))), }, - "prune listed DelayedVestingAccount gets overwritten": { + "prunable DelayedVestingAccount gets overwritten": { account: vestingtypes.NewDelayedVestingAccount( authtypes.NewBaseAccount(contractAddr, nil, 0, 0), sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(1_000))), time.Now().Add(30*time.Hour).Unix()), @@ -654,7 +654,7 @@ func TestInstantiateWithAccounts(t *testing.T) { expAccount: authtypes.NewBaseAccount(contractAddr, nil, lastAccountNumber+2, 0), // +1 for next seq, +1 for spec.account created expBalance: sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(1))), }, - "prune listed ContinuousVestingAccount gets overwritten": { + "prunable ContinuousVestingAccount gets overwritten": { account: vestingtypes.NewContinuousVestingAccount( authtypes.NewBaseAccount(contractAddr, nil, 0, 0), sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(1_000))), time.Now().Add(time.Hour).Unix(), time.Now().Add(2*time.Hour).Unix()), @@ -663,14 +663,14 @@ func TestInstantiateWithAccounts(t *testing.T) { expAccount: authtypes.NewBaseAccount(contractAddr, nil, lastAccountNumber+2, 0), // +1 for next seq, +1 for spec.account created expBalance: sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(1))), }, - "prune listed account without balance gets overwritten": { + "prunable account without balance gets overwritten": { account: vestingtypes.NewContinuousVestingAccount( authtypes.NewBaseAccount(contractAddr, nil, 0, 0), sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(0))), time.Now().Add(time.Hour).Unix(), time.Now().Add(2*time.Hour).Unix()), expAccount: authtypes.NewBaseAccount(contractAddr, nil, lastAccountNumber+2, 0), // +1 for next seq, +1 for spec.account created expBalance: sdk.NewCoins(), }, - "unknown account type creates error": { + "unknown account type is rejected with error": { account: authtypes.NewModuleAccount( authtypes.NewBaseAccount(contractAddr, nil, 0, 0), "testing", @@ -2274,3 +2274,66 @@ func TestAppendToContractHistory(t *testing.T) { gotHistory := keepers.WasmKeeper.GetContractHistory(ctx, contractAddr) assert.Equal(t, orderedEntries, gotHistory) } + +func TestCoinBurnerPruneBalances(t *testing.T) { + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities) + amts := sdk.NewCoins(sdk.NewInt64Coin("denom", 100)) + senderAddr := keepers.Faucet.NewFundedRandomAccount(parentCtx, amts...) + + // create vesting account + var vestingAddr sdk.AccAddress = rand.Bytes(types.ContractAddrLen) + msgCreateVestingAccount := vestingtypes.NewMsgCreateVestingAccount(senderAddr, vestingAddr, amts, time.Now().Add(time.Minute).Unix(), false) + _, err := vesting.NewMsgServerImpl(keepers.AccountKeeper, keepers.BankKeeper).CreateVestingAccount(sdk.WrapSDKContext(parentCtx), msgCreateVestingAccount) + require.NoError(t, err) + myVestingAccount := keepers.AccountKeeper.GetAccount(parentCtx, vestingAddr) + require.NotNil(t, myVestingAccount) + + specs := map[string]struct { + setupAcc func(t *testing.T, ctx sdk.Context) authtypes.AccountI + expBalances sdk.Coins + expHandled bool + expErr *sdkerrors.Error + }{ + "vesting account - all removed": { + setupAcc: func(t *testing.T, ctx sdk.Context) authtypes.AccountI { return myVestingAccount }, + expBalances: sdk.NewCoins(), + expHandled: true, + }, + "vesting account with other tokens - only original denoms removed": { + setupAcc: func(t *testing.T, ctx sdk.Context) authtypes.AccountI { + keepers.Faucet.Fund(ctx, vestingAddr, sdk.NewCoin("other", sdk.NewInt(2))) + return myVestingAccount + }, + expBalances: sdk.NewCoins(sdk.NewCoin("other", sdk.NewInt(2))), + expHandled: true, + }, + "non vesting account - not handled": { + setupAcc: func(t *testing.T, ctx sdk.Context) authtypes.AccountI { + return &authtypes.BaseAccount{Address: myVestingAccount.GetAddress().String()} + }, + expBalances: sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(100))), + expHandled: false, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + ctx, _ := parentCtx.CacheContext() + existingAccount := spec.setupAcc(t, ctx) + // overwrite account in store as in keeper before calling prune + keepers.AccountKeeper.SetAccount(ctx, keepers.AccountKeeper.NewAccountWithAddress(ctx, vestingAddr)) + + // when + noGasCtx := ctx.WithGasMeter(sdk.NewGasMeter(0)) // should not use callers gas + gotHandled, gotErr := NewVestingCoinBurner(keepers.BankKeeper).CleanupExistingAccount(noGasCtx, existingAccount) + // then + if spec.expErr != nil { + require.ErrorIs(t, gotErr, spec.expErr) + return + } + require.NoError(t, gotErr) + assert.Equal(t, spec.expBalances, keepers.BankKeeper.GetAllBalances(ctx, vestingAddr)) + assert.Equal(t, spec.expHandled, gotHandled) + // and no out of gas panic + }) + } +} diff --git a/x/wasm/keeper/options.go b/x/wasm/keeper/options.go index e6119b4478..cc5547f22c 100644 --- a/x/wasm/keeper/options.go +++ b/x/wasm/keeper/options.go @@ -99,14 +99,14 @@ func WithCoinTransferrer(x CoinTransferrer) Option { }) } -// WithCoinPruner is an optional constructor parameter to set a custom type that handles balances +// WithAccountPruner is an optional constructor parameter to set a custom type that handles balances and data cleanup // for accounts pruned on contract instantiate -func WithCoinPruner(x CoinPruner) Option { +func WithAccountPruner(x AccountPruner) Option { if x == nil { panic("must not be nil") } return optsFn(func(k *Keeper) { - k.coinPruner = x + k.accountPruner = x }) } @@ -154,19 +154,6 @@ func WithAcceptedAccountTypesOnContractInstantiation(accts ...authtypes.AccountI }) } -// WithPruneAccountTypesOnContractInstantiation sets the account types that should be cleared. Account types of this list -// will be overwritten with the BaseAccount type and their balance burned, when they exist for an address on contract -// instantiation. -// -// Values should be references and contain the `*vestingtypes.DelayedVestingAccount`, `*vestingtypes.ContinuousVestingAccount` -// as post genesis account types with an open address range. -func WithPruneAccountTypesOnContractInstantiation(accts ...authtypes.AccountI) Option { - m := asTypeMap(accts) - return optsFn(func(k *Keeper) { - k.pruneAccountTypes = m - }) -} - func asTypeMap(accts []authtypes.AccountI) map[reflect.Type]struct{} { m := make(map[reflect.Type]struct{}, len(accts)) for _, a := range accts { diff --git a/x/wasm/keeper/options_test.go b/x/wasm/keeper/options_test.go index b4c7f0861e..29d2f9bd26 100644 --- a/x/wasm/keeper/options_test.go +++ b/x/wasm/keeper/options_test.go @@ -95,20 +95,10 @@ func TestConstructorOptions(t *testing.T) { assert.Equal(t, exp, k.acceptedAccountTypes) }, }, - "prune account types": { - srcOpt: WithPruneAccountTypesOnContractInstantiation(&authtypes.BaseAccount{}, &vestingtypes.ContinuousVestingAccount{}), + "account pruner": { + srcOpt: WithAccountPruner(VestingCoinBurner{}), verify: func(t *testing.T, k Keeper) { - exp := map[reflect.Type]struct{}{ - reflect.TypeOf(&authtypes.BaseAccount{}): {}, - reflect.TypeOf(&vestingtypes.ContinuousVestingAccount{}): {}, - } - assert.Equal(t, exp, k.pruneAccountTypes) - }, - }, - "coin pruner": { - srcOpt: WithCoinPruner(CoinBurner{}), - verify: func(t *testing.T, k Keeper) { - assert.Equal(t, CoinBurner{}, k.coinPruner) + assert.Equal(t, VestingCoinBurner{}, k.accountPruner) }, }, } From 9c5ebbbc4ca58053c633742f75503d231ef904bf Mon Sep 17 00:00:00 2001 From: Alexander Peters Date: Thu, 22 Sep 2022 18:22:35 +0200 Subject: [PATCH 114/120] Implement improvements to new address generation (#1014) * Revert default instance address generation to classic sequence based method Please enter the commit message for your changes. Lines starting * Start re-adding classic address generator * Extract address generation to file; minor updates * Review comments * Set max salt size * Support predictable address on instantiation * Switch attribute order for backwards compatiblity * Fix salt param check in CLI * Enable tests * Add more tests * Minor fix * Remove migration * Better cli description * Fix init message length prefix * Add sanity checks to address generation and minor updates * Reduce max length in tests for CI * CLI and address generation updates * Add test vectors * Minor updates * Fix cli long doc --- contrib/local/02-contracts.sh | 16 +- docs/proto/proto-docs.md | 50 +- proto/cosmwasm/wasm/v1/genesis.proto | 2 + proto/cosmwasm/wasm/v1/tx.proto | 45 +- x/wasm/alias.go | 2 + x/wasm/client/cli/genesis_msg.go | 65 +- x/wasm/client/cli/genesis_msg_test.go | 119 ++- x/wasm/client/cli/query.go | 28 +- x/wasm/client/cli/tx.go | 101 +- x/wasm/handler.go | 2 + x/wasm/keeper/addresses.go | 76 ++ x/wasm/keeper/addresses_test.go | 432 +++++++++ x/wasm/keeper/contract_keeper.go | 50 +- x/wasm/keeper/contract_keeper_test.go | 168 ++++ x/wasm/keeper/genesis.go | 8 +- x/wasm/keeper/genesis_test.go | 81 +- x/wasm/keeper/ibc_test.go | 4 +- x/wasm/keeper/keeper.go | 41 +- x/wasm/keeper/keeper_test.go | 195 +--- x/wasm/keeper/migrations.go | 27 - x/wasm/keeper/migrations_test.go | 20 - x/wasm/keeper/msg_server.go | 32 + x/wasm/keeper/proposal_integration_test.go | 29 +- x/wasm/keeper/querier_test.go | 5 +- x/wasm/keeper/test_common.go | 7 +- x/wasm/keeper/wasmtesting/coin_transferrer.go | 14 - x/wasm/keeper/wasmtesting/extension_mocks.go | 28 + x/wasm/module.go | 5 - x/wasm/module_test.go | 19 +- x/wasm/types/codec.go | 2 + x/wasm/types/exported_keepers.go | 23 +- x/wasm/types/keys.go | 3 +- x/wasm/types/tx.go | 53 + x/wasm/types/tx.pb.go | 917 ++++++++++++++++-- x/wasm/types/tx_test.go | 136 +++ x/wasm/types/validation.go | 18 +- 36 files changed, 2271 insertions(+), 552 deletions(-) create mode 100644 x/wasm/keeper/addresses.go create mode 100644 x/wasm/keeper/addresses_test.go create mode 100644 x/wasm/keeper/contract_keeper_test.go delete mode 100644 x/wasm/keeper/migrations.go delete mode 100644 x/wasm/keeper/migrations_test.go delete mode 100644 x/wasm/keeper/wasmtesting/coin_transferrer.go create mode 100644 x/wasm/keeper/wasmtesting/extension_mocks.go diff --git a/contrib/local/02-contracts.sh b/contrib/local/02-contracts.sh index ecbadf31eb..c445d948b6 100755 --- a/contrib/local/02-contracts.sh +++ b/contrib/local/02-contracts.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -o errexit -o nounset -o pipefail +set -o errexit -o nounset -o pipefail -x DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" @@ -9,7 +9,10 @@ RESP=$(wasmd tx wasm store "$DIR/../../x/wasm/keeper/testdata/hackatom.wasm" \ --from validator --gas 1500000 -y --chain-id=testing --node=http://localhost:26657 -b block -o json) CODE_ID=$(echo "$RESP" | jq -r '.logs[0].events[1].attributes[-1].value') +CODE_HASH=$(echo "$RESP" | jq -r '.logs[0].events[1].attributes[-2].value') echo "* Code id: $CODE_ID" +echo "* Code checksum: $CODE_HASH" + echo "* Download code" TMPDIR=$(mktemp -t wasmdXXXXXX) wasmd q wasm code "$CODE_ID" "$TMPDIR" @@ -27,6 +30,17 @@ wasmd tx wasm instantiate "$CODE_ID" "$INIT" --admin="$(wasmd keys show validato CONTRACT=$(wasmd query wasm list-contract-by-code "$CODE_ID" -o json | jq -r '.contracts[-1]') echo "* Contract address: $CONTRACT" + +echo "## Create new contract instance with predictable address" +wasmd tx wasm instantiate2 "$CODE_ID" "$INIT" $(echo -n "testing" | xxd -ps) \ + --admin="$(wasmd keys show validator -a)" \ + --from validator --amount="100ustake" --label "local0.1.0" \ + --fix-msg \ + --gas 1000000 -y --chain-id=testing -b block -o json | jq + +predictedAdress=$(wasmd q wasm build-address "$CODE_HASH" $(wasmd keys show validator -a) $(echo -n "testing" | xxd -ps) "$INIT") +wasmd q wasm contract "$predictedAdress" -o json | jq + echo "### Query all" RESP=$(wasmd query wasm contract-state all "$CONTRACT" -o json) echo "$RESP" | jq diff --git a/docs/proto/proto-docs.md b/docs/proto/proto-docs.md index 584398a709..add638f07f 100644 --- a/docs/proto/proto-docs.md +++ b/docs/proto/proto-docs.md @@ -23,6 +23,8 @@ - [MsgExecuteContract](#cosmwasm.wasm.v1.MsgExecuteContract) - [MsgExecuteContractResponse](#cosmwasm.wasm.v1.MsgExecuteContractResponse) - [MsgInstantiateContract](#cosmwasm.wasm.v1.MsgInstantiateContract) + - [MsgInstantiateContract2](#cosmwasm.wasm.v1.MsgInstantiateContract2) + - [MsgInstantiateContract2Response](#cosmwasm.wasm.v1.MsgInstantiateContract2Response) - [MsgInstantiateContractResponse](#cosmwasm.wasm.v1.MsgInstantiateContractResponse) - [MsgMigrateContract](#cosmwasm.wasm.v1.MsgMigrateContract) - [MsgMigrateContractResponse](#cosmwasm.wasm.v1.MsgMigrateContractResponse) @@ -327,7 +329,7 @@ MsgExecuteContractResponse returns execution result data. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `data` | [bytes](#bytes) | | Data contains base64-encoded bytes to returned from the contract | +| `data` | [bytes](#bytes) | | Data contains bytes to returned from the contract | @@ -355,6 +357,45 @@ code id. + + +### MsgInstantiateContract2 +MsgInstantiateContract2 create a new smart contract instance for the given +code id with a predicable address. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `sender` | [string](#string) | | Sender is the that actor that signed the messages | +| `admin` | [string](#string) | | Admin is an optional address that can execute migrations | +| `code_id` | [uint64](#uint64) | | CodeID is the reference to the stored WASM code | +| `label` | [string](#string) | | Label is optional metadata to be stored with a contract instance. | +| `msg` | [bytes](#bytes) | | Msg json encoded message to be passed to the contract on instantiation | +| `funds` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated | Funds coins that are transferred to the contract on instantiation | +| `salt` | [bytes](#bytes) | | Salt is an arbitrary value provided by the sender. Size can be 1 to 64. | +| `fix_msg` | [bool](#bool) | | FixMsg include the msg value into the hash for the predictable address. Default is false | + + + + + + + + +### MsgInstantiateContract2Response +MsgInstantiateContract2Response return instantiation result data + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `address` | [string](#string) | | Address is the bech32 address of the new contract instance. | +| `data` | [bytes](#bytes) | | Data contains bytes to returned from the contract | + + + + + + ### MsgInstantiateContractResponse @@ -364,7 +405,7 @@ MsgInstantiateContractResponse return instantiation result data | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | `address` | [string](#string) | | Address is the bech32 address of the new contract instance. | -| `data` | [bytes](#bytes) | | Data contains base64-encoded bytes to returned from the contract | +| `data` | [bytes](#bytes) | | Data contains bytes to returned from the contract | @@ -478,7 +519,8 @@ Msg defines the wasm Msg service. | Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint | | ----------- | ------------ | ------------- | ------------| ------- | -------- | | `StoreCode` | [MsgStoreCode](#cosmwasm.wasm.v1.MsgStoreCode) | [MsgStoreCodeResponse](#cosmwasm.wasm.v1.MsgStoreCodeResponse) | StoreCode to submit Wasm code to the system | | -| `InstantiateContract` | [MsgInstantiateContract](#cosmwasm.wasm.v1.MsgInstantiateContract) | [MsgInstantiateContractResponse](#cosmwasm.wasm.v1.MsgInstantiateContractResponse) | Instantiate creates a new smart contract instance for the given code id. | | +| `InstantiateContract` | [MsgInstantiateContract](#cosmwasm.wasm.v1.MsgInstantiateContract) | [MsgInstantiateContractResponse](#cosmwasm.wasm.v1.MsgInstantiateContractResponse) | InstantiateContract creates a new smart contract instance for the given code id. | | +| `InstantiateContract2` | [MsgInstantiateContract2](#cosmwasm.wasm.v1.MsgInstantiateContract2) | [MsgInstantiateContract2Response](#cosmwasm.wasm.v1.MsgInstantiateContract2Response) | InstantiateContract2 creates a new smart contract instance for the given code id with a predictable address | | | `ExecuteContract` | [MsgExecuteContract](#cosmwasm.wasm.v1.MsgExecuteContract) | [MsgExecuteContractResponse](#cosmwasm.wasm.v1.MsgExecuteContractResponse) | Execute submits the given message data to a smart contract | | | `MigrateContract` | [MsgMigrateContract](#cosmwasm.wasm.v1.MsgMigrateContract) | [MsgMigrateContractResponse](#cosmwasm.wasm.v1.MsgMigrateContractResponse) | Migrate runs a code upgrade/ downgrade for a smart contract | | | `UpdateAdmin` | [MsgUpdateAdmin](#cosmwasm.wasm.v1.MsgUpdateAdmin) | [MsgUpdateAdminResponse](#cosmwasm.wasm.v1.MsgUpdateAdminResponse) | UpdateAdmin sets a new admin for a smart contract | | @@ -560,7 +602,7 @@ order. The intention is to have more human readable data that is auditable. | ----- | ---- | ----- | ----------- | | `store_code` | [MsgStoreCode](#cosmwasm.wasm.v1.MsgStoreCode) | | | | `instantiate_contract` | [MsgInstantiateContract](#cosmwasm.wasm.v1.MsgInstantiateContract) | | | -| `execute_contract` | [MsgExecuteContract](#cosmwasm.wasm.v1.MsgExecuteContract) | | | +| `execute_contract` | [MsgExecuteContract](#cosmwasm.wasm.v1.MsgExecuteContract) | | MsgInstantiateContract2 intentionally not supported see https://github.com/CosmWasm/wasmd/issues/987 | diff --git a/proto/cosmwasm/wasm/v1/genesis.proto b/proto/cosmwasm/wasm/v1/genesis.proto index f02f330750..87373e18d7 100644 --- a/proto/cosmwasm/wasm/v1/genesis.proto +++ b/proto/cosmwasm/wasm/v1/genesis.proto @@ -33,6 +33,8 @@ message GenesisState { MsgStoreCode store_code = 1; MsgInstantiateContract instantiate_contract = 2; MsgExecuteContract execute_contract = 3; + // MsgInstantiateContract2 intentionally not supported + // see https://github.com/CosmWasm/wasmd/issues/987 } } } diff --git a/proto/cosmwasm/wasm/v1/tx.proto b/proto/cosmwasm/wasm/v1/tx.proto index f1eb8fec68..04acc8ef7f 100644 --- a/proto/cosmwasm/wasm/v1/tx.proto +++ b/proto/cosmwasm/wasm/v1/tx.proto @@ -12,9 +12,14 @@ option (gogoproto.goproto_getters_all) = false; service Msg { // StoreCode to submit Wasm code to the system rpc StoreCode(MsgStoreCode) returns (MsgStoreCodeResponse); - // Instantiate creates a new smart contract instance for the given code id. + // InstantiateContract creates a new smart contract instance for the given + // code id. rpc InstantiateContract(MsgInstantiateContract) returns (MsgInstantiateContractResponse); + // InstantiateContract2 creates a new smart contract instance for the given + // code id with a predictable address + rpc InstantiateContract2(MsgInstantiateContract2) + returns (MsgInstantiateContract2Response); // Execute submits the given message data to a smart contract rpc ExecuteContract(MsgExecuteContract) returns (MsgExecuteContractResponse); // Migrate runs a code upgrade/ downgrade for a smart contract @@ -64,11 +69,45 @@ message MsgInstantiateContract { (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" ]; } + +// MsgInstantiateContract2 create a new smart contract instance for the given +// code id with a predicable address. +message MsgInstantiateContract2 { + // Sender is the that actor that signed the messages + string sender = 1; + // Admin is an optional address that can execute migrations + string admin = 2; + // CodeID is the reference to the stored WASM code + uint64 code_id = 3 [ (gogoproto.customname) = "CodeID" ]; + // Label is optional metadata to be stored with a contract instance. + string label = 4; + // Msg json encoded message to be passed to the contract on instantiation + bytes msg = 5 [ (gogoproto.casttype) = "RawContractMessage" ]; + // Funds coins that are transferred to the contract on instantiation + repeated cosmos.base.v1beta1.Coin funds = 6 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + // Salt is an arbitrary value provided by the sender. Size can be 1 to 64. + bytes salt = 7; + // FixMsg include the msg value into the hash for the predictable address. + // Default is false + bool fix_msg = 8; +} + // MsgInstantiateContractResponse return instantiation result data message MsgInstantiateContractResponse { // Address is the bech32 address of the new contract instance. string address = 1; - // Data contains base64-encoded bytes to returned from the contract + // Data contains bytes to returned from the contract + bytes data = 2; +} + +// MsgInstantiateContract2Response return instantiation result data +message MsgInstantiateContract2Response { + // Address is the bech32 address of the new contract instance. + string address = 1; + // Data contains bytes to returned from the contract bytes data = 2; } @@ -89,7 +128,7 @@ message MsgExecuteContract { // MsgExecuteContractResponse returns execution result data. message MsgExecuteContractResponse { - // Data contains base64-encoded bytes to returned from the contract + // Data contains bytes to returned from the contract bytes data = 1; } diff --git a/x/wasm/alias.go b/x/wasm/alias.go index 09f0e7af00..a64de37bdd 100644 --- a/x/wasm/alias.go +++ b/x/wasm/alias.go @@ -86,6 +86,7 @@ var ( ErrQueryFailed = types.ErrQueryFailed ErrInvalidMsg = types.ErrInvalidMsg KeyLastCodeID = types.KeyLastCodeID + KeyLastInstanceID = types.KeyLastInstanceID CodeKeyPrefix = types.CodeKeyPrefix ContractKeyPrefix = types.ContractKeyPrefix ContractStorePrefix = types.ContractStorePrefix @@ -101,6 +102,7 @@ type ( MsgStoreCode = types.MsgStoreCode MsgStoreCodeResponse = types.MsgStoreCodeResponse MsgInstantiateContract = types.MsgInstantiateContract + MsgInstantiateContract2 = types.MsgInstantiateContract2 MsgInstantiateContractResponse = types.MsgInstantiateContractResponse MsgExecuteContract = types.MsgExecuteContract MsgExecuteContractResponse = types.MsgExecuteContractResponse diff --git a/x/wasm/client/cli/genesis_msg.go b/x/wasm/client/cli/genesis_msg.go index 0859b03251..8aedae358a 100644 --- a/x/wasm/client/cli/genesis_msg.go +++ b/x/wasm/client/cli/genesis_msg.go @@ -8,10 +8,6 @@ import ( "errors" "fmt" - "github.com/CosmWasm/wasmd/x/wasm/ioutils" - - "github.com/CosmWasm/wasmd/x/wasm/keeper" - "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/crypto/keyring" @@ -24,6 +20,8 @@ import ( "github.com/spf13/cobra" tmtypes "github.com/tendermint/tendermint/types" + "github.com/CosmWasm/wasmd/x/wasm/ioutils" + "github.com/CosmWasm/wasmd/x/wasm/keeper" "github.com/CosmWasm/wasmd/x/wasm/types" ) @@ -133,7 +131,7 @@ func GenesisInstantiateContractCmd(defaultNodeHome string, genesisMutator Genesi return fmt.Errorf("permissions were not granted for %s", senderAddr) } state.GenMsgs = append(state.GenMsgs, types.GenesisState_GenMsgs{ - Sum: &types.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: &msg}, + Sum: &types.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: msg}, }) return nil }) @@ -238,10 +236,7 @@ func GenesisListContractsCmd(defaultNodeHome string, genReader GenesisReader) *c return err } state := g.WasmModuleState - all, err := GetAllContracts(state) - if err != nil { - return err - } + all := GetAllContracts(state) return printJSONOutput(cmd, all) }, } @@ -313,18 +308,7 @@ type ContractMeta struct { Info types.ContractInfo `json:"info"` } -// returns nil when not found -func codeHashByID(state *types.GenesisState, codeID uint64) []byte { - codes := GetAllCodes(state) - for _, v := range codes { - if v.CodeID == codeID { - return v.Info.CodeHash - } - } - return nil -} - -func GetAllContracts(state *types.GenesisState) ([]ContractMeta, error) { +func GetAllContracts(state *types.GenesisState) []ContractMeta { all := make([]ContractMeta, len(state.Contracts)) for i, c := range state.Contracts { all[i] = ContractMeta{ @@ -333,18 +317,11 @@ func GetAllContracts(state *types.GenesisState) ([]ContractMeta, error) { } } // add inflight + seq := contractSeqValue(state) for _, m := range state.GenMsgs { if msg := m.GetInstantiateContract(); msg != nil { - senderAddr, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - panic(fmt.Sprintf("unsupported address %q: %s", msg.Sender, err)) - } - codeHash := codeHashByID(state, msg.CodeID) - if codeHash == nil { - return nil, types.ErrNotFound.Wrapf("hash for code-id: %d", msg.CodeID) - } all = append(all, ContractMeta{ - ContractAddress: keeper.BuildContractAddress(codeHash, senderAddr, msg.Label).String(), + ContractAddress: keeper.BuildContractAddressClassic(msg.CodeID, seq).String(), Info: types.ContractInfo{ CodeID: msg.CodeID, Creator: msg.Sender, @@ -352,9 +329,10 @@ func GetAllContracts(state *types.GenesisState) ([]ContractMeta, error) { Label: msg.Label, }, }) + seq++ } } - return all, nil + return all } func hasAccountBalance(cmd *cobra.Command, appState map[string]json.RawMessage, sender sdk.AccAddress, coins sdk.Coins) (bool, error) { @@ -381,19 +359,13 @@ func hasContract(state *types.GenesisState, contractAddr string) bool { return true } } + seq := contractSeqValue(state) for _, m := range state.GenMsgs { if msg := m.GetInstantiateContract(); msg != nil { - senderAddr, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - panic(fmt.Sprintf("unsupported address %q: %s", msg.Sender, err)) - } - hash := codeHashByID(state, msg.CodeID) - if hash == nil { - panic(fmt.Sprintf("unknown code id: %d", msg.CodeID)) - } - if keeper.BuildContractAddress(hash, senderAddr, msg.Label).String() == contractAddr { + if keeper.BuildContractAddressClassic(msg.CodeID, seq).String() == contractAddr { return true } + seq++ } } return false @@ -486,6 +458,19 @@ func (x DefaultGenesisIO) AlterWasmModuleState(cmd *cobra.Command, callback func return genutil.ExportGenesisFile(g.GenDoc, g.GenesisFile) } +// contractSeqValue reads the contract sequence from the genesis or +// returns default start value used in the keeper +func contractSeqValue(state *types.GenesisState) uint64 { + var seq uint64 = 1 + for _, s := range state.Sequences { + if bytes.Equal(s.IDKey, types.KeyLastInstanceID) { + seq = s.Value + break + } + } + return seq +} + // codeSeqValue reads the code sequence from the genesis or // returns default start value used in the keeper func codeSeqValue(state *types.GenesisState) uint64 { diff --git a/x/wasm/client/cli/genesis_msg_test.go b/x/wasm/client/cli/genesis_msg_test.go index 6b67aa4942..a1d24f29cd 100644 --- a/x/wasm/client/cli/genesis_msg_test.go +++ b/x/wasm/client/cli/genesis_msg_test.go @@ -1,15 +1,12 @@ package cli import ( - "bytes" "context" "encoding/json" "os" "path" "testing" - "github.com/cosmos/cosmos-sdk/types/address" - "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/crypto/hd" @@ -366,8 +363,7 @@ func TestInstantiateContractCmd(t *testing.T) { } func TestExecuteContractCmd(t *testing.T) { - mySenderAddr := sdk.AccAddress(bytes.Repeat([]byte{1}, address.Len)) - myFirstContractAddress := keeper.BuildContractAddress([]byte("myCodeHash"), mySenderAddr, "my").String() + const firstContractAddress = "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr" minimalWasmGenesis := types.GenesisState{ Params: types.DefaultParams(), } @@ -394,7 +390,7 @@ func TestExecuteContractCmd(t *testing.T) { }, Contracts: []types.Contract{ { - ContractAddress: myFirstContractAddress, + ContractAddress: firstContractAddress, ContractInfo: types.ContractInfoFixture(func(info *types.ContractInfo) { info.Created = nil }), @@ -403,34 +399,53 @@ func TestExecuteContractCmd(t *testing.T) { }, }, mutator: func(cmd *cobra.Command) { - cmd.SetArgs([]string{myFirstContractAddress, `{}`}) + cmd.SetArgs([]string{firstContractAddress, `{}`}) flagSet := cmd.Flags() flagSet.Set("run-as", myWellFundedAccount) }, expMsgCount: 1, }, - "all good with contract from genesis store messages": { + "all good with contract from genesis store messages without initial sequence": { srcGenesis: types.GenesisState{ Params: types.DefaultParams(), Codes: []types.Code{ { - CodeID: 1, - CodeInfo: types.CodeInfoFixture(func(info *types.CodeInfo) { - info.CodeHash = []byte("myCodeHash") - }), + CodeID: 1, + CodeInfo: types.CodeInfoFixture(), + CodeBytes: wasmIdent, + }, + }, + GenMsgs: []types.GenesisState_GenMsgs{ + {Sum: &types.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: types.MsgInstantiateContractFixture()}}, + }, + }, + mutator: func(cmd *cobra.Command) { + cmd.SetArgs([]string{firstContractAddress, `{}`}) + flagSet := cmd.Flags() + flagSet.Set("run-as", myWellFundedAccount) + }, + expMsgCount: 2, + }, + "all good with contract from genesis store messages and contract sequence set": { + srcGenesis: types.GenesisState{ + Params: types.DefaultParams(), + Codes: []types.Code{ + { + CodeID: 1, + CodeInfo: types.CodeInfoFixture(), CodeBytes: wasmIdent, }, }, GenMsgs: []types.GenesisState_GenMsgs{ - {Sum: &types.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: types.MsgInstantiateContractFixture( - func(m *types.MsgInstantiateContract) { - m.Sender = mySenderAddr.String() - m.Label = "my" - })}}, + {Sum: &types.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: types.MsgInstantiateContractFixture()}}, + }, + Sequences: []types.Sequence{ + {IDKey: types.KeyLastInstanceID, Value: 100}, }, }, mutator: func(cmd *cobra.Command) { - cmd.SetArgs([]string{myFirstContractAddress, `{}`}) + // See TestBuildContractAddress in keeper_test.go + cmd.SetArgs([]string{"cosmos1mujpjkwhut9yjw4xueyugc02evfv46y0dtmnz4lh8xxkkdapym9stu5qm8", `{}`}) flagSet := cmd.Flags() flagSet.Set("run-as", myWellFundedAccount) }, @@ -457,7 +472,7 @@ func TestExecuteContractCmd(t *testing.T) { }, Contracts: []types.Contract{ { - ContractAddress: myFirstContractAddress, + ContractAddress: firstContractAddress, ContractInfo: types.ContractInfoFixture(func(info *types.ContractInfo) { info.Created = nil }), @@ -466,7 +481,7 @@ func TestExecuteContractCmd(t *testing.T) { }, }, mutator: func(cmd *cobra.Command) { - cmd.SetArgs([]string{myFirstContractAddress, `{}`}) + cmd.SetArgs([]string{firstContractAddress, `{}`}) flagSet := cmd.Flags() flagSet.Set("run-as", keeper.RandomBech32AccountAddress(t)) }, @@ -484,7 +499,7 @@ func TestExecuteContractCmd(t *testing.T) { }, Contracts: []types.Contract{ { - ContractAddress: myFirstContractAddress, + ContractAddress: firstContractAddress, ContractInfo: types.ContractInfoFixture(func(info *types.ContractInfo) { info.Created = nil }), @@ -493,7 +508,7 @@ func TestExecuteContractCmd(t *testing.T) { }, }, mutator: func(cmd *cobra.Command) { - cmd.SetArgs([]string{myFirstContractAddress, `{}`}) + cmd.SetArgs([]string{firstContractAddress, `{}`}) flagSet := cmd.Flags() flagSet.Set("run-as", myWellFundedAccount) flagSet.Set("amount", "100stake") @@ -512,7 +527,7 @@ func TestExecuteContractCmd(t *testing.T) { }, Contracts: []types.Contract{ { - ContractAddress: myFirstContractAddress, + ContractAddress: firstContractAddress, ContractInfo: types.ContractInfoFixture(func(info *types.ContractInfo) { info.Created = nil }), @@ -521,7 +536,7 @@ func TestExecuteContractCmd(t *testing.T) { }, }, mutator: func(cmd *cobra.Command) { - cmd.SetArgs([]string{myFirstContractAddress, `{}`}) + cmd.SetArgs([]string{firstContractAddress, `{}`}) flagSet := cmd.Flags() flagSet.Set("run-as", keeper.RandomBech32AccountAddress(t)) flagSet.Set("amount", "10stake") @@ -550,9 +565,6 @@ func TestExecuteContractCmd(t *testing.T) { } func TestGetAllContracts(t *testing.T) { - creatorAddr1 := sdk.AccAddress(bytes.Repeat([]byte{1}, address.Len)) - creatorAddr2 := sdk.AccAddress(bytes.Repeat([]byte{2}, address.Len)) - specs := map[string]struct { src types.GenesisState exp []ContractMeta @@ -583,55 +595,68 @@ func TestGetAllContracts(t *testing.T) { }, "read from message state": { src: types.GenesisState{ - Codes: []types.Code{{CodeID: 1, CodeInfo: types.CodeInfo{CodeHash: []byte("firstCodeHash")}}}, GenMsgs: []types.GenesisState_GenMsgs{ - {Sum: &types.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: &types.MsgInstantiateContract{Sender: creatorAddr1.String(), Label: "first", CodeID: 1}}}, - {Sum: &types.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: &types.MsgInstantiateContract{Sender: creatorAddr2.String(), Label: "second", CodeID: 1}}}, + {Sum: &types.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: &types.MsgInstantiateContract{Label: "first"}}}, + {Sum: &types.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: &types.MsgInstantiateContract{Label: "second"}}}, }, }, exp: []ContractMeta{ { - ContractAddress: keeper.BuildContractAddress([]byte("firstCodeHash"), creatorAddr1, "first").String(), - Info: types.ContractInfo{Creator: creatorAddr1.String(), Label: "first", CodeID: 1}, + ContractAddress: keeper.BuildContractAddressClassic(0, 1).String(), + Info: types.ContractInfo{Label: "first"}, }, { - ContractAddress: keeper.BuildContractAddress([]byte("firstCodeHash"), creatorAddr2, "second").String(), - Info: types.ContractInfo{Creator: creatorAddr2.String(), Label: "second", CodeID: 1}, + ContractAddress: keeper.BuildContractAddressClassic(0, 2).String(), + Info: types.ContractInfo{Label: "second"}, }, }, }, - "read from contract and message state with contract sequence": { + "read from message state with contract sequence": { src: types.GenesisState{ - Codes: []types.Code{ - {CodeID: 1, CodeInfo: types.CodeInfo{CodeHash: []byte("firstCodeHash")}}, - {CodeID: 100, CodeInfo: types.CodeInfo{CodeHash: []byte("otherCodeHash")}}, + Sequences: []types.Sequence{ + {IDKey: types.KeyLastInstanceID, Value: 100}, + }, + GenMsgs: []types.GenesisState_GenMsgs{ + {Sum: &types.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: &types.MsgInstantiateContract{Label: "hundred"}}}, + }, + }, + exp: []ContractMeta{ + { + ContractAddress: keeper.BuildContractAddressClassic(0, 100).String(), + Info: types.ContractInfo{Label: "hundred"}, }, + }, + }, + "read from contract and message state with contract sequence": { + src: types.GenesisState{ Contracts: []types.Contract{ { - ContractAddress: keeper.BuildContractAddress([]byte("firstCodeHash"), creatorAddr1, "first").String(), - ContractInfo: types.ContractInfo{Label: "first", CodeID: 1}, + ContractAddress: "first-contract", + ContractInfo: types.ContractInfo{Label: "first"}, }, }, + Sequences: []types.Sequence{ + {IDKey: types.KeyLastInstanceID, Value: 100}, + }, GenMsgs: []types.GenesisState_GenMsgs{ - {Sum: &types.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: &types.MsgInstantiateContract{Sender: creatorAddr1.String(), Label: "hundred", CodeID: 100}}}, + {Sum: &types.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: &types.MsgInstantiateContract{Label: "hundred"}}}, }, }, exp: []ContractMeta{ { - ContractAddress: keeper.BuildContractAddress([]byte("firstCodeHash"), creatorAddr1, "first").String(), - Info: types.ContractInfo{Label: "first", CodeID: 1}, + ContractAddress: "first-contract", + Info: types.ContractInfo{Label: "first"}, }, { - ContractAddress: keeper.BuildContractAddress([]byte("otherCodeHash"), creatorAddr1, "hundred").String(), - Info: types.ContractInfo{Creator: creatorAddr1.String(), Label: "hundred", CodeID: 100}, + ContractAddress: keeper.BuildContractAddressClassic(0, 100).String(), + Info: types.ContractInfo{Label: "hundred"}, }, }, }, } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { - got, err := GetAllContracts(&spec.src) - require.NoError(t, err) + got := GetAllContracts(&spec.src) assert.Equal(t, spec.exp, got) }) } diff --git a/x/wasm/client/cli/query.go b/x/wasm/client/cli/query.go index f399bfd7d6..b847b3d843 100644 --- a/x/wasm/client/cli/query.go +++ b/x/wasm/client/cli/query.go @@ -67,11 +67,12 @@ func GetCmdLibVersion() *cobra.Command { // GetCmdBuildAddress build a contract address func GetCmdBuildAddress() *cobra.Command { + decoder := newArgDecoder(hex.DecodeString) cmd := &cobra.Command{ - Use: "build-address [code-hash] [creator-address] [label]", + Use: "build-address [code-hash] [creator-address] [salt-hex-encoded] [json_encoded_init_args (required when set as fixed)]", Short: "build contract address", Aliases: []string{"address"}, - Args: cobra.ExactArgs(3), + Args: cobra.RangeArgs(3, 4), RunE: func(cmd *cobra.Command, args []string) error { codeHash, err := hex.DecodeString(args[0]) if err != nil { @@ -81,14 +82,27 @@ func GetCmdBuildAddress() *cobra.Command { if err != nil { return fmt.Errorf("creator: %s", err) } - label := args[2] - if err := types.ValidateLabel(label); err != nil { - return fmt.Errorf("label: %s", err) + salt, err := hex.DecodeString(args[2]) + switch { + case err != nil: + return fmt.Errorf("salt: %s", err) + case len(salt) == 0: + return errors.New("empty salt") + } + + if len(args) == 3 { + cmd.Println(keeper.BuildContractAddressPredictable(codeHash, creator, salt, []byte{}).String()) + return nil + } + msg := types.RawContractMessage(args[3]) + if err := msg.ValidateBasic(); err != nil { + return fmt.Errorf("init message: %s", err) } - cmd.Println(keeper.BuildContractAddress(codeHash, creator, label).String()) + cmd.Println(keeper.BuildContractAddressPredictable(codeHash, creator, salt, msg).String()) return nil }, } + decoder.RegisterFlags(cmd.PersistentFlags(), "salt") return cmd } @@ -526,7 +540,7 @@ func newArgDecoder(def func(string) ([]byte, error)) *argumentDecoder { func (a *argumentDecoder) RegisterFlags(f *flag.FlagSet, argName string) { f.BoolVar(&a.asciiF, "ascii", false, "ascii encoded "+argName) - f.BoolVar(&a.hexF, "hex", false, "hex encoded "+argName) + f.BoolVar(&a.hexF, "hex", false, "hex encoded "+argName) f.BoolVar(&a.b64F, "b64", false, "base64 encoded "+argName) } diff --git a/x/wasm/client/cli/tx.go b/x/wasm/client/cli/tx.go index c4dfa473f4..d65e45c2d1 100644 --- a/x/wasm/client/cli/tx.go +++ b/x/wasm/client/cli/tx.go @@ -1,6 +1,7 @@ package cli import ( + "encoding/hex" "errors" "fmt" "os" @@ -11,6 +12,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/tx" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/version" "github.com/spf13/cobra" flag "github.com/spf13/pflag" @@ -23,6 +25,7 @@ const ( flagLabel = "label" flagAdmin = "admin" flagNoAdmin = "no-admin" + flagFixMsg = "fix-msg" flagRunAs = "run-as" flagInstantiateByEverybody = "instantiate-everybody" flagInstantiateNobody = "instantiate-nobody" @@ -43,6 +46,7 @@ func GetTxCmd() *cobra.Command { txCmd.AddCommand( StoreCodeCmd(), InstantiateContractCmd(), + InstantiateContract2Cmd(), ExecuteContractCmd(), MigrateContractCmd(), UpdateContractAdminCmd(), @@ -174,8 +178,14 @@ func parseAccessConfigFlags(flags *flag.FlagSet) (*types.AccessConfig, error) { // InstantiateContractCmd will instantiate a contract from previously uploaded code. func InstantiateContractCmd() *cobra.Command { cmd := &cobra.Command{ - Use: "instantiate [code_id_int64] [json_encoded_init_args] --label [text] --admin [address,optional] --amount [coins,optional]", - Short: "Instantiate a wasm contract", + Use: "instantiate [code_id_int64] [json_encoded_init_args] --label [text] --admin [address,optional] --amount [coins,optional] ", + Short: "Instantiate a wasm contract", + Long: fmt.Sprintf(`Creates a new instance of an uploaded wasm code with the given 'constructor' message. +Each contract instance has a unique address assigned. +Example: +$ %s wasmd tx wasm instantiate 1 '{"foo":"bar"}' --admin="$(%s keys show mykey -a)" \ + --from mykey --amount="100ustake" --label "local0.1.0" +`, version.AppName, version.AppName), Aliases: []string{"start", "init", "inst", "i"}, Args: cobra.ExactArgs(2), RunE: func(cmd *cobra.Command, args []string) error { @@ -183,7 +193,6 @@ func InstantiateContractCmd() *cobra.Command { if err != nil { return err } - msg, err := parseInstantiateArgs(args[0], args[1], clientCtx.GetFromAddress(), cmd.Flags()) if err != nil { return err @@ -191,7 +200,7 @@ func InstantiateContractCmd() *cobra.Command { if err := msg.ValidateBasic(); err != nil { return err } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), &msg) + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, } @@ -203,43 +212,105 @@ func InstantiateContractCmd() *cobra.Command { return cmd } -func parseInstantiateArgs(rawCodeID, initMsg string, sender sdk.AccAddress, flags *flag.FlagSet) (types.MsgInstantiateContract, error) { +// InstantiateContract2Cmd will instantiate a contract from previously uploaded code with predicable address generated +func InstantiateContract2Cmd() *cobra.Command { + decoder := newArgDecoder(hex.DecodeString) + cmd := &cobra.Command{ + Use: "instantiate2 [code_id_int64] [json_encoded_init_args] [salt] --label [text] --admin [address,optional] --amount [coins,optional] " + + "--fix-msg [bool,optional]", + Short: "Instantiate a wasm contract with predictable address", + Long: fmt.Sprintf(`Creates a new instance of an uploaded wasm code with the given 'constructor' message. +Each contract instance has a unique address assigned. They are assigned automatically but in order to have predictable addresses +for special use cases, the given 'salt' argument and '--fix-msg' parameters can be used to generate a custom address. + +Predictable address example (also see '%s query wasm build-address -h'): +$ %s wasmd tx wasm instantiate2 1 '{"foo":"bar"}' $(echo -n "testing" | xxd -ps) --admin="$(%s keys show mykey -a)" \ + --from mykey --amount="100ustake" --label "local0.1.0" \ + --fix-msg +`, version.AppName, version.AppName, version.AppName), + Aliases: []string{"start", "init", "inst", "i"}, + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + salt, err := decoder.DecodeString(args[2]) + if err != nil { + return fmt.Errorf("salt: %w", err) + } + fixMsg, err := cmd.Flags().GetBool(flagFixMsg) + if err != nil { + return fmt.Errorf("fix msg: %w", err) + } + data, err := parseInstantiateArgs(args[0], args[1], clientCtx.GetFromAddress(), cmd.Flags()) + if err != nil { + return err + } + msg := &types.MsgInstantiateContract2{ + Sender: data.Sender, + Admin: data.Admin, + CodeID: data.CodeID, + Label: data.Label, + Msg: data.Msg, + Funds: data.Funds, + Salt: salt, + FixMsg: fixMsg, + } + if err := msg.ValidateBasic(); err != nil { + return err + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + cmd.Flags().String(flagAmount, "", "Coins to send to the contract during instantiation") + cmd.Flags().String(flagLabel, "", "A human-readable name for this contract in lists") + cmd.Flags().String(flagAdmin, "", "Address of an admin") + cmd.Flags().Bool(flagNoAdmin, false, "You must set this explicitly if you don't want an admin") + cmd.Flags().Bool(flagFixMsg, false, "An optional flag to include the json_encoded_init_args for the predictable address generation mode") + decoder.RegisterFlags(cmd.PersistentFlags(), "salt") + flags.AddTxFlagsToCmd(cmd) + return cmd +} + +func parseInstantiateArgs(rawCodeID, initMsg string, sender sdk.AccAddress, flags *flag.FlagSet) (*types.MsgInstantiateContract, error) { // get the id of the code to instantiate codeID, err := strconv.ParseUint(rawCodeID, 10, 64) if err != nil { - return types.MsgInstantiateContract{}, err + return nil, err } amountStr, err := flags.GetString(flagAmount) if err != nil { - return types.MsgInstantiateContract{}, fmt.Errorf("amount: %s", err) + return nil, fmt.Errorf("amount: %s", err) } amount, err := sdk.ParseCoinsNormalized(amountStr) if err != nil { - return types.MsgInstantiateContract{}, fmt.Errorf("amount: %s", err) + return nil, fmt.Errorf("amount: %s", err) } label, err := flags.GetString(flagLabel) if err != nil { - return types.MsgInstantiateContract{}, fmt.Errorf("label: %s", err) + return nil, fmt.Errorf("label: %s", err) } if label == "" { - return types.MsgInstantiateContract{}, errors.New("label is required on all contracts") + return nil, errors.New("label is required on all contracts") } adminStr, err := flags.GetString(flagAdmin) if err != nil { - return types.MsgInstantiateContract{}, fmt.Errorf("admin: %s", err) + return nil, fmt.Errorf("admin: %s", err) } noAdmin, err := flags.GetBool(flagNoAdmin) if err != nil { - return types.MsgInstantiateContract{}, fmt.Errorf("no-admin: %s", err) + return nil, fmt.Errorf("no-admin: %s", err) } // ensure sensible admin is set (or explicitly immutable) if adminStr == "" && !noAdmin { - return types.MsgInstantiateContract{}, fmt.Errorf("you must set an admin or explicitly pass --no-admin to make it immutible (wasmd issue #719)") + return nil, fmt.Errorf("you must set an admin or explicitly pass --no-admin to make it immutible (wasmd issue #719)") } if adminStr != "" && noAdmin { - return types.MsgInstantiateContract{}, fmt.Errorf("you set an admin and passed --no-admin, those cannot both be true") + return nil, fmt.Errorf("you set an admin and passed --no-admin, those cannot both be true") } // build and sign the transaction, then broadcast to Tendermint @@ -251,7 +322,7 @@ func parseInstantiateArgs(rawCodeID, initMsg string, sender sdk.AccAddress, flag Msg: []byte(initMsg), Admin: adminStr, } - return msg, nil + return &msg, nil } // ExecuteContractCmd will instantiate a contract from previously uploaded code. diff --git a/x/wasm/handler.go b/x/wasm/handler.go index e6004cd7a0..c7f27b754b 100644 --- a/x/wasm/handler.go +++ b/x/wasm/handler.go @@ -29,6 +29,8 @@ func NewHandler(k types.ContractOpsKeeper) sdk.Handler { res, err = msgServer.StoreCode(sdk.WrapSDKContext(ctx), msg) case *MsgInstantiateContract: res, err = msgServer.InstantiateContract(sdk.WrapSDKContext(ctx), msg) + case *MsgInstantiateContract2: + res, err = msgServer.InstantiateContract2(sdk.WrapSDKContext(ctx), msg) case *MsgExecuteContract: res, err = msgServer.ExecuteContract(sdk.WrapSDKContext(ctx), msg) case *MsgMigrateContract: diff --git a/x/wasm/keeper/addresses.go b/x/wasm/keeper/addresses.go new file mode 100644 index 0000000000..67eabb4403 --- /dev/null +++ b/x/wasm/keeper/addresses.go @@ -0,0 +1,76 @@ +package keeper + +import ( + "encoding/binary" + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" + + "github.com/CosmWasm/wasmd/x/wasm/types" +) + +// AddressGenerator abstract address generator to be used for a single contract address +type AddressGenerator func(ctx sdk.Context, codeID uint64, checksum []byte) sdk.AccAddress + +// ClassicAddressGenerator generates a contract address using codeID and instanceID sequence +func (k Keeper) ClassicAddressGenerator() AddressGenerator { + return func(ctx sdk.Context, codeID uint64, _ []byte) sdk.AccAddress { + instanceID := k.autoIncrementID(ctx, types.KeyLastInstanceID) + return BuildContractAddressClassic(codeID, instanceID) + } +} + +// PredicableAddressGenerator generates a predictable contract address +func PredicableAddressGenerator(creator sdk.AccAddress, salt []byte, msg []byte, fixMsg bool) AddressGenerator { + return func(ctx sdk.Context, _ uint64, checksum []byte) sdk.AccAddress { + if !fixMsg { // clear msg to not be included in the address generation + msg = []byte{} + } + return BuildContractAddressPredictable(checksum, creator, salt, msg) + } +} + +// BuildContractAddressClassic builds an sdk account address for a contract. +func BuildContractAddressClassic(codeID, instanceID uint64) sdk.AccAddress { + contractID := make([]byte, 16) + binary.BigEndian.PutUint64(contractID[:8], codeID) + binary.BigEndian.PutUint64(contractID[8:], instanceID) + return address.Module(types.ModuleName, contractID)[:types.ContractAddrLen] +} + +// BuildContractAddressPredictable generates a contract address for the wasm module with len = types.ContractAddrLen using the +// Cosmos SDK address.Module function. +// Internally a key is built containing: +// (len(checksum) | checksum | len(sender_address) | sender_address | len(salt) | salt| len(initMsg) | initMsg). +// +// All method parameter values must be valid and not nil. +func BuildContractAddressPredictable(checksum []byte, creator sdk.AccAddress, salt, initMsg types.RawContractMessage) sdk.AccAddress { + if len(checksum) != 32 { + panic("invalid checksum") + } + if err := sdk.VerifyAddressFormat(creator); err != nil { + panic(fmt.Sprintf("creator: %s", err)) + } + if err := types.ValidateSalt(salt); err != nil { + panic(fmt.Sprintf("salt: %s", err)) + } + if err := initMsg.ValidateBasic(); len(initMsg) != 0 && err != nil { + panic(fmt.Sprintf("initMsg: %s", err)) + } + checksum = UInt64LengthPrefix(checksum) + creator = UInt64LengthPrefix(creator) + salt = UInt64LengthPrefix(salt) + initMsg = UInt64LengthPrefix(initMsg) + key := make([]byte, len(checksum)+len(creator)+len(salt)+len(initMsg)) + copy(key[0:], checksum) + copy(key[len(checksum):], creator) + copy(key[len(checksum)+len(creator):], salt) + copy(key[len(checksum)+len(creator)+len(salt):], initMsg) + return address.Module(types.ModuleName, key)[:types.ContractAddrLen] +} + +// UInt64LengthPrefix prepend big endian encoded byte length +func UInt64LengthPrefix(bz []byte) []byte { + return append(sdk.Uint64ToBigEndian(uint64(len(bz))), bz...) +} diff --git a/x/wasm/keeper/addresses_test.go b/x/wasm/keeper/addresses_test.go new file mode 100644 index 0000000000..fbcc607fc5 --- /dev/null +++ b/x/wasm/keeper/addresses_test.go @@ -0,0 +1,432 @@ +package keeper + +import ( + "encoding/json" + "fmt" + "testing" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" + tmbytes "github.com/tendermint/tendermint/libs/bytes" +) + +func TestBuildContractAddress(t *testing.T) { + x, y := sdk.GetConfig().GetBech32AccountAddrPrefix(), sdk.GetConfig().GetBech32AccountPubPrefix() + t.Cleanup(func() { + sdk.GetConfig().SetBech32PrefixForAccount(x, y) + }) + sdk.GetConfig().SetBech32PrefixForAccount("purple", "purple") + + // test vectors generated via cosmjs: https://github.com/cosmos/cosmjs/pull/1253/files + type Spec struct { + In struct { + Checksum tmbytes.HexBytes `json:"checksum"` + Creator sdk.AccAddress `json:"creator"` + Salt tmbytes.HexBytes `json:"salt"` + Msg string `json:"msg"` + } `json:"in"` + Out struct { + Address sdk.AccAddress `json:"address"` + } `json:"out"` + } + var specs []Spec + require.NoError(t, json.Unmarshal([]byte(goldenMasterPredictableContractAddr), &specs)) + require.NotEmpty(t, specs) + for i, spec := range specs { + t.Run(fmt.Sprintf("case %d", i), func(t *testing.T) { + // when + gotAddr := BuildContractAddressPredictable(spec.In.Checksum, spec.In.Creator, spec.In.Salt.Bytes(), []byte(spec.In.Msg)) + + require.Equal(t, spec.Out.Address.String(), gotAddr.String()) + require.NoError(t, sdk.VerifyAddressFormat(gotAddr)) + }) + } +} + +const goldenMasterPredictableContractAddr = `[ + { + "in": { + "checksum": "13a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a5", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbcccccccccc", + "salt": "61", + "msg": null + }, + "intermediate": { + "key": "7761736d00000000000000002013a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a500000000000000149999999999aaaaaaaaaabbbbbbbbbbcccccccccc0000000000000001610000000000000000", + "addressData": "5e865d3e45ad3e961f77fd77d46543417ced44d924dc3e079b5415ff6775f847" + }, + "out": { + "address": "purple1t6r960j945lfv8mhl4mage2rg97w63xeynwrupum2s2l7em4lprs9ce5hk" + } + }, + { + "in": { + "checksum": "13a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a5", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbcccccccccc", + "salt": "61", + "msg": "{}" + }, + "intermediate": { + "key": "7761736d00000000000000002013a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a500000000000000149999999999aaaaaaaaaabbbbbbbbbbcccccccccc00000000000000016100000000000000027b7d", + "addressData": "0995499608947a5281e2c7ebd71bdb26a1ad981946dad57f6c4d3ee35de77835" + }, + "out": { + "address": "purple1px25n9sgj3a99q0zcl4awx7my6s6mxqegmdd2lmvf5lwxh080q6suttktr" + } + }, + { + "in": { + "checksum": "13a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a5", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbcccccccccc", + "salt": "61", + "msg": "{\"some\":123,\"structure\":{\"nested\":[\"ok\",true]}}" + }, + "intermediate": { + "key": "7761736d00000000000000002013a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a500000000000000149999999999aaaaaaaaaabbbbbbbbbbcccccccccc000000000000000161000000000000002f7b22736f6d65223a3132332c22737472756374757265223a7b226e6573746564223a5b226f6b222c747275655d7d7d", + "addressData": "83326e554723b15bac664ceabc8a5887e27003abe9fbd992af8c7bcea4745167" + }, + "out": { + "address": "purple1svexu428ywc4htrxfn4tezjcsl38qqata8aany4033auafr529ns4v254c" + } + }, + { + "in": { + "checksum": "13a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a5", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbcccccccccc", + "salt": "aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae", + "msg": null + }, + "intermediate": { + "key": "7761736d00000000000000002013a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a500000000000000149999999999aaaaaaaaaabbbbbbbbbbcccccccccc0000000000000040aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae0000000000000000", + "addressData": "9384c6248c0bb171e306fd7da0993ec1e20eba006452a3a9e078883eb3594564" + }, + "out": { + "address": "purple1jwzvvfyvpwchrccxl476pxf7c83qawsqv3f2820q0zyrav6eg4jqdcq7gc" + } + }, + { + "in": { + "checksum": "13a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a5", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbcccccccccc", + "salt": "aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae", + "msg": "{}" + }, + "intermediate": { + "key": "7761736d00000000000000002013a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a500000000000000149999999999aaaaaaaaaabbbbbbbbbbcccccccccc0000000000000040aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae00000000000000027b7d", + "addressData": "9a8d5f98fb186825401a26206158e7a1213311a9b6a87944469913655af52ffb" + }, + "out": { + "address": "purple1n2x4lx8mrp5z2sq6ycsxzk885ysnxydfk658j3zxnyfk2kh49lasesxf6j" + } + }, + { + "in": { + "checksum": "13a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a5", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbcccccccccc", + "salt": "aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae", + "msg": "{\"some\":123,\"structure\":{\"nested\":[\"ok\",true]}}" + }, + "intermediate": { + "key": "7761736d00000000000000002013a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a500000000000000149999999999aaaaaaaaaabbbbbbbbbbcccccccccc0000000000000040aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae000000000000002f7b22736f6d65223a3132332c22737472756374757265223a7b226e6573746564223a5b226f6b222c747275655d7d7d", + "addressData": "932f07bc53f7d0b0b43cb5a54ac3e245b205e6ae6f7c1d991dc6af4a2ff9ac18" + }, + "out": { + "address": "purple1jvhs00zn7lgtpdpukkj54slzgkeqte4wda7pmxgac6h55tle4svq8cmp60" + } + }, + { + "in": { + "checksum": "13a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a5", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvmhwamhwaamhwamhwlllsatsy6m", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff", + "salt": "61", + "msg": null + }, + "intermediate": { + "key": "7761736d00000000000000002013a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a500000000000000209999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff0000000000000001610000000000000000", + "addressData": "9725e94f528d8b78d33c25f3dfcd60e6142d8be60ab36f6a5b59036fd51560db" + }, + "out": { + "address": "purple1juj7jn6j3k9h35euyhealntquc2zmzlxp2ek76jmtypkl4g4vrdsfwmwxk" + } + }, + { + "in": { + "checksum": "13a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a5", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvmhwamhwaamhwamhwlllsatsy6m", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff", + "salt": "61", + "msg": "{}" + }, + "intermediate": { + "key": "7761736d00000000000000002013a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a500000000000000209999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff00000000000000016100000000000000027b7d", + "addressData": "b056e539bbaf447ba18f3f13b792970111fc78933eb6700f4d227b5216d63658" + }, + "out": { + "address": "purple1kptw2wdm4az8hgv08ufm0y5hqyglc7yn86m8qr6dyfa4y9kkxevqmkm9q3" + } + }, + { + "in": { + "checksum": "13a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a5", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvmhwamhwaamhwamhwlllsatsy6m", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff", + "salt": "61", + "msg": "{\"some\":123,\"structure\":{\"nested\":[\"ok\",true]}}" + }, + "intermediate": { + "key": "7761736d00000000000000002013a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a500000000000000209999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff000000000000000161000000000000002f7b22736f6d65223a3132332c22737472756374757265223a7b226e6573746564223a5b226f6b222c747275655d7d7d", + "addressData": "6c98434180f052294ff89fb6d2dae34f9f4468b0b8e6e7c002b2a44adee39abd" + }, + "out": { + "address": "purple1djvyxsvq7pfzjnlcn7md9khrf705g69shrnw0sqzk2jy4hhrn27sjh2ysy" + } + }, + { + "in": { + "checksum": "13a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a5", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvmhwamhwaamhwamhwlllsatsy6m", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff", + "salt": "aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae", + "msg": null + }, + "intermediate": { + "key": "7761736d00000000000000002013a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a500000000000000209999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff0000000000000040aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae0000000000000000", + "addressData": "0aaf1c31c5d529d21d898775bc35b3416f47bfd99188c334c6c716102cbd3101" + }, + "out": { + "address": "purple1p2h3cvw9655ay8vfsa6mcddng9h5007ejxyvxdxxcutpqt9axyqsagmmay" + } + }, + { + "in": { + "checksum": "13a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a5", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvmhwamhwaamhwamhwlllsatsy6m", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff", + "salt": "aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae", + "msg": "{}" + }, + "intermediate": { + "key": "7761736d00000000000000002013a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a500000000000000209999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff0000000000000040aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae00000000000000027b7d", + "addressData": "36fe6ab732187cdfed46290b448b32eb7f4798e7a4968b0537de8a842cbf030e" + }, + "out": { + "address": "purple1xmlx4dejrp7dlm2x9y95fzejadl50x885jtgkpfhm69ggt9lqv8qk3vn4f" + } + }, + { + "in": { + "checksum": "13a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a5", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvmhwamhwaamhwamhwlllsatsy6m", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff", + "salt": "aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae", + "msg": "{\"some\":123,\"structure\":{\"nested\":[\"ok\",true]}}" + }, + "intermediate": { + "key": "7761736d00000000000000002013a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a500000000000000209999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff0000000000000040aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae000000000000002f7b22736f6d65223a3132332c22737472756374757265223a7b226e6573746564223a5b226f6b222c747275655d7d7d", + "addressData": "a0d0c942adac6f3e5e7c23116c4c42a24e96e0ab75f53690ec2d3de16067c751" + }, + "out": { + "address": "purple15rgvjs4d43hnuhnuyvgkcnzz5f8fdc9twh6ndy8v9577zcr8cags40l9dt" + } + }, + { + "in": { + "checksum": "1da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbcccccccccc", + "salt": "61", + "msg": null + }, + "intermediate": { + "key": "7761736d0000000000000000201da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b00000000000000149999999999aaaaaaaaaabbbbbbbbbbcccccccccc0000000000000001610000000000000000", + "addressData": "b95c467218d408a0f93046f227b6ece7fe18133ff30113db4d2a7becdfeca141" + }, + "out": { + "address": "purple1h9wyvusc6sy2p7fsgmez0dhvullpsyel7vq38k6d9fa7ehlv59qsvnyh36" + } + }, + { + "in": { + "checksum": "1da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbcccccccccc", + "salt": "61", + "msg": "{}" + }, + "intermediate": { + "key": "7761736d0000000000000000201da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b00000000000000149999999999aaaaaaaaaabbbbbbbbbbcccccccccc00000000000000016100000000000000027b7d", + "addressData": "23fe45dbbd45dc6cd25244a74b6e99e7a65bf0bac2f2842a05049d37555a3ae6" + }, + "out": { + "address": "purple1y0lytkaaghwxe5jjgjn5km5eu7n9hu96ctegg2s9qjwnw4268tnqxhg60a" + } + }, + { + "in": { + "checksum": "1da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbcccccccccc", + "salt": "61", + "msg": "{\"some\":123,\"structure\":{\"nested\":[\"ok\",true]}}" + }, + "intermediate": { + "key": "7761736d0000000000000000201da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b00000000000000149999999999aaaaaaaaaabbbbbbbbbbcccccccccc000000000000000161000000000000002f7b22736f6d65223a3132332c22737472756374757265223a7b226e6573746564223a5b226f6b222c747275655d7d7d", + "addressData": "6faea261ed63baa65b05726269e83b217fa6205dc7d9fb74f9667d004a69c082" + }, + "out": { + "address": "purple1d7h2yc0dvwa2vkc9wf3xn6pmy9l6vgzaclvlka8eve7sqjnfczpqqsdnwu" + } + }, + { + "in": { + "checksum": "1da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbcccccccccc", + "salt": "aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae", + "msg": null + }, + "intermediate": { + "key": "7761736d0000000000000000201da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b00000000000000149999999999aaaaaaaaaabbbbbbbbbbcccccccccc0000000000000040aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae0000000000000000", + "addressData": "67a3ab6384729925fdb144574628ce96836fe098d2c6be4e84ac106b2728d96c" + }, + "out": { + "address": "purple1v736kcuyw2vjtld3g3t5v2xwj6pklcyc6trtun5y4sgxkfegm9kq7vgpnt" + } + }, + { + "in": { + "checksum": "1da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbcccccccccc", + "salt": "aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae", + "msg": "{}" + }, + "intermediate": { + "key": "7761736d0000000000000000201da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b00000000000000149999999999aaaaaaaaaabbbbbbbbbbcccccccccc0000000000000040aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae00000000000000027b7d", + "addressData": "23a121263bfce05c144f4af86f3d8a9f87dc56f9dc48dbcffc8c5a614da4c661" + }, + "out": { + "address": "purple1ywsjzf3mlns9c9z0ftux70v2n7rac4hem3ydhnlu33dxzndycesssc7x2m" + } + }, + { + "in": { + "checksum": "1da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbcccccccccc", + "salt": "aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae", + "msg": "{\"some\":123,\"structure\":{\"nested\":[\"ok\",true]}}" + }, + "intermediate": { + "key": "7761736d0000000000000000201da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b00000000000000149999999999aaaaaaaaaabbbbbbbbbbcccccccccc0000000000000040aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae000000000000002f7b22736f6d65223a3132332c22737472756374757265223a7b226e6573746564223a5b226f6b222c747275655d7d7d", + "addressData": "dd90dba6d6fcd5fb9c9c8f536314eb1bb29cb5aa084b633c5806b926a5636b58" + }, + "out": { + "address": "purple1mkgdhfkkln2lh8yu3afkx98trwefedd2pp9kx0zcq6ujdftrddvq50esay" + } + }, + { + "in": { + "checksum": "1da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvmhwamhwaamhwamhwlllsatsy6m", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff", + "salt": "61", + "msg": null + }, + "intermediate": { + "key": "7761736d0000000000000000201da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b00000000000000209999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff0000000000000001610000000000000000", + "addressData": "547a743022f4f1af05b102f57bf1c1c7d7ee81bae427dc20d36b2c4ec57612ae" + }, + "out": { + "address": "purple123a8gvpz7nc67pd3qt6hhuwpclt7aqd6usnacgxndvkya3tkz2hq5hz38f" + } + }, + { + "in": { + "checksum": "1da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvmhwamhwaamhwamhwlllsatsy6m", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff", + "salt": "61", + "msg": "{}" + }, + "intermediate": { + "key": "7761736d0000000000000000201da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b00000000000000209999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff00000000000000016100000000000000027b7d", + "addressData": "416e169110e4b411bc53162d7503b2bbf14d6b36b1413a4f4c9af622696e9665" + }, + "out": { + "address": "purple1g9hpdygsuj6pr0znzckh2qajh0c566ekk9qn5n6vntmzy6twjejsrl9alk" + } + }, + { + "in": { + "checksum": "1da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvmhwamhwaamhwamhwlllsatsy6m", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff", + "salt": "61", + "msg": "{\"some\":123,\"structure\":{\"nested\":[\"ok\",true]}}" + }, + "intermediate": { + "key": "7761736d0000000000000000201da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b00000000000000209999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff000000000000000161000000000000002f7b22736f6d65223a3132332c22737472756374757265223a7b226e6573746564223a5b226f6b222c747275655d7d7d", + "addressData": "619a0988b92d8796cea91dea63cbb1f1aefa4a6b6ee5c5d1e937007252697220" + }, + "out": { + "address": "purple1vxdqnz9e9kredn4frh4x8ja37xh05jntdmjut50fxuq8y5nfwgsquu9mxh" + } + }, + { + "in": { + "checksum": "1da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvmhwamhwaamhwamhwlllsatsy6m", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff", + "salt": "aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae", + "msg": null + }, + "intermediate": { + "key": "7761736d0000000000000000201da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b00000000000000209999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff0000000000000040aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae0000000000000000", + "addressData": "d8af856a6a04852d19b647ad6d4336eb26e077f740aef1a0331db34d299a885a" + }, + "out": { + "address": "purple1mzhc26n2qjzj6xdkg7kk6sekavnwqalhgzh0rgpnrke562v63pdq8grp8q" + } + }, + { + "in": { + "checksum": "1da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvmhwamhwaamhwamhwlllsatsy6m", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff", + "salt": "aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae", + "msg": "{}" + }, + "intermediate": { + "key": "7761736d0000000000000000201da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b00000000000000209999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff0000000000000040aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae00000000000000027b7d", + "addressData": "c7fb7bea96daab23e416c4fcf328215303005e1d0d5424257335568e5381e33c" + }, + "out": { + "address": "purple1clahh65km24j8eqkcn70x2pp2vpsqhsap42zgftnx4tgu5upuv7q9ywjws" + } + }, + { + "in": { + "checksum": "1da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b", + "creator": "purple1nxvenxve42424242hwamhwamenxvenxvmhwamhwaamhwamhwlllsatsy6m", + "creatorData": "9999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff", + "salt": "aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae", + "msg": "{\"some\":123,\"structure\":{\"nested\":[\"ok\",true]}}" + }, + "intermediate": { + "key": "7761736d0000000000000000201da6c16de2cbaf7ad8cbb66f0925ba33f5c278cb2491762d04658c1480ea229b00000000000000209999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffff0000000000000040aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbccddeeffffeeddbbccddaa66551155aaaabbcc787878789900aabbbbcc221100acadae000000000000002f7b22736f6d65223a3132332c22737472756374757265223a7b226e6573746564223a5b226f6b222c747275655d7d7d", + "addressData": "ccdf9dea141a6c2475870529ab38fae9dec30df28e005894fe6578b66133ab4a" + }, + "out": { + "address": "purple1en0em6s5rfkzgav8q556kw86a80vxr0j3cq93987v4utvcfn4d9q0tql4w" + } + } +] +` diff --git a/x/wasm/keeper/contract_keeper.go b/x/wasm/keeper/contract_keeper.go index 6e1195dbd1..564adc5532 100644 --- a/x/wasm/keeper/contract_keeper.go +++ b/x/wasm/keeper/contract_keeper.go @@ -11,7 +11,18 @@ var _ types.ContractOpsKeeper = PermissionedKeeper{} // decoratedKeeper contains a subset of the wasm keeper that are already or can be guarded by an authorization policy in the future type decoratedKeeper interface { create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, instantiateAccess *types.AccessConfig, authZ AuthorizationPolicy) (codeID uint64, checksum []byte, err error) - instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.AccAddress, initMsg []byte, label string, deposit sdk.Coins, authZ AuthorizationPolicy) (sdk.AccAddress, []byte, error) + + instantiate( + ctx sdk.Context, + codeID uint64, + creator, admin sdk.AccAddress, + initMsg []byte, + label string, + deposit sdk.Coins, + addressGenerator AddressGenerator, + authZ AuthorizationPolicy, + ) (sdk.AccAddress, []byte, error) + migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, newCodeID uint64, msg []byte, authZ AuthorizationPolicy) ([]byte, error) setContractAdmin(ctx sdk.Context, contractAddress, caller, newAdmin sdk.AccAddress, authZ AuthorizationPolicy) error pinCode(ctx sdk.Context, codeID uint64) error @@ -20,6 +31,7 @@ type decoratedKeeper interface { Sudo(ctx sdk.Context, contractAddress sdk.AccAddress, msg []byte) ([]byte, error) setContractInfoExtension(ctx sdk.Context, contract sdk.AccAddress, extra types.ContractInfoExtension) error setAccessConfig(ctx sdk.Context, codeID uint64, caller sdk.AccAddress, newConfig types.AccessConfig, autz AuthorizationPolicy) error + ClassicAddressGenerator() AddressGenerator } type PermissionedKeeper struct { @@ -43,8 +55,40 @@ func (p PermissionedKeeper) Create(ctx sdk.Context, creator sdk.AccAddress, wasm return p.nested.create(ctx, creator, wasmCode, instantiateAccess, p.authZPolicy) } -func (p PermissionedKeeper) Instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.AccAddress, initMsg []byte, label string, deposit sdk.Coins) (sdk.AccAddress, []byte, error) { - return p.nested.instantiate(ctx, codeID, creator, admin, initMsg, label, deposit, p.authZPolicy) +// Instantiate creates an instance of a WASM contract using the classic sequence based address generator +func (p PermissionedKeeper) Instantiate( + ctx sdk.Context, + codeID uint64, + creator, admin sdk.AccAddress, + initMsg []byte, + label string, + deposit sdk.Coins, +) (sdk.AccAddress, []byte, error) { + return p.nested.instantiate(ctx, codeID, creator, admin, initMsg, label, deposit, p.nested.ClassicAddressGenerator(), p.authZPolicy) +} + +// Instantiate2 creates an instance of a WASM contract using the predictable address generator +func (p PermissionedKeeper) Instantiate2( + ctx sdk.Context, + codeID uint64, + creator, admin sdk.AccAddress, + initMsg []byte, + label string, + deposit sdk.Coins, + salt []byte, + fixMsg bool, +) (sdk.AccAddress, []byte, error) { + return p.nested.instantiate( + ctx, + codeID, + creator, + admin, + initMsg, + label, + deposit, + PredicableAddressGenerator(creator, salt, initMsg, fixMsg), + p.authZPolicy, + ) } func (p PermissionedKeeper) Execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, msg []byte, coins sdk.Coins) ([]byte, error) { diff --git a/x/wasm/keeper/contract_keeper_test.go b/x/wasm/keeper/contract_keeper_test.go new file mode 100644 index 0000000000..0a8bd1e224 --- /dev/null +++ b/x/wasm/keeper/contract_keeper_test.go @@ -0,0 +1,168 @@ +package keeper + +import ( + "encoding/json" + "fmt" + "math" + "strings" + "testing" + + "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/CosmWasm/wasmd/x/wasm/types" +) + +func TestInstantiate2(t *testing.T) { + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities) + example := StoreHackatomExampleContract(t, parentCtx, keepers) + otherExample := StoreReflectContract(t, parentCtx, keepers) + mock := &wasmtesting.MockWasmer{} + wasmtesting.MakeInstantiable(mock) + keepers.WasmKeeper.wasmVM = mock // set mock to not fail on contract init message + + verifierAddr := RandomAccountAddress(t) + beneficiaryAddr := RandomAccountAddress(t) + initMsg := mustMarshal(t, HackatomExampleInitMsg{Verifier: verifierAddr, Beneficiary: beneficiaryAddr}) + + otherAddr := keepers.Faucet.NewFundedRandomAccount(parentCtx, sdk.NewInt64Coin("denom", 1_000_000_000)) + + const ( + mySalt = "my salt" + myLabel = "my label" + ) + // create instances for duplicate checks + exampleContract := func(t *testing.T, ctx sdk.Context, fixMsg bool) { + _, _, err := keepers.ContractKeeper.Instantiate2( + ctx, + example.CodeID, + example.CreatorAddr, + nil, + initMsg, + myLabel, + sdk.NewCoins(sdk.NewInt64Coin("denom", 1)), + []byte(mySalt), + fixMsg, + ) + require.NoError(t, err) + } + exampleWithFixMsg := func(t *testing.T, ctx sdk.Context) { + exampleContract(t, ctx, true) + } + exampleWithoutFixMsg := func(t *testing.T, ctx sdk.Context) { + exampleContract(t, ctx, false) + } + specs := map[string]struct { + setup func(t *testing.T, ctx sdk.Context) + codeID uint64 + sender sdk.AccAddress + salt []byte + initMsg json.RawMessage + fixMsg bool + expErr error + }{ + "fix msg - generates different address than without fixMsg": { + setup: exampleWithoutFixMsg, + codeID: example.CodeID, + sender: example.CreatorAddr, + salt: []byte(mySalt), + initMsg: initMsg, + fixMsg: true, + }, + "fix msg - different sender": { + setup: exampleWithFixMsg, + codeID: example.CodeID, + sender: otherAddr, + salt: []byte(mySalt), + initMsg: initMsg, + fixMsg: true, + }, + "fix msg - different code": { + setup: exampleWithFixMsg, + codeID: otherExample.CodeID, + sender: example.CreatorAddr, + salt: []byte(mySalt), + initMsg: []byte(`{}`), + fixMsg: true, + }, + "fix msg - different salt": { + setup: exampleWithFixMsg, + codeID: example.CodeID, + sender: example.CreatorAddr, + salt: []byte("other salt"), + initMsg: initMsg, + fixMsg: true, + }, + "fix msg - different init msg": { + setup: exampleWithFixMsg, + codeID: example.CodeID, + sender: example.CreatorAddr, + salt: []byte(mySalt), + initMsg: mustMarshal(t, HackatomExampleInitMsg{Verifier: otherAddr, Beneficiary: beneficiaryAddr}), + fixMsg: true, + }, + "different sender": { + setup: exampleWithoutFixMsg, + codeID: example.CodeID, + sender: otherAddr, + salt: []byte(mySalt), + initMsg: initMsg, + }, + "different code": { + setup: exampleWithoutFixMsg, + codeID: otherExample.CodeID, + sender: example.CreatorAddr, + salt: []byte(mySalt), + initMsg: []byte(`{}`), + }, + "different salt": { + setup: exampleWithoutFixMsg, + codeID: example.CodeID, + sender: example.CreatorAddr, + salt: []byte(`other salt`), + initMsg: initMsg, + }, + "different init msg - reject same address": { + setup: exampleWithoutFixMsg, + codeID: example.CodeID, + sender: example.CreatorAddr, + salt: []byte(mySalt), + initMsg: mustMarshal(t, HackatomExampleInitMsg{Verifier: otherAddr, Beneficiary: beneficiaryAddr}), + expErr: types.ErrDuplicate, + }, + "fix msg - long msg": { + setup: exampleWithFixMsg, + codeID: example.CodeID, + sender: otherAddr, + salt: []byte(mySalt), + initMsg: []byte(fmt.Sprintf(`{"foo":%q}`, strings.Repeat("b", math.MaxInt16+1))), // too long kills CI + fixMsg: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + ctx, _ := parentCtx.CacheContext() + spec.setup(t, ctx) + gotAddr, _, gotErr := keepers.ContractKeeper.Instantiate2( + ctx, + spec.codeID, + spec.sender, + nil, + spec.initMsg, + myLabel, + sdk.NewCoins(sdk.NewInt64Coin("denom", 2)), + spec.salt, + spec.fixMsg, + ) + if spec.expErr != nil { + assert.ErrorIs(t, gotErr, spec.expErr) + return + } + require.NoError(t, gotErr) + assert.NotEmpty(t, gotAddr) + }) + } +} diff --git a/x/wasm/keeper/genesis.go b/x/wasm/keeper/genesis.go index d81750b708..7fa5280b9e 100644 --- a/x/wasm/keeper/genesis.go +++ b/x/wasm/keeper/genesis.go @@ -35,6 +35,7 @@ func InitGenesis(ctx sdk.Context, keeper *Keeper, data types.GenesisState, staki } } + var maxContractID int for i, contract := range data.Contracts { contractAddr, err := sdk.AccAddressFromBech32(contract.ContractAddress) if err != nil { @@ -44,6 +45,7 @@ func InitGenesis(ctx sdk.Context, keeper *Keeper, data types.GenesisState, staki if err != nil { return nil, sdkerrors.Wrapf(err, "contract number %d", i) } + maxContractID = i + 1 // not ideal but max(contractID) is not persisted otherwise } for i, seq := range data.Sequences { @@ -58,6 +60,10 @@ func InitGenesis(ctx sdk.Context, keeper *Keeper, data types.GenesisState, staki if seqVal <= maxCodeID { return nil, sdkerrors.Wrapf(types.ErrInvalid, "seq %s with value: %d must be greater than: %d ", string(types.KeyLastCodeID), seqVal, maxCodeID) } + seqVal = keeper.PeekAutoIncrementID(ctx, types.KeyLastInstanceID) + if seqVal <= uint64(maxContractID) { + return nil, sdkerrors.Wrapf(types.ErrInvalid, "seq %s with value: %d must be greater than: %d ", string(types.KeyLastInstanceID), seqVal, maxContractID) + } if len(data.GenMsgs) == 0 { return nil, nil @@ -111,7 +117,7 @@ func ExportGenesis(ctx sdk.Context, keeper *Keeper) *types.GenesisState { return false }) - for _, k := range [][]byte{types.KeyLastCodeID} { + for _, k := range [][]byte{types.KeyLastCodeID, types.KeyLastInstanceID} { genState.Sequences = append(genState.Sequences, types.Sequence{ IDKey: k, Value: keeper.PeekAutoIncrementID(ctx, k), diff --git a/x/wasm/keeper/genesis_test.go b/x/wasm/keeper/genesis_test.go index 4b65f82eaa..aee7ad009e 100644 --- a/x/wasm/keeper/genesis_test.go +++ b/x/wasm/keeper/genesis_test.go @@ -11,14 +11,11 @@ import ( "testing" "time" - bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" - - "github.com/cosmos/cosmos-sdk/types/address" - "github.com/cosmos/cosmos-sdk/store" "github.com/cosmos/cosmos-sdk/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" + bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" distributionkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper" @@ -69,7 +66,7 @@ func TestGenesisExportImport(t *testing.T) { creatorAddr, err := sdk.AccAddressFromBech32(codeInfo.Creator) require.NoError(t, err) - codeID, checksum, err := contractKeeper.Create(srcCtx, creatorAddr, wasmCode, &codeInfo.InstantiateConfig) + codeID, _, err := contractKeeper.Create(srcCtx, creatorAddr, wasmCode, &codeInfo.InstantiateConfig) require.NoError(t, err) if pinned { contractKeeper.PinCode(srcCtx, codeID) @@ -84,7 +81,7 @@ func TestGenesisExportImport(t *testing.T) { } contract.CodeID = codeID - contractAddr := BuildContractAddress(checksum, creatorAddr, "testing") + contractAddr := wasmKeeper.ClassicAddressGenerator()(srcCtx, codeID, nil) wasmKeeper.storeContractInfo(srcCtx, contractAddr, &contract) wasmKeeper.appendToContractHistory(srcCtx, contractAddr, history...) wasmKeeper.importContractState(srcCtx, contractAddr, stateModels) @@ -160,16 +157,6 @@ func TestGenesisInit(t *testing.T) { require.NoError(t, err) myCodeInfo := wasmTypes.CodeInfoFixture(wasmTypes.WithSHA256CodeHash(wasmCode)) - mySenderAddr := sdk.AccAddress(bytes.Repeat([]byte{1}, address.Len)) - myLabel := "testing" - myContractInfoFixture := func(mutators ...func(*types.ContractInfo)) types.ContractInfo { - return types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { - c.CodeID = 1 - c.Creator = mySenderAddr.String() - c.Label = myLabel - }, types.OnlyGenesisFields) - } - specs := map[string]struct { src types.GenesisState stakingMock StakingKeeperMock @@ -185,6 +172,7 @@ func TestGenesisInit(t *testing.T) { }}, Sequences: []types.Sequence{ {IDKey: types.KeyLastCodeID, Value: 2}, + {IDKey: types.KeyLastInstanceID, Value: 1}, }, Params: types.DefaultParams(), }, @@ -203,6 +191,7 @@ func TestGenesisInit(t *testing.T) { }}, Sequences: []types.Sequence{ {IDKey: types.KeyLastCodeID, Value: 10}, + {IDKey: types.KeyLastInstanceID, Value: 1}, }, Params: types.DefaultParams(), }, @@ -222,6 +211,7 @@ func TestGenesisInit(t *testing.T) { Contracts: nil, Sequences: []types.Sequence{ {IDKey: types.KeyLastCodeID, Value: 3}, + {IDKey: types.KeyLastInstanceID, Value: 1}, }, Params: types.DefaultParams(), }, @@ -278,12 +268,13 @@ func TestGenesisInit(t *testing.T) { }}, Contracts: []types.Contract{ { - ContractAddress: BuildContractAddress(myCodeInfo.CodeHash, mySenderAddr, myLabel).String(), - ContractInfo: myContractInfoFixture(), + ContractAddress: BuildContractAddressClassic(1, 1).String(), + ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), }, }, Sequences: []types.Sequence{ {IDKey: types.KeyLastCodeID, Value: 2}, + {IDKey: types.KeyLastInstanceID, Value: 2}, }, Params: types.DefaultParams(), }, @@ -298,17 +289,16 @@ func TestGenesisInit(t *testing.T) { }}, Contracts: []types.Contract{ { - ContractAddress: BuildContractAddress(myCodeInfo.CodeHash, mySenderAddr, myLabel).String(), - ContractInfo: myContractInfoFixture(), + ContractAddress: BuildContractAddressClassic(1, 1).String(), + ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), }, { - ContractAddress: BuildContractAddress(myCodeInfo.CodeHash, mySenderAddr, "other-label").String(), - ContractInfo: myContractInfoFixture(func(i *wasmTypes.ContractInfo) { - i.Label = "other-label" - }), + ContractAddress: BuildContractAddressClassic(1, 2).String(), + ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), }, }, Sequences: []types.Sequence{ {IDKey: types.KeyLastCodeID, Value: 2}, + {IDKey: types.KeyLastInstanceID, Value: 3}, }, Params: types.DefaultParams(), }, @@ -318,8 +308,8 @@ func TestGenesisInit(t *testing.T) { src: types.GenesisState{ Contracts: []types.Contract{ { - ContractAddress: BuildContractAddress(myCodeInfo.CodeHash, mySenderAddr, myLabel).String(), - ContractInfo: myContractInfoFixture(), + ContractAddress: BuildContractAddressClassic(1, 1).String(), + ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), }, }, Params: types.DefaultParams(), @@ -334,11 +324,11 @@ func TestGenesisInit(t *testing.T) { }}, Contracts: []types.Contract{ { - ContractAddress: BuildContractAddress(myCodeInfo.CodeHash, mySenderAddr, myLabel).String(), - ContractInfo: myContractInfoFixture(), + ContractAddress: BuildContractAddressClassic(1, 1).String(), + ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), }, { - ContractAddress: BuildContractAddress(myCodeInfo.CodeHash, mySenderAddr, myLabel).String(), - ContractInfo: myContractInfoFixture(), + ContractAddress: BuildContractAddressClassic(1, 1).String(), + ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), }, }, Params: types.DefaultParams(), @@ -353,8 +343,8 @@ func TestGenesisInit(t *testing.T) { }}, Contracts: []types.Contract{ { - ContractAddress: BuildContractAddress(myCodeInfo.CodeHash, mySenderAddr, myLabel).String(), - ContractInfo: myContractInfoFixture(), + ContractAddress: BuildContractAddressClassic(1, 1).String(), + ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), ContractState: []types.Model{ { Key: []byte{0x1}, @@ -392,6 +382,26 @@ func TestGenesisInit(t *testing.T) { Params: types.DefaultParams(), }, }, + "prevent contract id seq init value == count contracts": { + src: types.GenesisState{ + Codes: []types.Code{{ + CodeID: firstCodeID, + CodeInfo: myCodeInfo, + CodeBytes: wasmCode, + }}, + Contracts: []types.Contract{ + { + ContractAddress: BuildContractAddressClassic(1, 1).String(), + ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), + }, + }, + Sequences: []types.Sequence{ + {IDKey: types.KeyLastCodeID, Value: 2}, + {IDKey: types.KeyLastInstanceID, Value: 1}, + }, + Params: types.DefaultParams(), + }, + }, "validator set update called for any genesis messages": { src: wasmTypes.GenesisState{ GenMsgs: []types.GenesisState_GenMsgs{ @@ -550,17 +560,16 @@ func TestImportContractWithCodeHistoryReset(t *testing.T) { } assert.Equal(t, expHistory, keeper.GetContractHistory(ctx, contractAddr)) assert.Equal(t, uint64(2), keeper.PeekAutoIncrementID(ctx, types.KeyLastCodeID)) + assert.Equal(t, uint64(3), keeper.PeekAutoIncrementID(ctx, types.KeyLastInstanceID)) } func TestSupportedGenMsgTypes(t *testing.T) { wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) - wasmHash := sha256.Sum256(wasmCode) var ( myAddress sdk.AccAddress = bytes.Repeat([]byte{1}, types.ContractAddrLen) verifierAddress sdk.AccAddress = bytes.Repeat([]byte{2}, types.ContractAddrLen) beneficiaryAddress sdk.AccAddress = bytes.Repeat([]byte{3}, types.ContractAddrLen) - contractAddr = BuildContractAddress(wasmHash[:], myAddress, "testing") ) const denom = "stake" importState := types.GenesisState{ @@ -592,7 +601,7 @@ func TestSupportedGenMsgTypes(t *testing.T) { Sum: &types.GenesisState_GenMsgs_ExecuteContract{ ExecuteContract: &types.MsgExecuteContract{ Sender: verifierAddress.String(), - Contract: contractAddr.String(), + Contract: BuildContractAddressClassic(1, 1).String(), Msg: []byte(`{"release":{}}`), }, }, @@ -617,7 +626,7 @@ func TestSupportedGenMsgTypes(t *testing.T) { require.NotNil(t, codeInfo) // verify contract instantiated - cInfo := keeper.GetContractInfo(ctx, contractAddr) + cInfo := keeper.GetContractInfo(ctx, BuildContractAddressClassic(1, 1)) require.NotNil(t, cInfo) // verify contract executed diff --git a/x/wasm/keeper/ibc_test.go b/x/wasm/keeper/ibc_test.go index bdbab1a37c..063dfb7f7d 100644 --- a/x/wasm/keeper/ibc_test.go +++ b/x/wasm/keeper/ibc_test.go @@ -4,8 +4,6 @@ import ( "fmt" "testing" - "github.com/tendermint/tendermint/libs/rand" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/assert" @@ -43,7 +41,7 @@ func TestBindingPortForIBCContractOnInstantiate(t *testing.T) { } func TestContractFromPortID(t *testing.T) { - contractAddr := BuildContractAddress(rand.Bytes(32), RandomAccountAddress(t), "testing") + contractAddr := BuildContractAddressClassic(1, 100) specs := map[string]struct { srcPort string expAddr sdk.AccAddress diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index c349603613..f29f6e18ed 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -19,7 +19,6 @@ import ( "github.com/cosmos/cosmos-sdk/store/prefix" "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/address" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" vestingexported "github.com/cosmos/cosmos-sdk/x/auth/vesting/exported" @@ -224,8 +223,8 @@ func (k Keeper) create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, evt := sdk.NewEvent( types.EventTypeStoreCode, - sdk.NewAttribute(types.AttributeKeyCodeID, strconv.FormatUint(codeID, 10)), sdk.NewAttribute(types.AttributeKeyChecksum, hex.EncodeToString(checksum)), + sdk.NewAttribute(types.AttributeKeyCodeID, strconv.FormatUint(codeID, 10)), // last element to be compatible with scripts ) for _, f := range strings.Split(report.RequiredCapabilities, ",") { evt.AppendAttributes(sdk.NewAttribute(types.AttributeKeyRequiredCapability, strings.TrimSpace(f))) @@ -267,7 +266,16 @@ func (k Keeper) importCode(ctx sdk.Context, codeID uint64, codeInfo types.CodeIn return nil } -func (k Keeper) instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.AccAddress, initMsg []byte, label string, deposit sdk.Coins, authPolicy AuthorizationPolicy) (sdk.AccAddress, []byte, error) { +func (k Keeper) instantiate( + ctx sdk.Context, + codeID uint64, + creator, admin sdk.AccAddress, + initMsg []byte, + label string, + deposit sdk.Coins, + addressGenerator AddressGenerator, + authPolicy AuthorizationPolicy, +) (sdk.AccAddress, []byte, error) { defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "instantiate") if creator == nil { @@ -277,19 +285,15 @@ func (k Keeper) instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.A ctx.GasMeter().ConsumeGas(instanceCosts, "Loading CosmWasm module: instantiate") // get contact info - store := ctx.KVStore(k.storeKey) - bz := store.Get(types.GetCodeKey(codeID)) - if bz == nil { + codeInfo := k.GetCodeInfo(ctx, codeID) + if codeInfo == nil { return nil, nil, sdkerrors.Wrap(types.ErrNotFound, "code") } - var codeInfo types.CodeInfo - k.cdc.MustUnmarshal(bz, &codeInfo) - if !authPolicy.CanInstantiateContract(codeInfo.InstantiateConfig, creator) { return nil, nil, sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "can not instantiate") } - contractAddress := BuildContractAddress(codeInfo.CodeHash, creator, label) + contractAddress := addressGenerator(ctx, codeID, codeInfo.CodeHash) if k.HasContractInfo(ctx, contractAddress) { return nil, nil, types.ErrDuplicate.Wrap("instance with this code id, sender and label exists: try a different label") } @@ -338,7 +342,7 @@ func (k Keeper) instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.A info := types.NewInfo(creator, deposit) // create prefixed data store - // 0x03 | BuildContractAddress (sdk.AccAddress) + // 0x03 | BuildContractAddressClassic (sdk.AccAddress) prefixStoreKey := types.GetContractStorePrefix(contractAddress) prefixStore := prefix.NewStore(ctx.KVStore(k.storeKey), prefixStoreKey) @@ -1006,21 +1010,6 @@ func (k Keeper) consumeRuntimeGas(ctx sdk.Context, gas uint64) { } } -// BuildContractAddress generates a contract address for the wasm module with len = types.ContractAddrLen using the -// Cosmos SDK address.Module function. -// Internally a key is built containing (len(checksum) | checksum | len(sender_address) | sender_address | len(label) | label). -// All method parameter values must be valid and not be empty or nil. -func BuildContractAddress(checksum []byte, creator sdk.AccAddress, label string) sdk.AccAddress { - checksum = address.MustLengthPrefix(checksum) - creator = address.MustLengthPrefix(creator) - labelBz := address.MustLengthPrefix([]byte(label)) - key := make([]byte, len(checksum)+len(creator)+len(labelBz)) - copy(key[0:], checksum) - copy(key[len(checksum):], creator) - copy(key[len(checksum)+len(creator):], labelBz) - return address.Module(types.ModuleName, key)[:types.ContractAddrLen] -} - func (k Keeper) autoIncrementID(ctx sdk.Context, lastIDKey []byte) uint64 { store := ctx.KVStore(k.storeKey) bz := store.Get(lastIDKey) diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index 5235141f36..947edd27c3 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -3,12 +3,10 @@ package keeper import ( "bytes" _ "embed" - "encoding/hex" "encoding/json" "errors" "fmt" "os" - "strings" "testing" "time" @@ -62,7 +60,7 @@ func TestCreateSuccess(t *testing.T) { require.Equal(t, hackatomWasm, storedCode) // and events emitted codeHash := "13a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a5" - exp := sdk.Events{sdk.NewEvent("store_code", sdk.NewAttribute("code_id", "1"), sdk.NewAttribute("code_checksum", codeHash))} + exp := sdk.Events{sdk.NewEvent("store_code", sdk.NewAttribute("code_checksum", codeHash), sdk.NewAttribute("code_id", "1"))} assert.Equal(t, exp, em.Events()) } @@ -398,11 +396,11 @@ func TestInstantiate(t *testing.T) { // create with no balance is also legal gotContractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx.WithEventManager(em), example.CodeID, creator, nil, initMsgBz, "demo contract 1", nil) require.NoError(t, err) - require.Equal(t, "cosmos1xaq0tcwz9fsqmtxlpzwjn2zr8gw66ljjr079ltfc5pelepcs7sjsk28n5n", gotContractAddr.String()) + require.Equal(t, "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr", gotContractAddr.String()) gasAfter := ctx.GasMeter().GasConsumed() if types.EnableGasVerification { - require.Equal(t, uint64(0x187b8), gasAfter-gasBefore) + require.Equal(t, uint64(0x1964f), gasAfter-gasBefore) } // ensure it is stored properly @@ -541,65 +539,6 @@ func TestInstantiateWithPermissions(t *testing.T) { } } -func TestInstantiateWithUniqueContractAddress(t *testing.T) { - parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities) - example := InstantiateHackatomExampleContract(t, parentCtx, keepers) - otherExample := InstantiateReflectExampleContract(t, parentCtx, keepers) - initMsg := mustMarshal(t, HackatomExampleInitMsg{Verifier: example.VerifierAddr, Beneficiary: example.BeneficiaryAddr}) - - otherAddress := DeterministicAccountAddress(t, 1) - keepers.Faucet.Fund(parentCtx, otherAddress, sdk.NewInt64Coin("denom", 100000000)) - used := make(map[string]struct{}) - specs := map[string]struct { - codeID uint64 - sender sdk.AccAddress - label string - initMsg json.RawMessage - expErr error - }{ - "reject duplicate which generates the same address": { - codeID: example.CodeID, - sender: example.CreatorAddr, - label: example.Label, - initMsg: initMsg, - expErr: types.ErrDuplicate, - }, - "different sender": { - codeID: example.CodeID, - sender: otherAddress, - label: example.Label, - initMsg: initMsg, - }, - "different code": { - codeID: otherExample.CodeID, - sender: example.CreatorAddr, - label: example.Label, - initMsg: []byte(`{}`), - }, - "different label": { - codeID: example.CodeID, - sender: example.CreatorAddr, - label: "other label", - initMsg: initMsg, - }, - } - for name, spec := range specs { - t.Run(name, func(t *testing.T) { - ctx, _ := parentCtx.CacheContext() - gotAddr, _, gotErr := keepers.ContractKeeper.Instantiate(ctx, spec.codeID, spec.sender, nil, spec.initMsg, spec.label, example.Deposit) - if spec.expErr != nil { - assert.ErrorIs(t, gotErr, spec.expErr) - return - } - require.NoError(t, gotErr) - expAddr := BuildContractAddress(keepers.WasmKeeper.GetCodeInfo(ctx, spec.codeID).CodeHash, spec.sender, spec.label) - assert.Equal(t, expAddr.String(), gotAddr.String()) - require.NotContains(t, used, gotAddr.String()) - used[gotAddr.String()] = struct{}{} - }) - } -} - func TestInstantiateWithAccounts(t *testing.T) { parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities) example := StoreHackatomExampleContract(t, parentCtx, keepers) @@ -609,12 +548,13 @@ func TestInstantiateWithAccounts(t *testing.T) { senderAddr := DeterministicAccountAddress(t, 1) keepers.Faucet.Fund(parentCtx, senderAddr, sdk.NewInt64Coin("denom", 100000000)) const myLabel = "testing" - contractAddr := BuildContractAddress(example.Checksum, senderAddr, myLabel) + mySalt := []byte(`my salt`) + contractAddr := BuildContractAddressPredictable(example.Checksum, senderAddr, mySalt, []byte{}) lastAccountNumber := keepers.AccountKeeper.GetAccount(parentCtx, senderAddr).GetAccountNumber() specs := map[string]struct { - acceptList Option + option Option account authtypes.AccountI initBalance sdk.Coin deposit sdk.Coins @@ -679,7 +619,7 @@ func TestInstantiateWithAccounts(t *testing.T) { expErr: types.ErrAccountExists, }, "with option used to set non default type to accept list": { - acceptList: WithAcceptedAccountTypesOnContractInstantiation(&vestingtypes.DelayedVestingAccount{}), + option: WithAcceptedAccountTypesOnContractInstantiation(&vestingtypes.DelayedVestingAccount{}), account: vestingtypes.NewDelayedVestingAccount( authtypes.NewBaseAccount(contractAddr, nil, 0, 0), sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(1_000))), time.Now().Add(30*time.Hour).Unix()), @@ -689,6 +629,15 @@ func TestInstantiateWithAccounts(t *testing.T) { sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(1_000))), time.Now().Add(30*time.Hour).Unix()), expBalance: sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(1_001))), }, + "pruning account fails": { + option: WithAccountPruner(wasmtesting.AccountPrunerMock{CleanupExistingAccountFn: func(ctx sdk.Context, existingAccount authtypes.AccountI) (handled bool, err error) { + return false, types.ErrUnsupportedForContract.Wrap("testing") + }}), + account: vestingtypes.NewDelayedVestingAccount( + authtypes.NewBaseAccount(contractAddr, nil, 0, 0), + sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(1_000))), time.Now().Add(30*time.Hour).Unix()), + expErr: types.ErrUnsupportedForContract, + }, } for name, spec := range specs { t.Run(name, func(t *testing.T) { @@ -699,16 +648,17 @@ func TestInstantiateWithAccounts(t *testing.T) { if !spec.initBalance.IsNil() { keepers.Faucet.Fund(ctx, spec.account.GetAddress(), spec.initBalance) } - if spec.acceptList != nil { - spec.acceptList.apply(keepers.WasmKeeper) + if spec.option != nil { + spec.option.apply(keepers.WasmKeeper) } defer func() { - if spec.acceptList != nil { // reset + if spec.option != nil { // reset WithAcceptedAccountTypesOnContractInstantiation(&authtypes.BaseAccount{}).apply(keepers.WasmKeeper) + WithAccountPruner(NewVestingCoinBurner(keepers.BankKeeper)).apply(keepers.WasmKeeper) } }() // when - gotAddr, _, gotErr := keepers.ContractKeeper.Instantiate(ctx, 1, senderAddr, nil, initMsg, myLabel, spec.deposit) + gotAddr, _, gotErr := keepers.ContractKeeper.Instantiate2(ctx, 1, senderAddr, nil, initMsg, myLabel, spec.deposit, mySalt, false) if spec.expErr != nil { assert.ErrorIs(t, gotErr, spec.expErr) return @@ -857,8 +807,7 @@ func TestExecute(t *testing.T) { addr, _, err := keepers.ContractKeeper.Instantiate(ctx, contractID, creator, nil, initMsgBz, "demo contract 3", deposit) require.NoError(t, err) - // cosmos1eycfqpgtcp4gc9g24cvg6useyncxspq8qurv2z7cs0wzcgvmffaquzwe2e build with code-id 1, DeterministicAccountAddress(t, 1) and label `demo contract 3` - require.Equal(t, "cosmos1eycfqpgtcp4gc9g24cvg6useyncxspq8qurv2z7cs0wzcgvmffaquzwe2e", addr.String()) + require.Equal(t, "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr", addr.String()) // ensure bob doesn't exist bobAcct := accKeeper.GetAccount(ctx, bob) @@ -1562,7 +1511,7 @@ func TestSudo(t *testing.T) { require.NoError(t, err) addr, _, err := keepers.ContractKeeper.Instantiate(ctx, contractID, creator, nil, initMsgBz, "demo contract 3", deposit) require.NoError(t, err) - require.Equal(t, "cosmos1eycfqpgtcp4gc9g24cvg6useyncxspq8qurv2z7cs0wzcgvmffaquzwe2e", addr.String()) + require.Equal(t, "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr", addr.String()) // the community is broke _, _, community := keyPubAddr() @@ -2077,104 +2026,6 @@ func TestQueryIsolation(t *testing.T) { assert.Nil(t, ctx.KVStore(k.storeKey).Get([]byte(`set_in_query`))) } -func TestBuildContractAddress(t *testing.T) { - x, y := sdk.GetConfig().GetBech32AccountAddrPrefix(), sdk.GetConfig().GetBech32AccountPubPrefix() - t.Cleanup(func() { - sdk.GetConfig().SetBech32PrefixForAccount(x, y) - }) - sdk.GetConfig().SetBech32PrefixForAccount("purple", "purple") - - // test vectors from https://gist.github.com/webmaster128/e4d401d414bd0e7e6f70482f11877fbe - specs := map[string]struct { - checksum []byte - label string - creator string - expAddress string - }{ - "initial account addr example": { - checksum: fromHex("13A1FC994CC6D1C81B746EE0C0FF6F90043875E0BF1D9BE6B7D779FC978DC2A5"), - label: "instance 1", - creator: "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", - expAddress: "purple1jukvumwqfxapueg6un6rtmafxktcluzv70xc3edz2m5t3slgw49qrmhc03", - }, - "account addr with different label": { - checksum: fromHex("13A1FC994CC6D1C81B746EE0C0FF6F90043875E0BF1D9BE6B7D779FC978DC2A5"), - label: "instance 2", - creator: "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", - expAddress: "purple1jpc2w2vu2t6k7u09p6v8e3w28ptnzvvt2snu5rytlj8qya27dq5sjkwm06", - }, - "initial contract addr example": { - checksum: fromHex("13A1FC994CC6D1C81B746EE0C0FF6F90043875E0BF1D9BE6B7D779FC978DC2A5"), - label: "instance 1", - creator: "purple1nxvenxve42424242hwamhwamenxvenxvmhwamhwaamhwamhwlllsatsy6m", - expAddress: "purple1wde5zlcveuh79w37w5g244qu9xja3hgfulyfkjvkxvwvjzgd5l3qfraz3c", - }, - "contract addr with different label": { - checksum: fromHex("13A1FC994CC6D1C81B746EE0C0FF6F90043875E0BF1D9BE6B7D779FC978DC2A5"), - label: "instance 2", - creator: "purple1nxvenxve42424242hwamhwamenxvenxvmhwamhwaamhwamhwlllsatsy6m", - expAddress: "purple1vae2kf0r3ehtq5q2jmfkg7wp4ckxwrw8dv4pvazz5nlzzu05lxzq878fa9", - }, - "account addr with different checksum": { - checksum: fromHex("1DA6C16DE2CBAF7AD8CBB66F0925BA33F5C278CB2491762D04658C1480EA229B"), - label: "instance 1", - creator: "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", - expAddress: "purple1gmgvt9levtn52mpfal3gl5tv60f47zez3wgczrh5c9352sfm9crs47zt0k", - }, - "account addr with different checksum and label": { - checksum: fromHex("1DA6C16DE2CBAF7AD8CBB66F0925BA33F5C278CB2491762D04658C1480EA229B"), - label: "instance 2", - creator: "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", - expAddress: "purple13jrcqxknt05rhdxmegjzjel666yay6fj3xvfp6445k7a9q2km4wqa7ss34", - }, - "contract addr with different checksum": { - checksum: fromHex("1DA6C16DE2CBAF7AD8CBB66F0925BA33F5C278CB2491762D04658C1480EA229B"), - label: "instance 1", - creator: "purple1nxvenxve42424242hwamhwamenxvenxvmhwamhwaamhwamhwlllsatsy6m", - expAddress: "purple1lu0lf6wmqeuwtrx93ptzvf4l0dyyz2vz6s8h5y9cj42fvhsmracq49pww9", - }, - "contract addr with different checksum and label": { - checksum: fromHex("1DA6C16DE2CBAF7AD8CBB66F0925BA33F5C278CB2491762D04658C1480EA229B"), - label: "instance 2", - creator: "purple1nxvenxve42424242hwamhwamenxvenxvmhwamhwaamhwamhwlllsatsy6m", - expAddress: "purple1zmerc8a9ml2au29rq3knuu35fktef3akceurckr6pf370n0wku7sw3c9mj", - }, - // regression tests - "min label size": { - checksum: fromHex("13A1FC994CC6D1C81B746EE0C0FF6F90043875E0BF1D9BE6B7D779FC978DC2A5"), - label: "x", - creator: "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", - expAddress: "purple16pc8gt824lmp3dh2sxvttj0ykcs02n5p3ldswhv3j7y853gghlfq7mqeh9", - }, - "max label size": { - checksum: fromHex("13A1FC994CC6D1C81B746EE0C0FF6F90043875E0BF1D9BE6B7D779FC978DC2A5"), - label: strings.Repeat("x", types.MaxLabelSize), - creator: "purple1nxvenxve42424242hwamhwamenxvenxvhxf2py", - expAddress: "purple1prkdvjmvv4s3tnppfxmlpj259v9cplf3wws4qq9qd7w3s4yqzqeqem4759", - }, - } - for name, spec := range specs { - t.Run(name, func(t *testing.T) { - creatorAddr, err := sdk.AccAddressFromBech32(spec.creator) - require.NoError(t, err) - - // when - gotAddr := BuildContractAddress(spec.checksum, creatorAddr, spec.label) - - require.Equal(t, spec.expAddress, gotAddr.String()) - require.NoError(t, sdk.VerifyAddressFormat(gotAddr)) - }) - } -} - -func fromHex(s string) []byte { - r, err := hex.DecodeString(s) - if err != nil { - panic(err) - } - return r -} - func TestSetAccessConfig(t *testing.T) { parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities) k := keepers.WasmKeeper diff --git a/x/wasm/keeper/migrations.go b/x/wasm/keeper/migrations.go deleted file mode 100644 index 4d218d504a..0000000000 --- a/x/wasm/keeper/migrations.go +++ /dev/null @@ -1,27 +0,0 @@ -package keeper - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/CosmWasm/wasmd/x/wasm/types" -) - -// Migrator is a struct for handling in-place store migrations. -type Migrator struct { - keeper *Keeper -} - -// NewMigrator returns a new Migrator. -func NewMigrator(keeper *Keeper) Migrator { - return Migrator{keeper: keeper} -} - -var keyLastInstanceID = append(types.SequenceKeyPrefix, []byte("lastContractId")...) - -// Migrate1to2 migrates from version 1 to 2. -// Remove the unused sequence for address generation -func (m Migrator) Migrate1to2(ctx sdk.Context) error { - store := ctx.KVStore(m.keeper.storeKey) - store.Delete(keyLastInstanceID) - return nil -} diff --git a/x/wasm/keeper/migrations_test.go b/x/wasm/keeper/migrations_test.go deleted file mode 100644 index bc9110a3b3..0000000000 --- a/x/wasm/keeper/migrations_test.go +++ /dev/null @@ -1,20 +0,0 @@ -package keeper - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/assert" -) - -func TestMigrateV1ToV2(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) - store := ctx.KVStore(keepers.WasmKeeper.storeKey) - store.Set(keyLastInstanceID, sdk.Uint64ToBigEndian(100)) - - // when - NewMigrator(keepers.WasmKeeper).Migrate1to2(ctx) - - // then - assert.False(t, store.Has(keyLastInstanceID)) -} diff --git a/x/wasm/keeper/msg_server.go b/x/wasm/keeper/msg_server.go index 8c2a592ebf..d3051f4307 100644 --- a/x/wasm/keeper/msg_server.go +++ b/x/wasm/keeper/msg_server.go @@ -43,6 +43,7 @@ func (m msgServer) StoreCode(goCtx context.Context, msg *types.MsgStoreCode) (*t }, nil } +// InstantiateContract instantiate a new contract with classic sequence based address generation func (m msgServer) InstantiateContract(goCtx context.Context, msg *types.MsgInstantiateContract) (*types.MsgInstantiateContractResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) @@ -74,6 +75,37 @@ func (m msgServer) InstantiateContract(goCtx context.Context, msg *types.MsgInst }, nil } +// InstantiateContract2 instantiate a new contract with predicatable address generated +func (m msgServer) InstantiateContract2(goCtx context.Context, msg *types.MsgInstantiateContract2) (*types.MsgInstantiateContract2Response, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + senderAddr, err := sdk.AccAddressFromBech32(msg.Sender) + if err != nil { + return nil, sdkerrors.Wrap(err, "sender") + } + var adminAddr sdk.AccAddress + if msg.Admin != "" { + if adminAddr, err = sdk.AccAddressFromBech32(msg.Admin); err != nil { + return nil, sdkerrors.Wrap(err, "admin") + } + } + + ctx.EventManager().EmitEvent(sdk.NewEvent( + sdk.EventTypeMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(sdk.AttributeKeySender, msg.Sender), + )) + contractAddr, data, err := m.keeper.Instantiate2(ctx, msg.CodeID, senderAddr, adminAddr, msg.Msg, msg.Label, msg.Funds, msg.Salt, msg.FixMsg) + if err != nil { + return nil, err + } + + return &types.MsgInstantiateContract2Response{ + Address: contractAddr.String(), + Data: data, + }, nil +} + func (m msgServer) ExecuteContract(goCtx context.Context, msg *types.MsgExecuteContract) (*types.MsgExecuteContractResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) senderAddr, err := sdk.AccAddressFromBech32(msg.Sender) diff --git a/x/wasm/keeper/proposal_integration_test.go b/x/wasm/keeper/proposal_integration_test.go index ace55269db..5a0305a485 100644 --- a/x/wasm/keeper/proposal_integration_test.go +++ b/x/wasm/keeper/proposal_integration_test.go @@ -2,25 +2,21 @@ package keeper import ( "bytes" - "crypto/sha256" "encoding/hex" "encoding/json" "errors" "os" "testing" - "github.com/cosmos/cosmos-sdk/x/params/client/utils" - wasmvm "github.com/CosmWasm/wasmvm" - - "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" - sdk "github.com/cosmos/cosmos-sdk/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + "github.com/cosmos/cosmos-sdk/x/params/client/utils" "github.com/cosmos/cosmos-sdk/x/params/types/proposal" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" "github.com/CosmWasm/wasmd/x/wasm/types" ) @@ -117,8 +113,9 @@ func TestInstantiateProposal(t *testing.T) { require.NoError(t, err) // then - codeHash := keepers.WasmKeeper.GetCodeInfo(ctx, 1).CodeHash - contractAddr := BuildContractAddress(codeHash, oneAddress, "testing") + contractAddr, err := sdk.AccAddressFromBech32("cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr") + require.NoError(t, err) + cInfo := wasmKeeper.GetContractInfo(ctx, contractAddr) require.NotNil(t, cInfo) assert.Equal(t, uint64(1), cInfo.CodeID) @@ -188,8 +185,9 @@ func TestInstantiateProposal_NoAdmin(t *testing.T) { require.NoError(t, err) // then - codeHash := keepers.WasmKeeper.GetCodeInfo(ctx, 1).CodeHash - contractAddr := BuildContractAddress(codeHash, oneAddress, "testing") + contractAddr, err := sdk.AccAddressFromBech32("cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr") + require.NoError(t, err) + cInfo := wasmKeeper.GetContractInfo(ctx, contractAddr) require.NotNil(t, cInfo) assert.Equal(t, uint64(1), cInfo.CodeID) @@ -230,7 +228,7 @@ func TestMigrateProposal(t *testing.T) { var ( anyAddress = DeterministicAccountAddress(t, 1) otherAddress = DeterministicAccountAddress(t, 2) - contractAddr = BuildContractAddress(codeInfoFixture.CodeHash, RandomAccountAddress(t), "") + contractAddr = BuildContractAddressClassic(1, 1) ) contractInfoFixture := types.ContractInfoFixture(func(c *types.ContractInfo) { @@ -407,13 +405,12 @@ func TestSudoProposal(t *testing.T) { } func TestAdminProposals(t *testing.T) { - wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") - require.NoError(t, err) var ( - otherAddress = DeterministicAccountAddress(t, 2) - codeHash = sha256.Sum256(wasmCode) - contractAddr = BuildContractAddress(codeHash[:], RandomAccountAddress(t), "") + otherAddress sdk.AccAddress = bytes.Repeat([]byte{0x2}, types.ContractAddrLen) + contractAddr = BuildContractAddressClassic(1, 1) ) + wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") + require.NoError(t, err) specs := map[string]struct { state types.ContractInfo diff --git a/x/wasm/keeper/querier_test.go b/x/wasm/keeper/querier_test.go index 115eeb8419..f4341d169d 100644 --- a/x/wasm/keeper/querier_test.go +++ b/x/wasm/keeper/querier_test.go @@ -158,9 +158,8 @@ func TestQuerySmartContractState(t *testing.T) { func TestQuerySmartContractPanics(t *testing.T) { ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) - creator := RandomAccountAddress(t) - contractAddr := BuildContractAddress([]byte("myCodeHash"), creator, "testing") - keepers.WasmKeeper.storeCodeInfo(ctx, 1, types.CodeInfo{CodeHash: []byte("myCodeHash")}) + contractAddr := BuildContractAddressClassic(1, 1) + keepers.WasmKeeper.storeCodeInfo(ctx, 1, types.CodeInfo{}) keepers.WasmKeeper.storeContractInfo(ctx, contractAddr, &types.ContractInfo{ CodeID: 1, Created: types.NewAbsoluteTxPosition(ctx), diff --git a/x/wasm/keeper/test_common.go b/x/wasm/keeper/test_common.go index fff90af36b..721a327826 100644 --- a/x/wasm/keeper/test_common.go +++ b/x/wasm/keeper/test_common.go @@ -9,20 +9,18 @@ import ( "testing" "time" - "github.com/cosmos/cosmos-sdk/x/auth/vesting" - - "github.com/cosmos/cosmos-sdk/types/address" - "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/std" "github.com/cosmos/cosmos-sdk/store" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/module" "github.com/cosmos/cosmos-sdk/x/auth" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + "github.com/cosmos/cosmos-sdk/x/auth/vesting" authzkeeper "github.com/cosmos/cosmos-sdk/x/authz/keeper" "github.com/cosmos/cosmos-sdk/x/bank" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" @@ -72,7 +70,6 @@ import ( dbm "github.com/tendermint/tm-db" wasmappparams "github.com/CosmWasm/wasmd/app/params" - "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" "github.com/CosmWasm/wasmd/x/wasm/types" ) diff --git a/x/wasm/keeper/wasmtesting/coin_transferrer.go b/x/wasm/keeper/wasmtesting/coin_transferrer.go deleted file mode 100644 index 497ecc747f..0000000000 --- a/x/wasm/keeper/wasmtesting/coin_transferrer.go +++ /dev/null @@ -1,14 +0,0 @@ -package wasmtesting - -import sdk "github.com/cosmos/cosmos-sdk/types" - -type MockCoinTransferrer struct { - TransferCoinsFn func(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error -} - -func (m *MockCoinTransferrer) TransferCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error { - if m.TransferCoinsFn == nil { - panic("not expected to be called") - } - return m.TransferCoinsFn(ctx, fromAddr, toAddr, amt) -} diff --git a/x/wasm/keeper/wasmtesting/extension_mocks.go b/x/wasm/keeper/wasmtesting/extension_mocks.go new file mode 100644 index 0000000000..562d9e74b0 --- /dev/null +++ b/x/wasm/keeper/wasmtesting/extension_mocks.go @@ -0,0 +1,28 @@ +package wasmtesting + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" +) + +type MockCoinTransferrer struct { + TransferCoinsFn func(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error +} + +func (m *MockCoinTransferrer) TransferCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error { + if m.TransferCoinsFn == nil { + panic("not expected to be called") + } + return m.TransferCoinsFn(ctx, fromAddr, toAddr, amt) +} + +type AccountPrunerMock struct { + CleanupExistingAccountFn func(ctx sdk.Context, existingAccount authtypes.AccountI) (handled bool, err error) +} + +func (m AccountPrunerMock) CleanupExistingAccount(ctx sdk.Context, existingAccount authtypes.AccountI) (handled bool, err error) { + if m.CleanupExistingAccountFn == nil { + panic("not expected to be called") + } + return m.CleanupExistingAccountFn(ctx, existingAccount) +} diff --git a/x/wasm/module.go b/x/wasm/module.go index 2433fe0219..c7ea6339c0 100644 --- a/x/wasm/module.go +++ b/x/wasm/module.go @@ -134,11 +134,6 @@ func NewAppModule( func (am AppModule) RegisterServices(cfg module.Configurator) { types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(keeper.NewDefaultPermissionKeeper(am.keeper))) types.RegisterQueryServer(cfg.QueryServer(), NewQuerier(am.keeper)) - - m := keeper.NewMigrator(am.keeper) - if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil { - panic(err) - } } func (am AppModule) LegacyQuerierHandler(amino *codec.LegacyAmino) sdk.Querier { //nolint:staticcheck diff --git a/x/wasm/module_test.go b/x/wasm/module_test.go index d3530e5a3a..66591aba27 100644 --- a/x/wasm/module_test.go +++ b/x/wasm/module_test.go @@ -7,11 +7,8 @@ import ( "os" "testing" - "github.com/cosmos/cosmos-sdk/types/address" - - "github.com/CosmWasm/wasmd/x/wasm/keeper/testdata" - sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" "github.com/cosmos/cosmos-sdk/types/module" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" @@ -24,6 +21,7 @@ import ( "github.com/tendermint/tendermint/crypto/ed25519" "github.com/CosmWasm/wasmd/x/wasm/keeper" + "github.com/CosmWasm/wasmd/x/wasm/keeper/testdata" "github.com/CosmWasm/wasmd/x/wasm/types" ) @@ -148,8 +146,7 @@ type state struct { func TestHandleInstantiate(t *testing.T) { data := setupTest(t) - creator := sdk.AccAddress(bytes.Repeat([]byte{1}, address.Len)) - data.faucet.Fund(data.ctx, creator, sdk.NewInt64Coin("denom", 100000)) + creator := data.faucet.NewFundedRandomAccount(data.ctx, sdk.NewInt64Coin("denom", 100000)) h := data.module.Route().Handler() q := data.module.LegacyQuerierHandler(nil) @@ -183,7 +180,7 @@ func TestHandleInstantiate(t *testing.T) { require.NoError(t, err) contractBech32Addr := parseInitResponse(t, res.Data) - require.Equal(t, "cosmos1400ax8h2dxe8ch64sus5sczqdhwv28hpjkkaphpa83he4fhz6k4qcm9kul", contractBech32Addr) + require.Equal(t, "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr", contractBech32Addr) // this should be standard x/wasm init event, nothing from contract require.Equal(t, 3, len(res.Events), prettyEvents(res.Events)) require.Equal(t, "message", res.Events[0].Type) @@ -210,9 +207,7 @@ func TestHandleExecute(t *testing.T) { deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) - creator := sdk.AccAddress(bytes.Repeat([]byte{1}, address.Len)) - data.faucet.Fund(data.ctx, creator, sdk.NewInt64Coin("denom", 100000*2)) - + creator := data.faucet.NewFundedRandomAccount(data.ctx, deposit.Add(deposit...)...) fred := data.faucet.NewFundedRandomAccount(data.ctx, topUp...) h := data.module.Route().Handler() @@ -244,7 +239,7 @@ func TestHandleExecute(t *testing.T) { require.NoError(t, err) contractBech32Addr := parseInitResponse(t, res.Data) - require.Equal(t, "cosmos1400ax8h2dxe8ch64sus5sczqdhwv28hpjkkaphpa83he4fhz6k4qcm9kul", contractBech32Addr) + require.Equal(t, "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr", contractBech32Addr) // this should be standard x/wasm message event, init event, plus a bank send event (2), with no custom contract events require.Equal(t, 6, len(res.Events), prettyEvents(res.Events)) require.Equal(t, "message", res.Events[0].Type) @@ -377,7 +372,7 @@ func TestHandleExecuteEscrow(t *testing.T) { res, err = h(data.ctx, &initCmd) require.NoError(t, err) contractBech32Addr := parseInitResponse(t, res.Data) - require.Equal(t, "cosmos1400ax8h2dxe8ch64sus5sczqdhwv28hpjkkaphpa83he4fhz6k4qcm9kul", contractBech32Addr) + require.Equal(t, "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr", contractBech32Addr) handleMsg := map[string]interface{}{ "release": map[string]interface{}{}, diff --git a/x/wasm/types/codec.go b/x/wasm/types/codec.go index e7e578b7f8..f1cd6f557f 100644 --- a/x/wasm/types/codec.go +++ b/x/wasm/types/codec.go @@ -13,6 +13,7 @@ import ( func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { //nolint:staticcheck cdc.RegisterConcrete(&MsgStoreCode{}, "wasm/MsgStoreCode", nil) cdc.RegisterConcrete(&MsgInstantiateContract{}, "wasm/MsgInstantiateContract", nil) + cdc.RegisterConcrete(&MsgInstantiateContract2{}, "wasm/MsgInstantiateContract2", nil) cdc.RegisterConcrete(&MsgExecuteContract{}, "wasm/MsgExecuteContract", nil) cdc.RegisterConcrete(&MsgMigrateContract{}, "wasm/MsgMigrateContract", nil) cdc.RegisterConcrete(&MsgUpdateAdmin{}, "wasm/MsgUpdateAdmin", nil) @@ -35,6 +36,7 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { (*sdk.Msg)(nil), &MsgStoreCode{}, &MsgInstantiateContract{}, + &MsgInstantiateContract2{}, &MsgExecuteContract{}, &MsgMigrateContract{}, &MsgUpdateAdmin{}, diff --git a/x/wasm/types/exported_keepers.go b/x/wasm/types/exported_keepers.go index df09957915..e68df8ee7b 100644 --- a/x/wasm/types/exported_keepers.go +++ b/x/wasm/types/exported_keepers.go @@ -28,8 +28,27 @@ type ContractOpsKeeper interface { // Create uploads and compiles a WASM contract, returning a short identifier for the contract Create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, instantiateAccess *AccessConfig) (codeID uint64, checksum []byte, err error) - // Instantiate creates an instance of a WASM contract - Instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.AccAddress, initMsg []byte, label string, deposit sdk.Coins) (sdk.AccAddress, []byte, error) + // Instantiate creates an instance of a WASM contract using the classic sequence based address generator + Instantiate( + ctx sdk.Context, + codeID uint64, + creator, admin sdk.AccAddress, + initMsg []byte, + label string, + deposit sdk.Coins, + ) (sdk.AccAddress, []byte, error) + + // Instantiate2 creates an instance of a WASM contract using the predictable address generator + Instantiate2( + ctx sdk.Context, + codeID uint64, + creator, admin sdk.AccAddress, + initMsg []byte, + label string, + deposit sdk.Coins, + salt []byte, + fixMsg bool, + ) (sdk.AccAddress, []byte, error) // Execute executes the contract instance Execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, msg []byte, coins sdk.Coins) ([]byte, error) diff --git a/x/wasm/types/keys.go b/x/wasm/types/keys.go index 9660360cb8..fb636ef4f3 100644 --- a/x/wasm/types/keys.go +++ b/x/wasm/types/keys.go @@ -32,7 +32,8 @@ var ( PinnedCodeIndexPrefix = []byte{0x07} TXCounterPrefix = []byte{0x08} - KeyLastCodeID = append(SequenceKeyPrefix, []byte("lastCodeId")...) + KeyLastCodeID = append(SequenceKeyPrefix, []byte("lastCodeId")...) + KeyLastInstanceID = append(SequenceKeyPrefix, []byte("lastContractId")...) ) // GetCodeKey constructs the key for retreiving the ID for the WASM code diff --git a/x/wasm/types/tx.go b/x/wasm/types/tx.go index 0c83018df0..9630777f29 100644 --- a/x/wasm/types/tx.go +++ b/x/wasm/types/tx.go @@ -306,3 +306,56 @@ func (msg MsgIBCCloseChannel) GetSignBytes() []byte { func (msg MsgIBCCloseChannel) GetSigners() []sdk.AccAddress { return nil } + +var _ sdk.Msg = &MsgInstantiateContract2{} + +func (msg MsgInstantiateContract2) Route() string { + return RouterKey +} + +func (msg MsgInstantiateContract2) Type() string { + return "instantiate2" +} + +func (msg MsgInstantiateContract2) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil { + return sdkerrors.Wrap(err, "sender") + } + + if msg.CodeID == 0 { + return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "code id is required") + } + + if err := ValidateLabel(msg.Label); err != nil { + return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "label is required") + } + + if !msg.Funds.IsValid() { + return sdkerrors.ErrInvalidCoins + } + + if len(msg.Admin) != 0 { + if _, err := sdk.AccAddressFromBech32(msg.Admin); err != nil { + return sdkerrors.Wrap(err, "admin") + } + } + if err := msg.Msg.ValidateBasic(); err != nil { + return sdkerrors.Wrap(err, "payload msg") + } + if err := ValidateSalt(msg.Salt); err != nil { + return sdkerrors.Wrap(err, "salt") + } + return nil +} + +func (msg MsgInstantiateContract2) GetSignBytes() []byte { + return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg)) +} + +func (msg MsgInstantiateContract2) GetSigners() []sdk.AccAddress { + senderAddr, err := sdk.AccAddressFromBech32(msg.Sender) + if err != nil { // should never happen as valid basic rejects invalid addresses + panic(err.Error()) + } + return []sdk.AccAddress{senderAddr} +} diff --git a/x/wasm/types/tx.pb.go b/x/wasm/types/tx.pb.go index 52d5098de4..cf90465b69 100644 --- a/x/wasm/types/tx.pb.go +++ b/x/wasm/types/tx.pb.go @@ -184,11 +184,71 @@ func (m *MsgInstantiateContract) XXX_DiscardUnknown() { var xxx_messageInfo_MsgInstantiateContract proto.InternalMessageInfo +// MsgInstantiateContract2 create a new smart contract instance for the given +// code id with a predicable address. +type MsgInstantiateContract2 struct { + // Sender is the that actor that signed the messages + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + // Admin is an optional address that can execute migrations + Admin string `protobuf:"bytes,2,opt,name=admin,proto3" json:"admin,omitempty"` + // CodeID is the reference to the stored WASM code + CodeID uint64 `protobuf:"varint,3,opt,name=code_id,json=codeId,proto3" json:"code_id,omitempty"` + // Label is optional metadata to be stored with a contract instance. + Label string `protobuf:"bytes,4,opt,name=label,proto3" json:"label,omitempty"` + // Msg json encoded message to be passed to the contract on instantiation + Msg RawContractMessage `protobuf:"bytes,5,opt,name=msg,proto3,casttype=RawContractMessage" json:"msg,omitempty"` + // Funds coins that are transferred to the contract on instantiation + Funds github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,6,rep,name=funds,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"funds"` + // Salt is an arbitrary value provided by the sender. Size can be 1 to 64. + Salt []byte `protobuf:"bytes,7,opt,name=salt,proto3" json:"salt,omitempty"` + // FixMsg include the msg value into the hash for the predictable address. + // Default is false + FixMsg bool `protobuf:"varint,8,opt,name=fix_msg,json=fixMsg,proto3" json:"fix_msg,omitempty"` +} + +func (m *MsgInstantiateContract2) Reset() { *m = MsgInstantiateContract2{} } +func (m *MsgInstantiateContract2) String() string { return proto.CompactTextString(m) } +func (*MsgInstantiateContract2) ProtoMessage() {} +func (*MsgInstantiateContract2) Descriptor() ([]byte, []int) { + return fileDescriptor_4f74d82755520264, []int{3} +} + +func (m *MsgInstantiateContract2) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} + +func (m *MsgInstantiateContract2) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgInstantiateContract2.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} + +func (m *MsgInstantiateContract2) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgInstantiateContract2.Merge(m, src) +} + +func (m *MsgInstantiateContract2) XXX_Size() int { + return m.Size() +} + +func (m *MsgInstantiateContract2) XXX_DiscardUnknown() { + xxx_messageInfo_MsgInstantiateContract2.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgInstantiateContract2 proto.InternalMessageInfo + // MsgInstantiateContractResponse return instantiation result data type MsgInstantiateContractResponse struct { // Address is the bech32 address of the new contract instance. Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - // Data contains base64-encoded bytes to returned from the contract + // Data contains bytes to returned from the contract Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` } @@ -196,7 +256,7 @@ func (m *MsgInstantiateContractResponse) Reset() { *m = MsgInstantiateCo func (m *MsgInstantiateContractResponse) String() string { return proto.CompactTextString(m) } func (*MsgInstantiateContractResponse) ProtoMessage() {} func (*MsgInstantiateContractResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_4f74d82755520264, []int{3} + return fileDescriptor_4f74d82755520264, []int{4} } func (m *MsgInstantiateContractResponse) XXX_Unmarshal(b []byte) error { @@ -230,6 +290,52 @@ func (m *MsgInstantiateContractResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgInstantiateContractResponse proto.InternalMessageInfo +// MsgInstantiateContract2Response return instantiation result data +type MsgInstantiateContract2Response struct { + // Address is the bech32 address of the new contract instance. + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + // Data contains bytes to returned from the contract + Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` +} + +func (m *MsgInstantiateContract2Response) Reset() { *m = MsgInstantiateContract2Response{} } +func (m *MsgInstantiateContract2Response) String() string { return proto.CompactTextString(m) } +func (*MsgInstantiateContract2Response) ProtoMessage() {} +func (*MsgInstantiateContract2Response) Descriptor() ([]byte, []int) { + return fileDescriptor_4f74d82755520264, []int{5} +} + +func (m *MsgInstantiateContract2Response) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} + +func (m *MsgInstantiateContract2Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgInstantiateContract2Response.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} + +func (m *MsgInstantiateContract2Response) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgInstantiateContract2Response.Merge(m, src) +} + +func (m *MsgInstantiateContract2Response) XXX_Size() int { + return m.Size() +} + +func (m *MsgInstantiateContract2Response) XXX_DiscardUnknown() { + xxx_messageInfo_MsgInstantiateContract2Response.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgInstantiateContract2Response proto.InternalMessageInfo + // MsgExecuteContract submits the given message data to a smart contract type MsgExecuteContract struct { // Sender is the that actor that signed the messages @@ -246,7 +352,7 @@ func (m *MsgExecuteContract) Reset() { *m = MsgExecuteContract{} } func (m *MsgExecuteContract) String() string { return proto.CompactTextString(m) } func (*MsgExecuteContract) ProtoMessage() {} func (*MsgExecuteContract) Descriptor() ([]byte, []int) { - return fileDescriptor_4f74d82755520264, []int{4} + return fileDescriptor_4f74d82755520264, []int{6} } func (m *MsgExecuteContract) XXX_Unmarshal(b []byte) error { @@ -282,7 +388,7 @@ var xxx_messageInfo_MsgExecuteContract proto.InternalMessageInfo // MsgExecuteContractResponse returns execution result data. type MsgExecuteContractResponse struct { - // Data contains base64-encoded bytes to returned from the contract + // Data contains bytes to returned from the contract Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` } @@ -290,7 +396,7 @@ func (m *MsgExecuteContractResponse) Reset() { *m = MsgExecuteContractRe func (m *MsgExecuteContractResponse) String() string { return proto.CompactTextString(m) } func (*MsgExecuteContractResponse) ProtoMessage() {} func (*MsgExecuteContractResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_4f74d82755520264, []int{5} + return fileDescriptor_4f74d82755520264, []int{7} } func (m *MsgExecuteContractResponse) XXX_Unmarshal(b []byte) error { @@ -340,7 +446,7 @@ func (m *MsgMigrateContract) Reset() { *m = MsgMigrateContract{} } func (m *MsgMigrateContract) String() string { return proto.CompactTextString(m) } func (*MsgMigrateContract) ProtoMessage() {} func (*MsgMigrateContract) Descriptor() ([]byte, []int) { - return fileDescriptor_4f74d82755520264, []int{6} + return fileDescriptor_4f74d82755520264, []int{8} } func (m *MsgMigrateContract) XXX_Unmarshal(b []byte) error { @@ -385,7 +491,7 @@ func (m *MsgMigrateContractResponse) Reset() { *m = MsgMigrateContractRe func (m *MsgMigrateContractResponse) String() string { return proto.CompactTextString(m) } func (*MsgMigrateContractResponse) ProtoMessage() {} func (*MsgMigrateContractResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_4f74d82755520264, []int{7} + return fileDescriptor_4f74d82755520264, []int{9} } func (m *MsgMigrateContractResponse) XXX_Unmarshal(b []byte) error { @@ -433,7 +539,7 @@ func (m *MsgUpdateAdmin) Reset() { *m = MsgUpdateAdmin{} } func (m *MsgUpdateAdmin) String() string { return proto.CompactTextString(m) } func (*MsgUpdateAdmin) ProtoMessage() {} func (*MsgUpdateAdmin) Descriptor() ([]byte, []int) { - return fileDescriptor_4f74d82755520264, []int{8} + return fileDescriptor_4f74d82755520264, []int{10} } func (m *MsgUpdateAdmin) XXX_Unmarshal(b []byte) error { @@ -474,7 +580,7 @@ func (m *MsgUpdateAdminResponse) Reset() { *m = MsgUpdateAdminResponse{} func (m *MsgUpdateAdminResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateAdminResponse) ProtoMessage() {} func (*MsgUpdateAdminResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_4f74d82755520264, []int{9} + return fileDescriptor_4f74d82755520264, []int{11} } func (m *MsgUpdateAdminResponse) XXX_Unmarshal(b []byte) error { @@ -520,7 +626,7 @@ func (m *MsgClearAdmin) Reset() { *m = MsgClearAdmin{} } func (m *MsgClearAdmin) String() string { return proto.CompactTextString(m) } func (*MsgClearAdmin) ProtoMessage() {} func (*MsgClearAdmin) Descriptor() ([]byte, []int) { - return fileDescriptor_4f74d82755520264, []int{10} + return fileDescriptor_4f74d82755520264, []int{12} } func (m *MsgClearAdmin) XXX_Unmarshal(b []byte) error { @@ -561,7 +667,7 @@ func (m *MsgClearAdminResponse) Reset() { *m = MsgClearAdminResponse{} } func (m *MsgClearAdminResponse) String() string { return proto.CompactTextString(m) } func (*MsgClearAdminResponse) ProtoMessage() {} func (*MsgClearAdminResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_4f74d82755520264, []int{11} + return fileDescriptor_4f74d82755520264, []int{13} } func (m *MsgClearAdminResponse) XXX_Unmarshal(b []byte) error { @@ -599,7 +705,9 @@ func init() { proto.RegisterType((*MsgStoreCode)(nil), "cosmwasm.wasm.v1.MsgStoreCode") proto.RegisterType((*MsgStoreCodeResponse)(nil), "cosmwasm.wasm.v1.MsgStoreCodeResponse") proto.RegisterType((*MsgInstantiateContract)(nil), "cosmwasm.wasm.v1.MsgInstantiateContract") + proto.RegisterType((*MsgInstantiateContract2)(nil), "cosmwasm.wasm.v1.MsgInstantiateContract2") proto.RegisterType((*MsgInstantiateContractResponse)(nil), "cosmwasm.wasm.v1.MsgInstantiateContractResponse") + proto.RegisterType((*MsgInstantiateContract2Response)(nil), "cosmwasm.wasm.v1.MsgInstantiateContract2Response") proto.RegisterType((*MsgExecuteContract)(nil), "cosmwasm.wasm.v1.MsgExecuteContract") proto.RegisterType((*MsgExecuteContractResponse)(nil), "cosmwasm.wasm.v1.MsgExecuteContractResponse") proto.RegisterType((*MsgMigrateContract)(nil), "cosmwasm.wasm.v1.MsgMigrateContract") @@ -613,55 +721,60 @@ func init() { func init() { proto.RegisterFile("cosmwasm/wasm/v1/tx.proto", fileDescriptor_4f74d82755520264) } var fileDescriptor_4f74d82755520264 = []byte{ - // 766 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xcb, 0x6e, 0xd3, 0x40, - 0x14, 0x8d, 0x1b, 0x27, 0x4d, 0x6e, 0x43, 0x89, 0x4c, 0x1a, 0x52, 0x83, 0x9c, 0x28, 0xa0, 0xe2, - 0x05, 0xd8, 0x4d, 0x91, 0xd8, 0x37, 0x29, 0x8b, 0x56, 0x32, 0x42, 0xae, 0x4a, 0x05, 0x9b, 0x68, - 0x62, 0x4f, 0x5d, 0xab, 0xb5, 0x27, 0x78, 0x9c, 0xa6, 0xfd, 0x09, 0xc4, 0x8e, 0x7f, 0xe0, 0x2f, - 0xd8, 0x75, 0x85, 0xba, 0x41, 0x62, 0x15, 0x20, 0xfd, 0x0b, 0x56, 0xc8, 0xcf, 0xba, 0xa9, 0x93, - 0x06, 0x21, 0x36, 0xce, 0xdc, 0x99, 0x73, 0x5f, 0x27, 0x67, 0xee, 0xc0, 0xaa, 0x46, 0xa8, 0x35, - 0x44, 0xd4, 0x92, 0xfd, 0xcf, 0x49, 0x4b, 0x76, 0x4f, 0xa5, 0xbe, 0x43, 0x5c, 0xc2, 0x95, 0xa3, - 0x23, 0xc9, 0xff, 0x9c, 0xb4, 0x78, 0xc1, 0xdb, 0x21, 0x54, 0xee, 0x21, 0x8a, 0xe5, 0x93, 0x56, - 0x0f, 0xbb, 0xa8, 0x25, 0x6b, 0xc4, 0xb4, 0x03, 0x0f, 0xbe, 0x62, 0x10, 0x83, 0xf8, 0x4b, 0xd9, - 0x5b, 0x85, 0xbb, 0x0f, 0x6f, 0xa6, 0x38, 0xeb, 0x63, 0x1a, 0x9c, 0x36, 0xbf, 0x30, 0x50, 0x52, - 0xa8, 0xb1, 0xeb, 0x12, 0x07, 0x77, 0x88, 0x8e, 0xb9, 0x2a, 0xe4, 0x29, 0xb6, 0x75, 0xec, 0xd4, - 0x98, 0x06, 0x23, 0x16, 0xd5, 0xd0, 0xe2, 0x5e, 0xc0, 0xb2, 0xe7, 0xdf, 0xed, 0x9d, 0xb9, 0xb8, - 0xab, 0x11, 0x1d, 0xd7, 0x16, 0x1a, 0x8c, 0x58, 0x6a, 0x97, 0xc7, 0xa3, 0x7a, 0x69, 0x7f, 0x73, - 0x57, 0x69, 0x9f, 0xb9, 0x7e, 0x04, 0xb5, 0xe4, 0xe1, 0x22, 0x8b, 0xdb, 0x83, 0xaa, 0x69, 0x53, - 0x17, 0xd9, 0xae, 0x89, 0x5c, 0xdc, 0xed, 0x63, 0xc7, 0x32, 0x29, 0x35, 0x89, 0x5d, 0xcb, 0x35, - 0x18, 0x71, 0x69, 0x43, 0x90, 0x26, 0xfb, 0x94, 0x36, 0x35, 0x0d, 0x53, 0xda, 0x21, 0xf6, 0x81, - 0x69, 0xa8, 0x2b, 0x09, 0xef, 0xd7, 0xb1, 0xf3, 0x0e, 0x5b, 0xc8, 0x96, 0xd9, 0x1d, 0xb6, 0xc0, - 0x96, 0x73, 0xcd, 0x7d, 0xa8, 0x24, 0x5b, 0x50, 0x31, 0xed, 0x13, 0x9b, 0x62, 0xee, 0x11, 0x2c, - 0x7a, 0x85, 0x76, 0x4d, 0xdd, 0xef, 0x85, 0x6d, 0xc3, 0x78, 0x54, 0xcf, 0x7b, 0x90, 0xed, 0x2d, - 0x35, 0xef, 0x1d, 0x6d, 0xeb, 0x1c, 0x0f, 0x05, 0xed, 0x10, 0x6b, 0x47, 0x74, 0x60, 0x05, 0x1d, - 0xa9, 0xb1, 0xdd, 0xfc, 0xb0, 0x00, 0x55, 0x85, 0x1a, 0xdb, 0x57, 0x15, 0x74, 0x88, 0xed, 0x3a, - 0x48, 0x73, 0xa7, 0xd2, 0x54, 0x81, 0x1c, 0xd2, 0x2d, 0xd3, 0xf6, 0x63, 0x15, 0xd5, 0xc0, 0x48, - 0x56, 0x92, 0x9d, 0x5a, 0x49, 0x05, 0x72, 0xc7, 0xa8, 0x87, 0x8f, 0x6b, 0x6c, 0xe0, 0xea, 0x1b, - 0x9c, 0x08, 0x59, 0x8b, 0x1a, 0x3e, 0x59, 0xa5, 0x76, 0xf5, 0xf7, 0xa8, 0xce, 0xa9, 0x68, 0x18, - 0x95, 0xa1, 0x60, 0x4a, 0x91, 0x81, 0x55, 0x0f, 0xc2, 0x21, 0xc8, 0x1d, 0x0c, 0x6c, 0x9d, 0xd6, - 0xf2, 0x8d, 0xac, 0xb8, 0xb4, 0xb1, 0x2a, 0x05, 0x72, 0x91, 0x3c, 0xb9, 0x48, 0xa1, 0x5c, 0xa4, - 0x0e, 0x31, 0xed, 0xf6, 0xfa, 0xf9, 0xa8, 0x9e, 0xf9, 0xfc, 0xa3, 0x2e, 0x1a, 0xa6, 0x7b, 0x38, - 0xe8, 0x49, 0x1a, 0xb1, 0xe4, 0x50, 0x5b, 0xc1, 0xcf, 0x33, 0xaa, 0x1f, 0x85, 0x32, 0xf1, 0x1c, - 0xa8, 0x1a, 0x44, 0x6e, 0xbe, 0x02, 0x21, 0x9d, 0x8f, 0x98, 0xf3, 0x1a, 0x2c, 0x22, 0x5d, 0x77, - 0x30, 0xa5, 0x21, 0x31, 0x91, 0xc9, 0x71, 0xc0, 0xea, 0xc8, 0x45, 0x21, 0xc9, 0xfe, 0xba, 0xf9, - 0x8d, 0x01, 0x4e, 0xa1, 0xc6, 0xcb, 0x53, 0xac, 0x0d, 0xe6, 0x20, 0xd7, 0xfb, 0xaf, 0x42, 0x4c, - 0xc8, 0x6f, 0x6c, 0x47, 0x3c, 0x65, 0xff, 0x82, 0xa7, 0xdc, 0x7f, 0xe3, 0x69, 0x1d, 0xf8, 0x9b, - 0x6d, 0xc5, 0x1c, 0x45, 0x4c, 0x30, 0x09, 0x26, 0x3e, 0x05, 0x4c, 0x28, 0xa6, 0xe1, 0xa0, 0x7f, - 0x64, 0x62, 0x2e, 0xb1, 0x85, 0x74, 0xb1, 0xb7, 0xd2, 0x15, 0xf6, 0x32, 0x51, 0xd8, 0xcc, 0x5e, - 0x10, 0x2c, 0x2b, 0xd4, 0xd8, 0xeb, 0xeb, 0xc8, 0xc5, 0x9b, 0xbe, 0xfe, 0xa7, 0xb5, 0xf1, 0x00, - 0x8a, 0x36, 0x1e, 0x76, 0x93, 0x37, 0xa6, 0x60, 0xe3, 0x61, 0xe0, 0x94, 0xec, 0x31, 0x7b, 0xbd, - 0xc7, 0x66, 0xcd, 0xbf, 0x98, 0x89, 0x14, 0x51, 0x41, 0xcd, 0x0e, 0xdc, 0x51, 0xa8, 0xd1, 0x39, - 0xc6, 0xc8, 0x99, 0x9d, 0x7b, 0x56, 0xf8, 0xfb, 0xb0, 0x72, 0x2d, 0x48, 0x14, 0x7d, 0xe3, 0x2b, - 0x0b, 0x59, 0x85, 0x1a, 0xdc, 0x2e, 0x14, 0xaf, 0x46, 0x66, 0xca, 0x08, 0x4b, 0xce, 0x23, 0x7e, - 0x6d, 0xf6, 0x79, 0xcc, 0xe5, 0x7b, 0xb8, 0x97, 0x36, 0x6a, 0xc4, 0x54, 0xf7, 0x14, 0x24, 0xbf, - 0x3e, 0x2f, 0x32, 0x4e, 0x89, 0xe1, 0xee, 0xe4, 0xe5, 0x7b, 0x9c, 0x1a, 0x64, 0x02, 0xc5, 0x3f, - 0x9d, 0x07, 0x95, 0x4c, 0x33, 0xa9, 0xec, 0xf4, 0x34, 0x13, 0xa8, 0x29, 0x69, 0xa6, 0x89, 0xf1, - 0x2d, 0x2c, 0x25, 0x55, 0xd7, 0x48, 0x75, 0x4e, 0x20, 0x78, 0xf1, 0x36, 0x44, 0x1c, 0xfa, 0x0d, - 0x40, 0x42, 0x53, 0xf5, 0x54, 0xbf, 0x2b, 0x00, 0xff, 0xe4, 0x16, 0x40, 0x14, 0xb7, 0xbd, 0x75, - 0xfe, 0x4b, 0xc8, 0x9c, 0x8f, 0x05, 0xe6, 0x62, 0x2c, 0x30, 0x3f, 0xc7, 0x02, 0xf3, 0xf1, 0x52, - 0xc8, 0x5c, 0x5c, 0x0a, 0x99, 0xef, 0x97, 0x42, 0xe6, 0xdd, 0x5a, 0x62, 0xf0, 0x74, 0x08, 0xb5, - 0xf6, 0xa3, 0x67, 0x5c, 0x97, 0x4f, 0x83, 0xe7, 0xdc, 0x1f, 0x3e, 0xbd, 0xbc, 0xff, 0x98, 0x3f, - 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0xef, 0x6b, 0xa0, 0xa3, 0x4f, 0x08, 0x00, 0x00, + // 840 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x56, 0x4d, 0x6f, 0xe3, 0x44, + 0x18, 0x8e, 0x1b, 0xe7, 0xeb, 0x6d, 0x58, 0x22, 0x93, 0x4d, 0xbd, 0x06, 0x39, 0x91, 0x41, 0x8b, + 0x91, 0xc0, 0x6e, 0x82, 0xc4, 0xbd, 0xc9, 0x72, 0xe8, 0x4a, 0x06, 0xe4, 0x6a, 0xa9, 0xe0, 0x12, + 0x4d, 0xec, 0x89, 0xd7, 0xda, 0xd8, 0x13, 0x3c, 0x93, 0x26, 0xfd, 0x13, 0x88, 0x1b, 0xff, 0x81, + 0xdf, 0xc0, 0x05, 0x89, 0x43, 0x8f, 0x7b, 0x41, 0xe2, 0x14, 0x20, 0xfd, 0x17, 0x9c, 0x90, 0x3f, + 0xeb, 0xcd, 0x3a, 0x69, 0x00, 0x71, 0xe2, 0x92, 0xcc, 0xeb, 0x79, 0xde, 0xaf, 0x67, 0x9e, 0x77, + 0x6c, 0x78, 0x64, 0x11, 0xea, 0x2d, 0x11, 0xf5, 0xf4, 0xe8, 0xe7, 0xaa, 0xaf, 0xb3, 0x95, 0x36, + 0x0f, 0x08, 0x23, 0x42, 0x2b, 0xdd, 0xd2, 0xa2, 0x9f, 0xab, 0xbe, 0x24, 0x87, 0x4f, 0x08, 0xd5, + 0x27, 0x88, 0x62, 0xfd, 0xaa, 0x3f, 0xc1, 0x0c, 0xf5, 0x75, 0x8b, 0xb8, 0x7e, 0xec, 0x21, 0xb5, + 0x1d, 0xe2, 0x90, 0x68, 0xa9, 0x87, 0xab, 0xe4, 0xe9, 0x3b, 0xaf, 0xa7, 0xb8, 0x9e, 0x63, 0x1a, + 0xef, 0x2a, 0x3f, 0x71, 0xd0, 0x34, 0xa8, 0x73, 0xc1, 0x48, 0x80, 0x47, 0xc4, 0xc6, 0x42, 0x07, + 0xaa, 0x14, 0xfb, 0x36, 0x0e, 0x44, 0xae, 0xc7, 0xa9, 0x0d, 0x33, 0xb1, 0x84, 0x4f, 0xe0, 0x41, + 0xe8, 0x3f, 0x9e, 0x5c, 0x33, 0x3c, 0xb6, 0x88, 0x8d, 0xc5, 0xa3, 0x1e, 0xa7, 0x36, 0x87, 0xad, + 0xcd, 0xba, 0xdb, 0xbc, 0x3c, 0xbb, 0x30, 0x86, 0xd7, 0x2c, 0x8a, 0x60, 0x36, 0x43, 0x5c, 0x6a, + 0x09, 0xcf, 0xa0, 0xe3, 0xfa, 0x94, 0x21, 0x9f, 0xb9, 0x88, 0xe1, 0xf1, 0x1c, 0x07, 0x9e, 0x4b, + 0xa9, 0x4b, 0x7c, 0xb1, 0xd2, 0xe3, 0xd4, 0xe3, 0x81, 0xac, 0x6d, 0xf7, 0xa9, 0x9d, 0x59, 0x16, + 0xa6, 0x74, 0x44, 0xfc, 0xa9, 0xeb, 0x98, 0x0f, 0x73, 0xde, 0x5f, 0x64, 0xce, 0x4f, 0xf9, 0x7a, + 0xb9, 0xc5, 0x3f, 0xe5, 0xeb, 0x7c, 0xab, 0xa2, 0x5c, 0x42, 0x3b, 0xdf, 0x82, 0x89, 0xe9, 0x9c, + 0xf8, 0x14, 0x0b, 0xef, 0x42, 0x2d, 0x2c, 0x74, 0xec, 0xda, 0x51, 0x2f, 0xfc, 0x10, 0x36, 0xeb, + 0x6e, 0x35, 0x84, 0x9c, 0x3f, 0x31, 0xab, 0xe1, 0xd6, 0xb9, 0x2d, 0x48, 0x50, 0xb7, 0x9e, 0x63, + 0xeb, 0x05, 0x5d, 0x78, 0x71, 0x47, 0x66, 0x66, 0x2b, 0xdf, 0x1e, 0x41, 0xc7, 0xa0, 0xce, 0xf9, + 0x5d, 0x05, 0x23, 0xe2, 0xb3, 0x00, 0x59, 0x6c, 0x27, 0x4d, 0x6d, 0xa8, 0x20, 0xdb, 0x73, 0xfd, + 0x28, 0x56, 0xc3, 0x8c, 0x8d, 0x7c, 0x25, 0xe5, 0x9d, 0x95, 0xb4, 0xa1, 0x32, 0x43, 0x13, 0x3c, + 0x13, 0xf9, 0xd8, 0x35, 0x32, 0x04, 0x15, 0xca, 0x1e, 0x75, 0x22, 0xb2, 0x9a, 0xc3, 0xce, 0x9f, + 0xeb, 0xae, 0x60, 0xa2, 0x65, 0x5a, 0x86, 0x81, 0x29, 0x45, 0x0e, 0x36, 0x43, 0x88, 0x80, 0xa0, + 0x32, 0x5d, 0xf8, 0x36, 0x15, 0xab, 0xbd, 0xb2, 0x7a, 0x3c, 0x78, 0xa4, 0xc5, 0x72, 0xd1, 0x42, + 0xb9, 0x68, 0x89, 0x5c, 0xb4, 0x11, 0x71, 0xfd, 0xe1, 0xe9, 0xcd, 0xba, 0x5b, 0xfa, 0xe1, 0xb7, + 0xae, 0xea, 0xb8, 0xec, 0xf9, 0x62, 0xa2, 0x59, 0xc4, 0xd3, 0x13, 0x6d, 0xc5, 0x7f, 0x1f, 0x51, + 0xfb, 0x45, 0x22, 0x93, 0xd0, 0x81, 0x9a, 0x71, 0x64, 0xe5, 0xc7, 0x23, 0x38, 0x29, 0x26, 0x64, + 0xf0, 0xff, 0x64, 0x44, 0x10, 0x80, 0xa7, 0x68, 0xc6, 0xc4, 0x5a, 0x24, 0x9d, 0x68, 0x2d, 0x9c, + 0x40, 0x6d, 0xea, 0xae, 0xc6, 0x61, 0x91, 0xf5, 0x1e, 0xa7, 0xd6, 0xcd, 0xea, 0xd4, 0x5d, 0x19, + 0xd4, 0x51, 0x3e, 0x03, 0xb9, 0x98, 0xbd, 0x4c, 0xb2, 0x22, 0xd4, 0x90, 0x6d, 0x07, 0x98, 0xd2, + 0x84, 0xc5, 0xd4, 0x0c, 0x13, 0xd9, 0x88, 0xa1, 0x44, 0xa3, 0xd1, 0x5a, 0xf9, 0x1c, 0xba, 0x3b, + 0x4e, 0xe3, 0x1f, 0x06, 0xfc, 0x85, 0x03, 0xc1, 0xa0, 0xce, 0xa7, 0x2b, 0x6c, 0x2d, 0x0e, 0x10, + 0x7b, 0x38, 0x3b, 0x09, 0x26, 0x39, 0xdd, 0xcc, 0x4e, 0x4f, 0xa9, 0xfc, 0x37, 0x4e, 0xa9, 0xf2, + 0x9f, 0xe9, 0xf6, 0x14, 0xa4, 0xd7, 0xdb, 0xca, 0x38, 0x4a, 0x99, 0xe0, 0x72, 0x4c, 0x7c, 0x1f, + 0x33, 0x61, 0xb8, 0x4e, 0x80, 0xfe, 0x25, 0x13, 0x07, 0x49, 0x3d, 0xa1, 0x8b, 0xbf, 0x97, 0xae, + 0xa4, 0x97, 0xad, 0xc2, 0xf6, 0xf6, 0x82, 0xe0, 0x81, 0x41, 0x9d, 0x67, 0x73, 0x1b, 0x31, 0x7c, + 0x16, 0x4d, 0xdf, 0xae, 0x36, 0xde, 0x86, 0x86, 0x8f, 0x97, 0xe3, 0xfc, 0xbc, 0xd6, 0x7d, 0xbc, + 0x8c, 0x9d, 0xf2, 0x3d, 0x96, 0x5f, 0xed, 0x51, 0x11, 0xa3, 0x8b, 0x32, 0x97, 0x22, 0x2d, 0x48, + 0x19, 0xc1, 0x1b, 0x06, 0x75, 0x46, 0x33, 0x8c, 0x82, 0xfd, 0xb9, 0xf7, 0x85, 0x3f, 0x81, 0x87, + 0xaf, 0x04, 0x49, 0xa3, 0x0f, 0x7e, 0xae, 0x40, 0xd9, 0xa0, 0x8e, 0x70, 0x01, 0x8d, 0xbb, 0x57, + 0x58, 0xc1, 0x2b, 0x25, 0xff, 0x7e, 0x90, 0x1e, 0xef, 0xdf, 0xcf, 0xb8, 0xfc, 0x06, 0xde, 0x2a, + 0xba, 0xfa, 0xd5, 0x42, 0xf7, 0x02, 0xa4, 0x74, 0x7a, 0x28, 0x32, 0x4b, 0xc9, 0xa0, 0x5d, 0x78, + 0xb9, 0x7e, 0x70, 0x68, 0xa4, 0x81, 0xd4, 0x3f, 0x18, 0x9a, 0x65, 0xc5, 0xf0, 0xe6, 0xf6, 0xc8, + 0xbf, 0x57, 0x18, 0x65, 0x0b, 0x25, 0x7d, 0x78, 0x08, 0x2a, 0x9f, 0x66, 0x7b, 0x9e, 0x8a, 0xd3, + 0x6c, 0xa1, 0x76, 0xa4, 0xd9, 0x35, 0x02, 0x5f, 0xc1, 0x71, 0x5e, 0xeb, 0xbd, 0x42, 0xe7, 0x1c, + 0x42, 0x52, 0xef, 0x43, 0x64, 0xa1, 0xbf, 0x04, 0xc8, 0x29, 0xb9, 0x5b, 0xe8, 0x77, 0x07, 0x90, + 0xde, 0xbf, 0x07, 0x90, 0xc6, 0x1d, 0x3e, 0xb9, 0xf9, 0x43, 0x2e, 0xdd, 0x6c, 0x64, 0xee, 0xe5, + 0x46, 0xe6, 0x7e, 0xdf, 0xc8, 0xdc, 0x77, 0xb7, 0x72, 0xe9, 0xe5, 0xad, 0x5c, 0xfa, 0xf5, 0x56, + 0x2e, 0x7d, 0xfd, 0x38, 0x77, 0xdd, 0x8d, 0x08, 0xf5, 0x2e, 0xd3, 0x8f, 0x39, 0x5b, 0x5f, 0xc5, + 0x1f, 0x75, 0xd1, 0x95, 0x37, 0xa9, 0x46, 0x9f, 0x74, 0x1f, 0xff, 0x15, 0x00, 0x00, 0xff, 0xff, + 0x1a, 0x2c, 0xa2, 0xcd, 0x55, 0x0a, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -678,8 +791,12 @@ const _ = grpc.SupportPackageIsVersion4 type MsgClient interface { // StoreCode to submit Wasm code to the system StoreCode(ctx context.Context, in *MsgStoreCode, opts ...grpc.CallOption) (*MsgStoreCodeResponse, error) - // Instantiate creates a new smart contract instance for the given code id. + // InstantiateContract creates a new smart contract instance for the given + // code id. InstantiateContract(ctx context.Context, in *MsgInstantiateContract, opts ...grpc.CallOption) (*MsgInstantiateContractResponse, error) + // InstantiateContract2 creates a new smart contract instance for the given + // code id with a predictable address + InstantiateContract2(ctx context.Context, in *MsgInstantiateContract2, opts ...grpc.CallOption) (*MsgInstantiateContract2Response, error) // Execute submits the given message data to a smart contract ExecuteContract(ctx context.Context, in *MsgExecuteContract, opts ...grpc.CallOption) (*MsgExecuteContractResponse, error) // Migrate runs a code upgrade/ downgrade for a smart contract @@ -716,6 +833,15 @@ func (c *msgClient) InstantiateContract(ctx context.Context, in *MsgInstantiateC return out, nil } +func (c *msgClient) InstantiateContract2(ctx context.Context, in *MsgInstantiateContract2, opts ...grpc.CallOption) (*MsgInstantiateContract2Response, error) { + out := new(MsgInstantiateContract2Response) + err := c.cc.Invoke(ctx, "/cosmwasm.wasm.v1.Msg/InstantiateContract2", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *msgClient) ExecuteContract(ctx context.Context, in *MsgExecuteContract, opts ...grpc.CallOption) (*MsgExecuteContractResponse, error) { out := new(MsgExecuteContractResponse) err := c.cc.Invoke(ctx, "/cosmwasm.wasm.v1.Msg/ExecuteContract", in, out, opts...) @@ -756,8 +882,12 @@ func (c *msgClient) ClearAdmin(ctx context.Context, in *MsgClearAdmin, opts ...g type MsgServer interface { // StoreCode to submit Wasm code to the system StoreCode(context.Context, *MsgStoreCode) (*MsgStoreCodeResponse, error) - // Instantiate creates a new smart contract instance for the given code id. + // InstantiateContract creates a new smart contract instance for the given + // code id. InstantiateContract(context.Context, *MsgInstantiateContract) (*MsgInstantiateContractResponse, error) + // InstantiateContract2 creates a new smart contract instance for the given + // code id with a predictable address + InstantiateContract2(context.Context, *MsgInstantiateContract2) (*MsgInstantiateContract2Response, error) // Execute submits the given message data to a smart contract ExecuteContract(context.Context, *MsgExecuteContract) (*MsgExecuteContractResponse, error) // Migrate runs a code upgrade/ downgrade for a smart contract @@ -779,6 +909,10 @@ func (*UnimplementedMsgServer) InstantiateContract(ctx context.Context, req *Msg return nil, status.Errorf(codes.Unimplemented, "method InstantiateContract not implemented") } +func (*UnimplementedMsgServer) InstantiateContract2(ctx context.Context, req *MsgInstantiateContract2) (*MsgInstantiateContract2Response, error) { + return nil, status.Errorf(codes.Unimplemented, "method InstantiateContract2 not implemented") +} + func (*UnimplementedMsgServer) ExecuteContract(ctx context.Context, req *MsgExecuteContract) (*MsgExecuteContractResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ExecuteContract not implemented") } @@ -835,6 +969,24 @@ func _Msg_InstantiateContract_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } +func _Msg_InstantiateContract2_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgInstantiateContract2) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).InstantiateContract2(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmwasm.wasm.v1.Msg/InstantiateContract2", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).InstantiateContract2(ctx, req.(*MsgInstantiateContract2)) + } + return interceptor(ctx, in, info, handler) +} + func _Msg_ExecuteContract_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MsgExecuteContract) if err := dec(in); err != nil { @@ -919,6 +1071,10 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "InstantiateContract", Handler: _Msg_InstantiateContract_Handler, }, + { + MethodName: "InstantiateContract2", + Handler: _Msg_InstantiateContract2_Handler, + }, { MethodName: "ExecuteContract", Handler: _Msg_ExecuteContract_Handler, @@ -1094,6 +1250,93 @@ func (m *MsgInstantiateContract) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } +func (m *MsgInstantiateContract2) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgInstantiateContract2) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgInstantiateContract2) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.FixMsg { + i-- + if m.FixMsg { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x40 + } + if len(m.Salt) > 0 { + i -= len(m.Salt) + copy(dAtA[i:], m.Salt) + i = encodeVarintTx(dAtA, i, uint64(len(m.Salt))) + i-- + dAtA[i] = 0x3a + } + if len(m.Funds) > 0 { + for iNdEx := len(m.Funds) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Funds[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + } + if len(m.Msg) > 0 { + i -= len(m.Msg) + copy(dAtA[i:], m.Msg) + i = encodeVarintTx(dAtA, i, uint64(len(m.Msg))) + i-- + dAtA[i] = 0x2a + } + if len(m.Label) > 0 { + i -= len(m.Label) + copy(dAtA[i:], m.Label) + i = encodeVarintTx(dAtA, i, uint64(len(m.Label))) + i-- + dAtA[i] = 0x22 + } + if m.CodeID != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.CodeID)) + i-- + dAtA[i] = 0x18 + } + if len(m.Admin) > 0 { + i -= len(m.Admin) + copy(dAtA[i:], m.Admin) + i = encodeVarintTx(dAtA, i, uint64(len(m.Admin))) + i-- + dAtA[i] = 0x12 + } + if len(m.Sender) > 0 { + i -= len(m.Sender) + copy(dAtA[i:], m.Sender) + i = encodeVarintTx(dAtA, i, uint64(len(m.Sender))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *MsgInstantiateContractResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1131,6 +1374,43 @@ func (m *MsgInstantiateContractResponse) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } +func (m *MsgInstantiateContract2Response) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgInstantiateContract2Response) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgInstantiateContract2Response) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Data) > 0 { + i -= len(m.Data) + copy(dAtA[i:], m.Data) + i = encodeVarintTx(dAtA, i, uint64(len(m.Data))) + i-- + dAtA[i] = 0x12 + } + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintTx(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *MsgExecuteContract) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1508,34 +1788,24 @@ func (m *MsgInstantiateContract) Size() (n int) { return n } -func (m *MsgInstantiateContractResponse) Size() (n int) { +func (m *MsgInstantiateContract2) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.Address) + l = len(m.Sender) if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.Data) + l = len(m.Admin) if l > 0 { n += 1 + l + sovTx(uint64(l)) } - return n -} - -func (m *MsgExecuteContract) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) + if m.CodeID != 0 { + n += 1 + sovTx(uint64(m.CodeID)) } - l = len(m.Contract) + l = len(m.Label) if l > 0 { n += 1 + l + sovTx(uint64(l)) } @@ -1549,15 +1819,26 @@ func (m *MsgExecuteContract) Size() (n int) { n += 1 + l + sovTx(uint64(l)) } } + l = len(m.Salt) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.FixMsg { + n += 2 + } return n } -func (m *MsgExecuteContractResponse) Size() (n int) { +func (m *MsgInstantiateContractResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } l = len(m.Data) if l > 0 { n += 1 + l + sovTx(uint64(l)) @@ -1565,25 +1846,82 @@ func (m *MsgExecuteContractResponse) Size() (n int) { return n } -func (m *MsgMigrateContract) Size() (n int) { +func (m *MsgInstantiateContract2Response) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.Sender) + l = len(m.Address) if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.Contract) + l = len(m.Data) if l > 0 { n += 1 + l + sovTx(uint64(l)) } - if m.CodeID != 0 { - n += 1 + sovTx(uint64(m.CodeID)) - } - l = len(m.Msg) - if l > 0 { + return n +} + +func (m *MsgExecuteContract) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Contract) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Msg) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if len(m.Funds) > 0 { + for _, e := range m.Funds { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + return n +} + +func (m *MsgExecuteContractResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Data) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgMigrateContract) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Contract) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.CodeID != 0 { + n += 1 + sovTx(uint64(m.CodeID)) + } + l = len(m.Msg) + if l > 0 { n += 1 + l + sovTx(uint64(l)) } return n @@ -2157,6 +2495,294 @@ func (m *MsgInstantiateContract) Unmarshal(dAtA []byte) error { return nil } +func (m *MsgInstantiateContract2) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgInstantiateContract2: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgInstantiateContract2: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Admin", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Admin = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CodeID", wireType) + } + m.CodeID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.CodeID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Label", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Label = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Msg", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Msg = append(m.Msg[:0], dAtA[iNdEx:postIndex]...) + if m.Msg == nil { + m.Msg = []byte{} + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Funds", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Funds = append(m.Funds, types.Coin{}) + if err := m.Funds[len(m.Funds)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Salt", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Salt = append(m.Salt[:0], dAtA[iNdEx:postIndex]...) + if m.Salt == nil { + m.Salt = []byte{} + } + iNdEx = postIndex + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field FixMsg", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.FixMsg = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} + func (m *MsgInstantiateContractResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2274,6 +2900,123 @@ func (m *MsgInstantiateContractResponse) Unmarshal(dAtA []byte) error { return nil } +func (m *MsgInstantiateContract2Response) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgInstantiateContract2Response: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgInstantiateContract2Response: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...) + if m.Data == nil { + m.Data = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} + func (m *MsgExecuteContract) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/wasm/types/tx_test.go b/x/wasm/types/tx_test.go index b59ad7ce40..a3c29b4f8b 100644 --- a/x/wasm/types/tx_test.go +++ b/x/wasm/types/tx_test.go @@ -186,6 +186,142 @@ func TestInstantiateContractValidation(t *testing.T) { } } +func TestInstantiateContract2Validation(t *testing.T) { + bad, err := sdk.AccAddressFromHex("012345") + require.NoError(t, err) + badAddress := bad.String() + // proper address size + goodAddress := sdk.AccAddress(make([]byte, 20)).String() + sdk.GetConfig().SetAddressVerifier(VerifyAddressLen()) + + cases := map[string]struct { + msg MsgInstantiateContract2 + valid bool + }{ + "empty": { + msg: MsgInstantiateContract2{}, + valid: false, + }, + "correct minimal": { + msg: MsgInstantiateContract2{ + Sender: goodAddress, + CodeID: firstCodeID, + Label: "foo", + Msg: []byte("{}"), + Salt: []byte{0}, + }, + valid: true, + }, + "missing code": { + msg: MsgInstantiateContract2{ + Sender: goodAddress, + Label: "foo", + Msg: []byte("{}"), + Salt: []byte{0}, + }, + valid: false, + }, + "missing label": { + msg: MsgInstantiateContract2{ + Sender: goodAddress, + Msg: []byte("{}"), + Salt: []byte{0}, + }, + valid: false, + }, + "label too long": { + msg: MsgInstantiateContract2{ + Sender: goodAddress, + Label: strings.Repeat("food", 33), + Salt: []byte{0}, + }, + valid: false, + }, + "bad sender minimal": { + msg: MsgInstantiateContract2{ + Sender: badAddress, + CodeID: firstCodeID, + Label: "foo", + Msg: []byte("{}"), + Salt: []byte{0}, + }, + valid: false, + }, + "correct maximal": { + msg: MsgInstantiateContract2{ + Sender: goodAddress, + CodeID: firstCodeID, + Label: strings.Repeat("a", MaxLabelSize), + Msg: []byte(`{"some": "data"}`), + Funds: sdk.Coins{sdk.Coin{Denom: "foobar", Amount: sdk.NewInt(200)}}, + Salt: bytes.Repeat([]byte{0}, MaxSaltSize), + FixMsg: true, + }, + valid: true, + }, + "negative funds": { + msg: MsgInstantiateContract2{ + Sender: goodAddress, + CodeID: firstCodeID, + Label: "foo", + Msg: []byte(`{"some": "data"}`), + // we cannot use sdk.NewCoin() constructors as they panic on creating invalid data (before we can test) + Funds: sdk.Coins{sdk.Coin{Denom: "foobar", Amount: sdk.NewInt(-200)}}, + Salt: []byte{0}, + }, + valid: false, + }, + "non json init msg": { + msg: MsgInstantiateContract2{ + Sender: goodAddress, + CodeID: firstCodeID, + Label: "foo", + Msg: []byte("invalid-json"), + Salt: []byte{0}, + }, + valid: false, + }, + "empty init msg": { + msg: MsgInstantiateContract2{ + Sender: goodAddress, + CodeID: firstCodeID, + Label: "foo", + Salt: []byte{0}, + }, + valid: false, + }, + "empty salt": { + msg: MsgInstantiateContract2{ + Sender: goodAddress, + CodeID: firstCodeID, + Label: "foo", + Msg: []byte(`{"some": "data"}`), + }, + valid: false, + }, + "salt too long": { + msg: MsgInstantiateContract2{ + Sender: goodAddress, + CodeID: firstCodeID, + Label: "foo", + Msg: []byte(`{"some": "data"}`), + Salt: bytes.Repeat([]byte{0}, 65), + }, + valid: false, + }, + } + for name, tc := range cases { + t.Run(name, func(t *testing.T) { + err := tc.msg.ValidateBasic() + if tc.valid { + assert.NoError(t, err) + } else { + assert.Error(t, err) + } + }) + } +} + func TestExecuteContractValidation(t *testing.T) { bad, err := sdk.AccAddressFromHex("012345") require.NoError(t, err) diff --git a/x/wasm/types/validation.go b/x/wasm/types/validation.go index 0619c7f082..908c525524 100644 --- a/x/wasm/types/validation.go +++ b/x/wasm/types/validation.go @@ -4,8 +4,11 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) +// MaxSaltSize is the longest salt that can be used when instantiating a contract +const MaxSaltSize = 64 + var ( - // MaxLabelSize is the longest label that can be used when Instantiating a contract + // MaxLabelSize is the longest label that can be used when instantiating a contract MaxLabelSize = 128 // extension point for chains to customize via compile flag. // MaxWasmSize is the largest a compiled contract code can be when storing code on chain @@ -28,7 +31,18 @@ func ValidateLabel(label string) error { return sdkerrors.Wrap(ErrEmpty, "is required") } if len(label) > MaxLabelSize { - return sdkerrors.Wrap(ErrLimit, "cannot be longer than 128 characters") + return ErrLimit.Wrapf("cannot be longer than %d characters", MaxLabelSize) + } + return nil +} + +// ValidateSalt ensure salt constraints +func ValidateSalt(salt []byte) error { + switch n := len(salt); { + case n == 0: + return sdkerrors.Wrap(ErrEmpty, "is required") + case n > MaxSaltSize: + return ErrLimit.Wrapf("cannot be longer than %d characters", MaxSaltSize) } return nil } From a76999a1d7c3ed3570a5f319940667a5e5b61eaf Mon Sep 17 00:00:00 2001 From: Alexander Peters Date: Thu, 22 Sep 2022 18:23:06 +0200 Subject: [PATCH 115/120] Changelog for v0.29.0-rc1 (#1018) * Update changelog * Update CHANGELOG.md Co-authored-by: Simon Warta <2603011+webmaster128@users.noreply.github.com> Co-authored-by: Simon Warta <2603011+webmaster128@users.noreply.github.com> --- CHANGELOG.md | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 52676a23a5..176b032eed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,13 +2,19 @@ ## [Unreleased](https://github.com/CosmWasm/wasmd/tree/HEAD) +[Full Changelog](https://github.com/CosmWasm/wasmd/compare/v0.29.0...HEAD) + +## [v0.29.0-rc1](https://github.com/CosmWasm/wasmd/tree/v0.29.0-rc1) (2022-09-22) + +[Full Changelog](https://github.com/CosmWasm/wasmd/compare/v0.28.0...v0.29.0-rc1) + - Allow AccessConfig to use a list of addresses instead of just a single address [\#945](https://github.com/CosmWasm/wasmd/issues/945) - Make contract addresses predictable \("deterministic"\) [\#942](https://github.com/CosmWasm/wasmd/issues/942) - Add query for the total supply of a coin [\#903](https://github.com/CosmWasm/wasmd/pull/903) ([larry0x](https://github.com/larry0x)) - Upgrade go to v1.18 [\#866]https://github.com/CosmWasm/wasmd/pull/866/) ([faddat](https://github.com/faddat)) -- Upgrade to ibc-go v3.2.0 REQUIRES [MIGRATION](https://github.com/cosmos/ibc-go/blob/v3.2.0/docs/migrations/support-denoms-with-slashes.md) [\#937](https://github.com/CosmWasm/wasmd/pull/937) ([faddat](https://github.com/faddat)) +- Upgrade to ibc-go v3.3.0 REQUIRES [MIGRATION](https://github.com/cosmos/ibc-go/blob/v3.2.3/docs/migrations/support-denoms-with-slashes.md) [\#1016](https://github.com/CosmWasm/wasmd/pull/1016) - Upgrade to cosmos-sdk v0.45.8 [\#964](https://github.com/CosmWasm/wasmd/pull/964/) ([faddat](https://github.com/faddat)) -- Upgrade wasmvm to v1.1.0 [\#984](https://github.com/CosmWasm/wasmd/pull/984), see [wasmvm v1.1.0](https://github.com/CosmWasm/wasmvm/releases/tag/v1.1.0) +- Upgrade wasmvm to v1.1.1 [\#1012](https://github.com/CosmWasm/wasmd/pull/1012), see [wasmvm v1.1.1](https://github.com/CosmWasm/wasmvm/releases/tag/v1.1.1) - Add documentation how to add x/wasm to a new Cosmos SDK chain [\#876](https://github.com/CosmWasm/wasmd/issues/876) - Upgrade keyring / go-keychain dependencies (removes deprecate warning) [\#957](https://github.com/CosmWasm/wasmd/issues/957) - Make contract pinning an optional field in StoreCode proposals [\#972](https://github.com/CosmWasm/wasmd/issues/972) @@ -19,10 +25,15 @@ - Prevent migration to a restricted code [\#900](https://github.com/CosmWasm/wasmd/pull/900) ([alpe](https://github.com/alpe)) - Charge gas to unzip wasm code [\#898](https://github.com/CosmWasm/wasmd/pull/898) ([alpe](https://github.com/alpe)) -Migration notes: -- See ibc-go [migration notes](https://github.com/cosmos/ibc-go/blob/v3.2.0/docs/migrations/support-denoms-with-slashes.md) [\#937](https://github.com/CosmWasm/wasmd/pull/937) +### Notable changes: +- BaseAccount and pruned vesting account types can be re-used for contracts addresses +- A new [MsgInstantiateContract2](https://github.com/CosmWasm/wasmd/pull/1014/files#diff-bf58b9da4b674719f07dd5421c532c1ead13a15f8896b59c1f724215d2064b73R75) was introduced which is an additional value for `message` type events +- Store event contains new attribute with code checksum now +- New `wasmd tx wasm instantiate2` CLI command for predictable addresses on instantiation + +### Migration notes: +- See ibc-go [migration notes](https://github.com/cosmos/ibc-go/blob/v3.3.0/docs/migrations/support-denoms-with-slashes.md) -[Full Changelog](https://github.com/CosmWasm/wasmd/compare/v0.28.0...HEAD) ## [v0.28.0](https://github.com/CosmWasm/wasmd/tree/v0.28.0) (2022-07-29) From bde6aa39342c21cb7f0aae79034ed96be3009e32 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Thu, 29 Sep 2022 02:30:23 +0700 Subject: [PATCH 116/120] ibc-go v5.0.0 --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index eb33a764e9..14204b414f 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/CosmWasm/wasmvm v1.1.1 github.com/cosmos/cosmos-sdk v0.46.1 github.com/cosmos/iavl v0.19.1 - github.com/cosmos/ibc-go/v5 v5.0.0-rc2 + github.com/cosmos/ibc-go/v5 v5.0.0 github.com/cosmos/interchain-accounts v0.3.2 github.com/dvsekhvalnov/jose2go v1.5.0 github.com/gogo/protobuf v1.3.3 diff --git a/go.sum b/go.sum index df2aab7c49..63262c95d8 100644 --- a/go.sum +++ b/go.sum @@ -238,8 +238,8 @@ github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4 github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= github.com/cosmos/iavl v0.19.1 h1:3gaq9b6SjiB0KBTygRnAvEGml2pQlu1TH8uma5g63Ys= github.com/cosmos/iavl v0.19.1/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= -github.com/cosmos/ibc-go/v5 v5.0.0-rc2 h1:7rGkZwojUwK1Dvgze3ZP5K1upIKygudxU3WaeFFU2ts= -github.com/cosmos/ibc-go/v5 v5.0.0-rc2/go.mod h1:Wqsguq98Iuns8tgTv8+xaGYbC+Q8zJfbpjzT6IgMJbs= +github.com/cosmos/ibc-go/v5 v5.0.0 h1:MkObdarpoICPHXoRg/Ne9NRix4j7eQlJZq74/uzH3Zc= +github.com/cosmos/ibc-go/v5 v5.0.0/go.mod h1:Wqsguq98Iuns8tgTv8+xaGYbC+Q8zJfbpjzT6IgMJbs= github.com/cosmos/interchain-accounts v0.3.2 h1:7S5rSndahpjkzUvG00kKZrTZsEuVHuVC9a7p0qDVcF8= github.com/cosmos/interchain-accounts v0.3.2/go.mod h1:vNWr9YxBrI5c74jBwk9ooiUCIDvdOJeF8MQEA/z0IEk= github.com/cosmos/ledger-cosmos-go v0.11.1 h1:9JIYsGnXP613pb2vPjFeMMjBI5lEDsEaF6oYorTy6J4= From 8adfdb324a4a9d054671a99aab30a85a478ed2c7 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Thu, 29 Sep 2022 02:34:57 +0700 Subject: [PATCH 117/120] update gas per suggestion --- x/wasm/keeper/keeper_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index 267baf4a33..cd2ad149fc 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -400,7 +400,7 @@ func TestInstantiate(t *testing.T) { gasAfter := ctx.GasMeter().GasConsumed() if types.EnableGasVerification { - require.Equal(t, uint64(0x1964f), gasAfter-gasBefore) + require.Equal(t, uint64(0x1a455), gasAfter-gasBefore) } // ensure it is stored properly From 688b984449c24d6669b0c8df0fe4825dc70faab7 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Thu, 29 Sep 2022 02:57:27 +0700 Subject: [PATCH 118/120] bring branch up to date with ibc-go v5.0.0 --- app/app.go | 64 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 23 deletions(-) diff --git a/app/app.go b/app/app.go index b65ce820a7..5439a0d5d8 100644 --- a/app/app.go +++ b/app/app.go @@ -82,6 +82,9 @@ import ( icahostkeeper "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/host/keeper" icahosttypes "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/host/types" icatypes "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/types" + ibcfee "github.com/cosmos/ibc-go/v5/modules/apps/29-fee" + ibcfeekeeper "github.com/cosmos/ibc-go/v5/modules/apps/29-fee/keeper" + ibcfeetypes "github.com/cosmos/ibc-go/v5/modules/apps/29-fee/types" transfer "github.com/cosmos/ibc-go/v5/modules/apps/transfer" ibctransferkeeper "github.com/cosmos/ibc-go/v5/modules/apps/transfer/keeper" ibctransfertypes "github.com/cosmos/ibc-go/v5/modules/apps/transfer/types" @@ -92,6 +95,7 @@ import ( porttypes "github.com/cosmos/ibc-go/v5/modules/core/05-port/types" ibchost "github.com/cosmos/ibc-go/v5/modules/core/24-host" ibckeeper "github.com/cosmos/ibc-go/v5/modules/core/keeper" + ibcmock "github.com/cosmos/ibc-go/v5/testing/mock" // Note: please do your research before using this in production app, this is a demo and not an officially // supported IBC team implementation. It has no known issues, but do your own research before using it. @@ -118,7 +122,10 @@ import ( _ "github.com/cosmos/cosmos-sdk/client/docs/statik" ) -const appName = "WasmApp" +const ( + appName = "WasmApp" + MockFeePort string = ibcmock.ModuleName + ibcfeetypes.ModuleName +) // We pull these out so we can set them with LDFLAGS in the Makefile var ( @@ -206,6 +213,7 @@ var ( wasm.AppModuleBasic{}, ica.AppModuleBasic{}, intertx.AppModuleBasic{}, + ibcfee.AppModuleBasic{}, ) // module account permissions @@ -217,6 +225,7 @@ var ( stakingtypes.NotBondedPoolName: {authtypes.Burner, authtypes.Staking}, govtypes.ModuleName: {authtypes.Burner}, ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner}, + ibcfeetypes.ModuleName: nil, icatypes.ModuleName: nil, wasm.ModuleName: {authtypes.Burner}, } @@ -255,6 +264,7 @@ type WasmApp struct { ParamsKeeper paramskeeper.Keeper EvidenceKeeper evidencekeeper.Keeper IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly + IBCFeeKeeper ibcfeekeeper.Keeper ICAControllerKeeper icacontrollerkeeper.Keeper ICAHostKeeper icahostkeeper.Keeper InterTxKeeper intertxkeeper.Keeper @@ -268,6 +278,7 @@ type WasmApp struct { ScopedICAControllerKeeper capabilitykeeper.ScopedKeeper ScopedInterTxKeeper capabilitykeeper.ScopedKeeper ScopedTransferKeeper capabilitykeeper.ScopedKeeper + ScopedIBCFeeKeeper capabilitykeeper.ScopedKeeper ScopedWasmKeeper capabilitykeeper.ScopedKeeper // the module manager @@ -351,7 +362,7 @@ func NewWasmApp( app.AccountKeeper = authkeeper.NewAccountKeeper( appCodec, keys[authtypes.StoreKey], - app.getSubspace(authtypes.ModuleName), + app.GetSubspace(authtypes.ModuleName), authtypes.ProtoBaseAccount, maccPerms, sdk.GetConfig().GetBech32AccountAddrPrefix(), @@ -360,7 +371,7 @@ func NewWasmApp( appCodec, keys[banktypes.StoreKey], app.AccountKeeper, - app.getSubspace(banktypes.ModuleName), + app.GetSubspace(banktypes.ModuleName), app.ModuleAccountAddrs(), ) app.AuthzKeeper = authzkeeper.NewKeeper( @@ -379,12 +390,12 @@ func NewWasmApp( keys[stakingtypes.StoreKey], app.AccountKeeper, app.BankKeeper, - app.getSubspace(stakingtypes.ModuleName), + app.GetSubspace(stakingtypes.ModuleName), ) app.MintKeeper = mintkeeper.NewKeeper( appCodec, keys[minttypes.StoreKey], - app.getSubspace(minttypes.ModuleName), + app.GetSubspace(minttypes.ModuleName), &stakingKeeper, app.AccountKeeper, app.BankKeeper, @@ -393,7 +404,7 @@ func NewWasmApp( app.DistrKeeper = distrkeeper.NewKeeper( appCodec, keys[distrtypes.StoreKey], - app.getSubspace(distrtypes.ModuleName), + app.GetSubspace(distrtypes.ModuleName), app.AccountKeeper, app.BankKeeper, &stakingKeeper, @@ -403,10 +414,10 @@ func NewWasmApp( appCodec, keys[slashingtypes.StoreKey], &stakingKeeper, - app.getSubspace(slashingtypes.ModuleName), + app.GetSubspace(slashingtypes.ModuleName), ) app.CrisisKeeper = crisiskeeper.NewKeeper( - app.getSubspace(crisistypes.ModuleName), + app.GetSubspace(crisistypes.ModuleName), invCheckPeriod, app.BankKeeper, authtypes.FeeCollectorName, @@ -429,7 +440,7 @@ func NewWasmApp( app.IBCKeeper = ibckeeper.NewKeeper( appCodec, keys[ibchost.StoreKey], - app.getSubspace(ibchost.ModuleName), + app.GetSubspace(ibchost.ModuleName), app.StakingKeeper, app.UpgradeKeeper, scopedIBCKeeper, @@ -450,7 +461,7 @@ func NewWasmApp( app.TransferKeeper = ibctransferkeeper.NewKeeper( appCodec, keys[ibctransfertypes.StoreKey], - app.getSubspace(ibctransfertypes.ModuleName), + app.GetSubspace(ibctransfertypes.ModuleName), app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, @@ -461,26 +472,33 @@ func NewWasmApp( transferModule := transfer.NewAppModule(app.TransferKeeper) transferIBCModule := transfer.NewIBCModule(app.TransferKeeper) - app.ICAHostKeeper = icahostkeeper.NewKeeper( - appCodec, - keys[icahosttypes.StoreKey], - app.getSubspace(icahosttypes.SubModuleName), + // IBC Fee Module keeper + app.IBCFeeKeeper = ibcfeekeeper.NewKeeper( + appCodec, keys[ibcfeetypes.StoreKey], app.GetSubspace(ibcfeetypes.ModuleName), + app.IBCKeeper.ChannelKeeper, // may be replaced with IBC middleware app.IBCKeeper.ChannelKeeper, - &app.IBCKeeper.PortKeeper, - app.AccountKeeper, - scopedICAHostKeeper, - app.MsgServiceRouter(), + &app.IBCKeeper.PortKeeper, app.AccountKeeper, app.BankKeeper, ) + + // ICA Host keeper + app.ICAHostKeeper = icahostkeeper.NewKeeper( + appCodec, keys[icahosttypes.StoreKey], app.GetSubspace(icahosttypes.SubModuleName), + app.IBCFeeKeeper, // use ics29 fee as ics4Wrapper in middleware stack + app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, + app.AccountKeeper, scopedICAHostKeeper, app.MsgServiceRouter(), + ) + app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper( appCodec, keys[icacontrollertypes.StoreKey], - app.getSubspace(icacontrollertypes.SubModuleName), + app.GetSubspace(icacontrollertypes.SubModuleName), app.IBCKeeper.ChannelKeeper, // may be replaced with middleware such as ics29 fee app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, scopedICAControllerKeeper, app.MsgServiceRouter(), ) + icaModule := ica.NewAppModule(&app.ICAControllerKeeper, &app.ICAHostKeeper) icaHostIBCModule := icahost.NewIBCModule(app.ICAHostKeeper) @@ -513,7 +531,7 @@ func NewWasmApp( app.WasmKeeper = wasm.NewKeeper( appCodec, keys[wasm.StoreKey], - app.getSubspace(wasm.ModuleName), + app.GetSubspace(wasm.ModuleName), app.AccountKeeper, app.BankKeeper, app.StakingKeeper, @@ -553,7 +571,7 @@ func NewWasmApp( govKeeper := govkeeper.NewKeeper( appCodec, keys[govtypes.StoreKey], - app.getSubspace(govtypes.ModuleName), + app.GetSubspace(govtypes.ModuleName), app.AccountKeeper, app.BankKeeper, &stakingKeeper, @@ -834,10 +852,10 @@ func (app *WasmApp) LegacyAmino() *codec.LegacyAmino { //nolint:staticcheck return app.legacyAmino } -// getSubspace returns a param subspace for a given module name. +// GetSubspace returns a param subspace for a given module name. // // NOTE: This is solely to be used for testing purposes. -func (app *WasmApp) getSubspace(moduleName string) paramstypes.Subspace { +func (app *WasmApp) GetSubspace(moduleName string) paramstypes.Subspace { subspace, _ := app.ParamsKeeper.GetSubspace(moduleName) return subspace } From f416cd0aeec255de09ec596ea10c787e510d709f Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Thu, 29 Sep 2022 03:04:42 +0700 Subject: [PATCH 119/120] attempt to fix remaining bug --- x/wasm/keeper/keeper_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index cd2ad149fc..7a3c5305a2 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -738,7 +738,7 @@ func TestInstantiateWithContractFactoryChildQueriesParent(t *testing.T) { // overwrite wasmvm in router router := baseapp.NewMsgServiceRouter() router.SetInterfaceRegistry(keepers.EncodingConfig.InterfaceRegistry) - // types.MsgServer(router, NewMsgServerImpl(NewDefaultPermissionKeeper(keeper))) // we may need to bring this back. + types.RegisterMsgServer(router, NewMsgServerImpl(NewDefaultPermissionKeeper(keeper))) keeper.messenger = NewDefaultMessageHandler(router, nil, nil, nil, keepers.EncodingConfig.Marshaler, nil) // overwrite wasmvm in response handler keeper.wasmVMResponseHandler = NewDefaultWasmVMContractResponseHandler(NewMessageDispatcher(keeper.messenger, keeper)) From aa968fd13d9cdf85cb83379d3559c521a256492e Mon Sep 17 00:00:00 2001 From: omahs <73983677+omahs@users.noreply.github.com> Date: Thu, 29 Sep 2022 13:37:10 +0200 Subject: [PATCH 120/120] Fix: typos Fix: typos --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ca44b55d11..e5c24f1d81 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ It will also run contracts compiled with 1.x assuming they don't opt into any ne The 1.x cosmwasm_vm will support all contracts with 1.0 <= version <= 1.x. Note that `cosmwasm-std` version defines which contracts are compatible with this system. The wasm code uploaded must -have been compiled with one of the supported `cosmwasm-std` versions, or will be rejeted upon upload (with some error +have been compiled with one of the supported `cosmwasm-std` versions, or will be rejected upon upload (with some error message about "contract too old?" or "contract too new?"). `cosmwasm-vm` version defines the runtime used. It is a breaking change to switch runtimes (you will need to organize a chain upgrade). As of `cosmwasm-vm 0.13` we are using [wasmer](https://github.com/wasmerio/wasmer/) 1.0, which is significantly more performant than the older versions. @@ -97,9 +97,9 @@ The used cosmos-sdk version is in transition migrating from amino encoding to pr We use standard cosmos-sdk encoding (amino) for all sdk Messages. However, the message body sent to all contracts, as well as the internal state is encoded using JSON. Cosmwasm allows arbitrary bytes with the contract itself -responsible for decodng. For better UX, we often use `json.RawMessage` to contain these bytes, which enforces that it is +responsible for decoding. For better UX, we often use `json.RawMessage` to contain these bytes, which enforces that it is valid json, but also give a much more readable interface. If you want to use another encoding in the contracts, that is -a relatively minor change to wasmd but would currently require a fork. Please open in issue if this is important for +a relatively minor change to wasmd but would currently require a fork. Please open an issue if this is important for your use case. ## Quick Start

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�qd$b8;*CQ*wnE>W=6jPr;l^U# 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