diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..aa010c0 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,4 @@ +FROM ubuntu:latest +LABEL authors="deadlium, computerKeeda, Hitisha-G, saatvik333" + +ENTRYPOINT ["top", "-b"] \ No newline at end of file diff --git a/Dockerfile.builder b/Dockerfile.builder new file mode 100644 index 0000000..71e2b2a --- /dev/null +++ b/Dockerfile.builder @@ -0,0 +1,74 @@ +# syntax=docker/dockerfile:1 + +ARG GO_VERSION="1.22" +ARG RUNNER_IMAGE="gcr.io/distroless/static" + +# -------------------------------------------------------- +# Builder +# -------------------------------------------------------- + +FROM golang:${GO_VERSION}-alpine3.20 as builder + +ARG GIT_VERSION +ARG GIT_COMMIT +ARG BUILD_TAGS +ARG ENABLED_PROPOSALS + +ENV GOTOOLCHAIN go1.22.9 + +RUN apk add --no-cache \ + ca-certificates \ + build-base \ + linux-headers + +# Download Go dependencies +WORKDIR /junction +COPY go.mod go.sum ./ +RUN --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=cache,target=/root/go/pkg/mod \ + go mod download + +# Cosmwasm - Download correct libwasmvm version +RUN WASMVM_VERSION=$(go list -m github.com/CosmWasm/wasmvm/v2 | cut -d ' ' -f 2) && \ + wget https://github.com/CosmWasm/wasmvm/releases/download/$WASMVM_VERSION/libwasmvm_muslc.$(uname -m).a \ + -O /lib/libwasmvm_muslc.$(uname -m).a && \ + # Verify checksum + wget https://github.com/CosmWasm/wasmvm/releases/download/$WASMVM_VERSION/checksums.txt -O /tmp/checksums.txt && \ + sha256sum /lib/libwasmvm_muslc.$(uname -m).a | grep $(cat /tmp/checksums.txt | grep libwasmvm_muslc.$(uname -m) | cut -d ' ' -f 1) + +# Copy the remaining files +COPY . . + +# Build junctiond binary +RUN --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=cache,target=/root/go/pkg/mod \ + go build \ + -mod=readonly \ + -tags ${BUILD_TAGS} \ + -ldflags "-X github.com/cosmos/cosmos-sdk/version.Name="junction" \ + -X github.com/cosmos/cosmos-sdk/version.AppName="junctiond" \ + -X github.com/cosmos/cosmos-sdk/version.Version=${GIT_VERSION} \ + -X github.com/cosmos/cosmos-sdk/version.Commit=${GIT_COMMIT} \ + -X github.com/cosmos/cosmos-sdk/version.BuildTags='${BUILD_TAGS}' \ + -X github.com/junction-org/junction/app.EnableSpecificProposals=${ENABLED_PROPOSALS} \ + -w -s -linkmode=external -extldflags '-Wl,-z,muldefs -static'" \ + -trimpath \ + -o /junction/build/junctiond \ + /junction/cmd/junctiond + +# -------------------------------------------------------- +# Runner +# -------------------------------------------------------- + +FROM ${RUNNER_IMAGE} + +COPY --from=builder /junction/build/junctiond /bin/junctiond + +ENV HOME /junction +WORKDIR $HOME + +EXPOSE 26656 +EXPOSE 26657 +EXPOSE 1317 + +ENTRYPOINT ["junctiond"] diff --git a/Makefile b/Makefile index 1a50ca0..e728ffc 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,44 @@ # Makefile for building and linting Go project +DOCKER := $(shell which docker) +VERSION := $(shell echo $(shell git describe --tags) | sed 's/^v//') +GO_VERSION=1.23 +COMMIT := $(shell git log -1 --format='%H') + +LEDGER_ENABLED ?= true + +build_tags = netgo +ifeq ($(LEDGER_ENABLED),true) + ifeq ($(OS),Windows_NT) + GCCEXE = $(shell where gcc.exe 2> NUL) + ifeq ($(GCCEXE),) + $(error gcc.exe not installed for ledger support, please install or set LEDGER_ENABLED=false) + else + build_tags += ledger + endif + else + UNAME_S = $(shell uname -s) + ifeq ($(UNAME_S),OpenBSD) + $(warning OpenBSD detected, disabling ledger support (https://github.com/cosmos/cosmos-sdk/issues/1988)) + else + GCC = $(shell command -v gcc 2> /dev/null) + ifeq ($(GCC),) + $(error gcc not installed for ledger support, please install or set LEDGER_ENABLED=false) + else + build_tags += ledger + endif + endif + endif +endif +ifeq ($(WITH_CLEVELDB),yes) + build_tags += gcc +endif +build_tags += $(BUILD_TAGS) +build_tags := $(strip $(build_tags)) + +empty = $(whitespace) $(whitespace) +comma := , +build_tags_comma_sep := $(subst $(empty),$(comma),$(build_tags)) # Basic project settings BINARY_NAME=junctiond BUILD_DIR=./build @@ -44,6 +83,7 @@ default: build build: go.sum @echo "Building $(BINARY_NAME) binary..." $(GO_BUILD) -tags "$(build_tags)" -ldflags '$(ldflags)' -o $(BUILD_DIR)/$(BINARY_NAME) $(SOURCE_DIR) + @shasum -a 256 $(BUILD_DIR)/$(BINARY_NAME) >> $(CHECKSUM_FILE) # Install the binary install: @@ -85,4 +125,22 @@ build-all: go.sum GOOS=windows GOARCH=amd64 $(GO_BUILD) -tags "$(build_tags)" -ldflags '$(ldflags)' -o $(BUILD_DIR)/$(BINARY_NAME)-windows-amd64.exe $(SOURCE_DIR) @shasum -a 256 $(BUILD_DIR)/$(BINARY_NAME)-windows-amd64.exe >> $(CHECKSUM_FILE) -.PHONY: default build install test clean lint print-system build-all +build-static-linux-amd64: go.sum $(BUILD_DIR)/ + mkdir -p $(BUILD_DIR) + $(DOCKER) buildx create --name junctionbuilder || true + $(DOCKER) buildx use junctionbuilder + $(DOCKER) buildx build \ + --build-arg GO_VERSION=$(GO_VERSION) \ + --build-arg GIT_VERSION=$(VERSION) \ + --build-arg GIT_COMMIT=$(COMMIT) \ + --build-arg BUILD_TAGS=$(build_tags_comma_sep),muslc \ + --platform linux/amd64 \ + -t junction-amd64 \ + --load \ + -f Dockerfile.builder . + $(DOCKER) rm -f junctionbinary || true + $(DOCKER) create -ti --name junctionbinary junction-amd64 + $(DOCKER) cp junctionbinary:/bin/junctiond $(BUILD_DIR)/junctiond-linux-amd64 + $(DOCKER) rm -f junctionbinary + +.PHONY: default build install test clean lint print-system build-all build-static-linux-amd64 diff --git a/app/app.go b/app/app.go index 726d784..906e52e 100644 --- a/app/app.go +++ b/app/app.go @@ -1,16 +1,11 @@ package app import ( - "context" wasmkeeper "github.com/airchains-network/junction/x/wasm/keeper" "io" "os" "path/filepath" - upgradetypes "cosmossdk.io/x/upgrade/types" - trackgatemoduletypes "github.com/airchains-network/junction/x/trackgate/types" - sdk "github.com/cosmos/cosmos-sdk/types" - _ "cosmossdk.io/api/cosmos/tx/config/v1" // import for side-effects "cosmossdk.io/depinject" "cosmossdk.io/log" @@ -141,16 +136,18 @@ type App struct { ICAControllerKeeper icacontrollerkeeper.Keeper ICAHostKeeper icahostkeeper.Keeper TransferKeeper ibctransferkeeper.Keeper + WasmKeeper wasmkeeper.Keeper // Scoped IBC ScopedIBCKeeper capabilitykeeper.ScopedKeeper ScopedIBCTransferKeeper capabilitykeeper.ScopedKeeper ScopedICAControllerKeeper capabilitykeeper.ScopedKeeper ScopedICAHostKeeper capabilitykeeper.ScopedKeeper + ScopedIBCFeeKeeper capabilitykeeper.ScopedKeeper + ScopedWasmKeeper capabilitykeeper.ScopedKeeper JunctionKeeper junctionmodulekeeper.Keeper TrackgateKeeper trackgatemodulekeeper.Keeper - WasmKeeper wasmkeeper.Keeper // this line is used by starport scaffolding # stargate/app/keeperDeclaration // simulation manager @@ -221,6 +218,7 @@ func New( // Passing the getter, the app IBC Keeper will always be accessible. // This needs to be removed after IBC supports App Wiring. app.GetIBCKeeper, + app.GetWasmKeeper, app.GetCapabilityScopedKeeper, // Supply the logger logger, @@ -331,89 +329,14 @@ func New( app.App = appBuilder.Build(db, traceStore, baseAppOptions...) - upgradeInfo, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk() - if err != nil { - panic(err) - } - - if upgradeInfo.Name == "jip-2" && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) { - storeUpgrades := storetypes.StoreUpgrades{ - Added: []string{trackgatemoduletypes.StoreKey}, - } + //upgradeInfo, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk() + //if err != nil { + // panic(err) + //} - app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades)) - app.UpgradeKeeper.SetUpgradeHandler( - "jip-2", - func(ctx context.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { - sdkCtx := sdk.UnwrapSDKContext(ctx) - //storeUpgrades := storetypes.StoreUpgrades{ - // Added: []string{trackgateTypes.StoreKey}, - //} - // - //app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(plan.Height, &storeUpgrades)) - - // Skip the capability module migration to avoid setting the index again - // You can use the module manager to skip migrations for the capability module by adjusting the version map - - // Check if the capability index is already set before attempting to initialize it - latestIndex := app.CapabilityKeeper.GetLatestIndex(sdkCtx) - if latestIndex == 0 { - // The index is not set, so we can safely initialize it - err := app.CapabilityKeeper.InitializeIndex(sdkCtx, 1) // Initialize with index 1 or a value > 0 - if err != nil { - return nil, err - } - } else { - logger.Info("Capability index already initialized, skipping re-initialization") - } - //configurator := app.Configurator() - //versionMap, err := app.ModuleManager.RunMigrations(sdkCtx, configurator, fromVM) - //if err != nil { - // return nil, err - //} - //// Convert the VersionMap to a string for logging - //versionMapString := fmt.Sprintf("%v", versionMap) - //logger.Info(versionMapString) - // - //// Ensure the capability module is not migrated again - //if version, exists := versionMap["capability"]; exists && version >= 1 { - // logger.Info("Skipping capability module migration") - //} - versionMap := module.VersionMap{ - "trackgate": 1, - } - - //authority := authtypes.NewModuleAddress(govtypes.ModuleName) - // - //// Create the Trackgate Keeper - //app.TrackgateKeeper = trackgatemodulekeeper.NewKeeper( - // app.AppCodec(), - // runtime.NewKVStoreService(app.GetKey(trackgatemoduletypes.StoreKey)), - // logger, - // authority.String(), - // app.BankKeeper, - //) - - //Create the Trackgate AppModule - //trackgateModule := trackgate.NewAppModule( - // app.AppCodec(), - // app.TrackgateKeeper, - // app.AccountKeeper, - // app.BankKeeper, - //) - // - //// Register the Trackgate module using app.RegisterModules - //err = app.RegisterModules(trackgateModule) - if err != nil { - return nil, err - } - - return versionMap, nil - }, // Upgrade handler function - ) - } + app.RegisterUpgradeHandlers() // Register legacy modules - app.registerIBCModules() + app.registerWasmAndIBCModules(appOpts, wasmOpts) // register streaming services if err := app.RegisterStreamingServices(appOpts, app.kvStoreKeys()); err != nil { diff --git a/app/app_config.go b/app/app_config.go index 1287e30..b79b2c4 100644 --- a/app/app_config.go +++ b/app/app_config.go @@ -1,6 +1,7 @@ package app import ( + wasmtypes "github.com/airchains-network/junction/x/wasm/types" "time" runtimev1alpha1 "cosmossdk.io/api/cosmos/app/runtime/v1alpha1" @@ -96,6 +97,8 @@ var ( group.ModuleName, consensustypes.ModuleName, circuittypes.ModuleName, + // wasm after ibc transfer + wasmtypes.ModuleName, // chain modules junctionmoduletypes.ModuleName, trackgatemoduletypes.ModuleName, @@ -122,6 +125,8 @@ var ( ibctransfertypes.ModuleName, icatypes.ModuleName, ibcfeetypes.ModuleName, + //wasm module + wasmtypes.ModuleName, // chain modules junctionmoduletypes.ModuleName, trackgatemoduletypes.ModuleName, @@ -142,6 +147,8 @@ var ( capabilitytypes.ModuleName, icatypes.ModuleName, ibcfeetypes.ModuleName, + //wasm module + wasmtypes.ModuleName, // chain modules junctionmoduletypes.ModuleName, trackgatemoduletypes.ModuleName, @@ -165,6 +172,8 @@ var ( {Account: ibctransfertypes.ModuleName, Permissions: []string{authtypes.Minter, authtypes.Burner}}, {Account: ibcfeetypes.ModuleName}, {Account: icatypes.ModuleName}, + // wasm module permissions + {Account: wasmtypes.ModuleName, Permissions: []string{authtypes.Burner}}, {Account: trackgatemoduletypes.ModuleName, Permissions: []string{authtypes.Minter, authtypes.Burner, authtypes.Staking}}, // this line is used by starport scaffolding # stargate/app/maccPerms } diff --git a/app/ibc.go b/app/ibc_wasm_module.go similarity index 77% rename from app/ibc.go rename to app/ibc_wasm_module.go index 2b0bd56..be8b691 100644 --- a/app/ibc.go +++ b/app/ibc_wasm_module.go @@ -3,8 +3,16 @@ package app import ( "cosmossdk.io/core/appmodule" storetypes "cosmossdk.io/store/types" + "fmt" + "github.com/airchains-network/junction/x/wasm" + wasmkeeper "github.com/airchains-network/junction/x/wasm/keeper" + wasmtypes "github.com/airchains-network/junction/x/wasm/types" + "github.com/cosmos/cosmos-sdk/client/flags" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/runtime" + servertypes "github.com/cosmos/cosmos-sdk/server/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" @@ -33,11 +41,13 @@ import ( ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" solomachine "github.com/cosmos/ibc-go/v8/modules/light-clients/06-solomachine" ibctm "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" + "github.com/spf13/cast" + "path/filepath" // this line is used by starport scaffolding # ibc/app/import ) -// registerIBCModules register IBC keepers and non dependency inject modules. -func (app *App) registerIBCModules() { +// registerWasmAndIBCModules register IBC keepers and non dependency inject modules. +func (app *App) registerWasmAndIBCModules(appOpts servertypes.AppOptions, wasmOpts []wasmkeeper.Option) { // set up non depinject support modules store keys if err := app.RegisterStores( storetypes.NewKVStoreKey(capabilitytypes.StoreKey), @@ -46,12 +56,15 @@ func (app *App) registerIBCModules() { storetypes.NewKVStoreKey(ibcfeetypes.StoreKey), storetypes.NewKVStoreKey(icahosttypes.StoreKey), storetypes.NewKVStoreKey(icacontrollertypes.StoreKey), + storetypes.NewKVStoreKey(wasmtypes.StoreKey), storetypes.NewMemoryStoreKey(capabilitytypes.MemStoreKey), storetypes.NewTransientStoreKey(paramstypes.TStoreKey), ); err != nil { panic(err) } + homePath := cast.ToString(appOpts.Get(flags.FlagHome)) + // register the key tables for legacy param subspaces keyTable := ibcclienttypes.ParamKeyTable() keyTable.RegisterParamSet(&ibcconnectiontypes.Params{}) @@ -59,7 +72,8 @@ func (app *App) registerIBCModules() { app.ParamsKeeper.Subspace(ibctransfertypes.ModuleName).WithKeyTable(ibctransfertypes.ParamKeyTable()) app.ParamsKeeper.Subspace(icacontrollertypes.SubModuleName).WithKeyTable(icacontrollertypes.ParamKeyTable()) app.ParamsKeeper.Subspace(icahosttypes.SubModuleName).WithKeyTable(icahosttypes.ParamKeyTable()) - + //adding wasm params subspace to the param keeper, but not registering any key table as wasm does not have any params + app.ParamsKeeper.Subspace(wasmtypes.ModuleName) // add capability keeper and ScopeToModule for ibc module app.CapabilityKeeper = capabilitykeeper.NewKeeper( app.AppCodec(), @@ -72,7 +86,8 @@ func (app *App) registerIBCModules() { scopedIBCTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) scopedICAControllerKeeper := app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName) scopedICAHostKeeper := app.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName) - + // adding scopedWasmKeeper for wasm module + scopedWasmKeeper := app.CapabilityKeeper.ScopeToModule(wasmtypes.ModuleName) // Create IBC keeper app.IBCKeeper = ibckeeper.NewKeeper( app.appCodec, @@ -136,8 +151,40 @@ func (app *App) registerIBCModules() { app.MsgServiceRouter(), authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) + + wasmDir := filepath.Join(homePath, "wasm") + wasmConfig, err := wasm.ReadWasmConfig(appOpts) + if err != nil { + panic(fmt.Sprintf("error while reading wasm config: %s", err)) + } + + fmt.Println("Initializing WasmKeeper") + //wasmStoreService := runtime.NewKVStoreService(app.GetKey(wasmtypes.StoreKey)) + app.WasmKeeper = wasmkeeper.NewKeeper( + app.appCodec, + runtime.NewKVStoreService(app.GetKey(wasmtypes.StoreKey)), + app.AccountKeeper, + app.BankKeeper, + app.StakingKeeper, + distrkeeper.NewQuerier(app.DistrKeeper), + app.IBCFeeKeeper, + app.IBCKeeper.ChannelKeeper, + app.IBCKeeper.PortKeeper, + scopedWasmKeeper, + app.TransferKeeper, + app.MsgServiceRouter(), + app.GRPCQueryRouter(), + wasmDir, + wasmConfig, + wasmkeeper.BuiltInCapabilities(), + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + wasmOpts..., + ) app.GovKeeper.SetLegacyRouter(govRouter) + // Create fee enabled wasm ibc Stack + wasmIBCModule := ibcfee.NewIBCMiddleware(wasm.NewIBCHandler(app.WasmKeeper, app.IBCKeeper.ChannelKeeper, app.IBCFeeKeeper), app.IBCFeeKeeper) + // Create IBC modules with ibcfee middleware transferIBCModule := ibcfee.NewIBCMiddleware(ibctransfer.NewIBCModule(app.TransferKeeper), app.IBCFeeKeeper) @@ -153,6 +200,7 @@ func (app *App) registerIBCModules() { // Create static IBC router, add transfer route, then set and seal it ibcRouter := porttypes.NewRouter(). AddRoute(ibctransfertypes.ModuleName, transferIBCModule). + AddRoute(wasmtypes.ModuleName, wasmIBCModule). AddRoute(icacontrollertypes.SubModuleName, icaControllerIBCModule). AddRoute(icahosttypes.SubModuleName, icaHostIBCModule) @@ -162,6 +210,7 @@ func (app *App) registerIBCModules() { app.ScopedIBCKeeper = scopedIBCKeeper app.ScopedIBCTransferKeeper = scopedIBCTransferKeeper + app.ScopedWasmKeeper = scopedWasmKeeper app.ScopedICAHostKeeper = scopedICAHostKeeper app.ScopedICAControllerKeeper = scopedICAControllerKeeper @@ -172,6 +221,7 @@ func (app *App) registerIBCModules() { ibcfee.NewAppModule(app.IBCFeeKeeper), icamodule.NewAppModule(&app.ICAControllerKeeper, &app.ICAHostKeeper), capability.NewAppModule(app.appCodec, *app.CapabilityKeeper, false), + wasm.NewAppModule(app.appCodec, &app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.MsgServiceRouter(), app.GetSubspace(wasmtypes.ModuleName)), ibctm.AppModule{}, solomachine.AppModule{}, ); err != nil { @@ -182,7 +232,7 @@ func (app *App) registerIBCModules() { // Since the IBC modules don't support dependency injection, we need to // manually register the modules on the client side. // This needs to be removed after IBC supports App Wiring. -func RegisterIBC(registry cdctypes.InterfaceRegistry) map[string]appmodule.AppModule { +func RegisterWasmAndIBC(registry cdctypes.InterfaceRegistry) map[string]appmodule.AppModule { modules := map[string]appmodule.AppModule{ ibcexported.ModuleName: ibc.AppModule{}, ibctransfertypes.ModuleName: ibctransfer.AppModule{}, @@ -191,6 +241,7 @@ func RegisterIBC(registry cdctypes.InterfaceRegistry) map[string]appmodule.AppMo capabilitytypes.ModuleName: capability.AppModule{}, ibctm.ModuleName: ibctm.AppModule{}, solomachine.ModuleName: solomachine.AppModule{}, + wasmtypes.ModuleName: wasm.AppModule{}, } for _, module := range modules { diff --git a/app/test_helpers.go b/app/test_helpers.go index 59b5270..7deb169 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -95,7 +95,6 @@ func NewWasmAppWithCustomOptions(t *testing.T, isCheckTx bool, options SetupOpti } app, err := New(options.Logger, options.DB, nil, true, options.AppOpts, options.WasmOpts) - require.NoError(t, err) genesisState := app.DefaultGenesis() genesisState, err = GenesisStateWithValSet(app.AppCodec(), genesisState, valSet, []authtypes.GenesisAccount{acc}, balance) require.NoError(t, err) diff --git a/app/upgrade.go b/app/upgrade.go index 2a5da30..b917c72 100644 --- a/app/upgrade.go +++ b/app/upgrade.go @@ -2,80 +2,78 @@ package app import ( "context" - "strconv" - - "cosmossdk.io/log" + storetypes "cosmossdk.io/store/types" upgradetypes "cosmossdk.io/x/upgrade/types" - trackgateKeeper "github.com/airchains-network/junction/x/trackgate/keeper" - trackgate "github.com/airchains-network/junction/x/trackgate/module" - trackgateTypes "github.com/airchains-network/junction/x/trackgate/types" - "github.com/cosmos/cosmos-sdk/runtime" + trackgatemoduletypes "github.com/airchains-network/junction/x/trackgate/types" + wasmtypes "github.com/airchains-network/junction/x/wasm/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" ) -func CreateUpgradeHandler( - mm *module.Manager, - configurator module.Configurator, - app *App, - logger log.Logger, -) upgradetypes.UpgradeHandler { - return func(ctx context.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { - sdkCtx := sdk.UnwrapSDKContext(ctx) - //storeUpgrades := storetypes.StoreUpgrades{ - // Added: []string{trackgateTypes.StoreKey}, - //} - // - //app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(plan.Height, &storeUpgrades)) - - // Check if the capability index is already set before attempting to initialize it - latestIndex := app.CapabilityKeeper.GetLatestIndex(sdkCtx) - indexString := strconv.FormatUint(latestIndex, 10) - logger.Debug(indexString) +func (app *App) RegisterUpgradeHandlers() { + // Centralized registry for upgrade handlers + upgradeHandlers := map[string]upgradetypes.UpgradeHandler{ + "jip-2": app.handleJIP2Upgrade, + "jip-3": app.handleJIP3Upgrade, + // Add more handlers as needed + } - // Run migrations for all modules - versionMap, err := mm.RunMigrations(sdkCtx, configurator, fromVM) - if err != nil { - return nil, err - } + // Centralized registry for store upgrades + storeUpgradeConfigs := map[string]storetypes.StoreUpgrades{ + "jip-2": { + Added: []string{trackgatemoduletypes.StoreKey}, + }, + "jip-3": { + Added: []string{wasmtypes.StoreKey}, + }, + } - if latestIndex == 0 { - // The index is not set, so we can safely initialize it - err := app.CapabilityKeeper.InitializeIndex(sdkCtx, 1) // Initialize with index 1 or a value > 0 + // Iterate over registered handlers + for name, handler := range upgradeHandlers { + if storeUpgrade, exists := storeUpgradeConfigs[name]; exists { + // Read upgrade info from disk + upgradeInfo, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk() if err != nil { - return nil, err + panic(err) } - } else { - logger.Info("Capability index already initialized, skipping re-initialization") + // Set store loader for upgrades with store changes + app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrade)) } + app.UpgradeKeeper.SetUpgradeHandler(name, handler) + } +} - authority := authtypes.NewModuleAddress(govtypes.ModuleName) - - // Create the Trackgate Keeper - app.TrackgateKeeper = trackgateKeeper.NewKeeper( - app.AppCodec(), - runtime.NewKVStoreService(app.GetKey(trackgateTypes.StoreKey)), - logger, - authority.String(), - app.BankKeeper, - ) - - // Create the Trackgate AppModule - trackgateModule := trackgate.NewAppModule( - app.AppCodec(), - app.TrackgateKeeper, - app.AccountKeeper, - app.BankKeeper, - ) +func (app *App) handleJIP2Upgrade(ctx context.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) - // Register the Trackgate module using app.RegisterModules - err = app.RegisterModules(trackgateModule) - if err != nil { + // Check if the capability index is already set + latestIndex := app.CapabilityKeeper.GetLatestIndex(sdkCtx) + if latestIndex == 0 { + // Initialize the capability index + if err := app.CapabilityKeeper.InitializeIndex(sdkCtx, 1); err != nil { return nil, err } + } else { + app.Logger().Info("Capability index already initialized, skipping re-initialization") + } + + // Define the version map for the upgrade + versionMap := module.VersionMap{ + "trackgate": 1, + } - return versionMap, nil + return versionMap, nil +} + +func (app *App) handleJIP3Upgrade(ctx context.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + // Custom logic for JIP-3 upgrade + //sdkCtx := sdk.UnwrapSDKContext(ctx) + app.Logger().Info("Executing JIP-3 upgrade") + + // Example: Adding a new module or feature + versionMap := module.VersionMap{ + "wasm": 1, } + + return versionMap, nil } diff --git a/cmd/junctiond/cmd/commands.go b/cmd/junctiond/cmd/commands.go index 869c385..a6109c4 100644 --- a/cmd/junctiond/cmd/commands.go +++ b/cmd/junctiond/cmd/commands.go @@ -2,6 +2,9 @@ package cmd import ( "errors" + wasmkeeper "github.com/airchains-network/junction/x/wasm/keeper" + "github.com/prometheus/client_golang/prometheus" + "github.com/spf13/cast" "io" "cosmossdk.io/log" @@ -128,9 +131,15 @@ func newApp( ) servertypes.Application { baseappOptions := server.DefaultBaseappOptions(appOpts) + var wasmOpts []wasmkeeper.Option + if cast.ToBool(appOpts.Get("telemetry.enabled")) { + wasmOpts = append(wasmOpts, wasmkeeper.WithVMCacheMetrics(prometheus.DefaultRegisterer)) + } + app, err := app.New( logger, db, traceStore, true, appOpts, + wasmOpts, baseappOptions..., ) if err != nil { @@ -170,9 +179,10 @@ func appExport( // overwrite the FlagInvCheckPeriod viperAppOpts.Set(server.FlagInvCheckPeriod, 1) appOpts = viperAppOpts + var emptyWasmOpts []wasmkeeper.Option if height != -1 { - bApp, err = app.New(logger, db, traceStore, false, appOpts) + bApp, err = app.New(logger, db, traceStore, false, appOpts, emptyWasmOpts) if err != nil { return servertypes.ExportedApp{}, err } @@ -181,7 +191,7 @@ func appExport( return servertypes.ExportedApp{}, err } } else { - bApp, err = app.New(logger, db, traceStore, true, appOpts) + bApp, err = app.New(logger, db, traceStore, true, appOpts, emptyWasmOpts) if err != nil { return servertypes.ExportedApp{}, err } diff --git a/cmd/junctiond/cmd/root.go b/cmd/junctiond/cmd/root.go index a6e21a6..18da0b6 100644 --- a/cmd/junctiond/cmd/root.go +++ b/cmd/junctiond/cmd/root.go @@ -107,7 +107,7 @@ func NewRootCmd() *cobra.Command { // Since the IBC modules don't support dependency injection, we need to // manually register the modules on the client side. // This needs to be removed after IBC supports App Wiring. - ibcModules := app.RegisterIBC(clientCtx.InterfaceRegistry) + ibcModules := app.RegisterWasmAndIBC(clientCtx.InterfaceRegistry) for name, mod := range ibcModules { moduleBasicManager[name] = module.CoreAppModuleBasicAdaptor(name, mod) autoCliOpts.Modules[name] = mod diff --git a/go.mod b/go.mod index 64d0b7c..5702b85 100644 --- a/go.mod +++ b/go.mod @@ -10,58 +10,66 @@ replace ( ) require ( - cosmossdk.io/api v0.7.2 + cosmossdk.io/api v0.7.4 cosmossdk.io/client/v2 v2.0.0-beta.1 + cosmossdk.io/collections v0.4.0 cosmossdk.io/core v0.11.0 cosmossdk.io/depinject v1.0.0-alpha.4 cosmossdk.io/errors v1.0.1 - cosmossdk.io/log v1.3.0 - cosmossdk.io/store v1.0.2 + cosmossdk.io/log v1.3.1 + cosmossdk.io/math v1.3.0 + cosmossdk.io/store v1.1.0 cosmossdk.io/tools/confix v0.1.1 cosmossdk.io/x/circuit v0.1.0 cosmossdk.io/x/evidence v0.1.0 cosmossdk.io/x/feegrant v0.1.0 cosmossdk.io/x/nft v0.1.0 + cosmossdk.io/x/tx v0.13.2 cosmossdk.io/x/upgrade v0.1.1 + github.com/CosmWasm/wasmvm/v2 v2.1.4 github.com/airchains-network/gnark v1.0.1 github.com/bufbuild/buf v1.28.1 - github.com/cometbft/cometbft v0.38.5 + github.com/cometbft/cometbft v0.38.6 github.com/consensys/gnark-crypto v0.12.2-0.20231208203441-d4eab6ddd2af - github.com/cosmos/cosmos-db v1.0.0 - github.com/cosmos/cosmos-proto v1.0.0-beta.3 - github.com/cosmos/cosmos-sdk v0.50.3 - github.com/cosmos/gogoproto v1.4.11 + github.com/cosmos/cosmos-db v1.0.2 + github.com/cosmos/cosmos-proto v1.0.0-beta.5 + github.com/cosmos/cosmos-sdk v0.50.6 + github.com/cosmos/gogoproto v1.4.12 + github.com/cosmos/iavl v1.1.2 github.com/cosmos/ibc-go/modules/capability v1.0.0 github.com/cosmos/ibc-go/v8 v8.0.0 - github.com/golang/protobuf v1.5.3 + github.com/distribution/reference v0.5.0 + github.com/golang/protobuf v1.5.4 + github.com/google/gofuzz v1.2.0 github.com/gorilla/mux v1.8.1 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 + github.com/pkg/errors v0.9.1 + github.com/prometheus/client_golang v1.19.0 + github.com/spf13/cast v1.6.0 github.com/spf13/cobra v1.8.0 github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.18.2 - github.com/stretchr/testify v1.8.4 + github.com/stretchr/testify v1.9.0 go.dedis.ch/kyber/v3 v3.1.0 - golang.org/x/tools v0.15.0 - google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f - google.golang.org/grpc v1.60.1 + golang.org/x/tools v0.20.0 + google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de + google.golang.org/grpc v1.63.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 - google.golang.org/protobuf v1.32.0 + google.golang.org/protobuf v1.33.0 + gopkg.in/yaml.v2 v2.4.0 ) require ( buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.31.0-20231106192134-1baebb0a1518.2 // indirect buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.31.0-20231111212044-1119bf4b707e.2 // indirect - cloud.google.com/go v0.110.10 // indirect - cloud.google.com/go/compute v1.23.3 // indirect + cloud.google.com/go v0.112.0 // indirect + cloud.google.com/go/compute v1.24.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.5 // indirect - cloud.google.com/go/storage v1.35.1 // indirect + cloud.google.com/go/iam v1.1.6 // indirect + cloud.google.com/go/storage v1.36.0 // indirect connectrpc.com/connect v1.12.0 // indirect connectrpc.com/otelconnect v0.6.0 // indirect - cosmossdk.io/collections v0.4.0 // indirect - cosmossdk.io/math v1.2.0 // indirect - cosmossdk.io/x/tx v0.13.0 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.1 // indirect @@ -81,12 +89,12 @@ require ( github.com/bufbuild/protovalidate-go v0.4.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.2.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chzyer/readline v1.5.1 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect github.com/cockroachdb/errors v1.11.1 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect - github.com/cockroachdb/pebble v0.0.0-20231102162011-844f0582c2eb // indirect + github.com/cockroachdb/pebble v1.1.0 // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect github.com/cometbft/cometbft-db v0.9.1 // indirect @@ -96,7 +104,6 @@ require ( github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect - github.com/cosmos/iavl v1.0.0 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect github.com/cosmos/ledger-cosmos-go v0.13.3 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect @@ -109,7 +116,6 @@ require ( github.com/dgraph-io/badger/v2 v2.2007.4 // indirect github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect - github.com/distribution/reference v0.5.0 // indirect github.com/docker/cli v24.0.7+incompatible // indirect github.com/docker/distribution v2.8.3+incompatible // indirect github.com/docker/docker v24.0.7+incompatible // indirect @@ -117,20 +123,20 @@ require ( github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/dvsekhvalnov/jose2go v1.5.0 // indirect - github.com/emicklei/dot v1.6.0 // indirect + github.com/dvsekhvalnov/jose2go v1.6.0 // indirect + github.com/emicklei/dot v1.6.1 // indirect github.com/fatih/color v1.15.0 // indirect github.com/felixge/fgprof v0.9.3 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fxamacker/cbor/v2 v2.5.0 // indirect - github.com/getsentry/sentry-go v0.25.0 // indirect + github.com/getsentry/sentry-go v0.27.0 // indirect github.com/ghodss/yaml v1.0.0 // indirect github.com/go-chi/chi/v5 v5.0.10 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect - github.com/go-logr/logr v1.3.0 // indirect + github.com/go-logr/logr v1.4.1 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gofrs/uuid/v5 v5.0.0 // indirect @@ -147,7 +153,7 @@ require ( github.com/google/orderedcode v0.0.1 // indirect github.com/google/pprof v0.0.0-20231101202521-4ca4178f5c7a // indirect github.com/google/s2a-go v0.1.7 // indirect - github.com/google/uuid v1.4.0 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect github.com/googleapis/gax-go/v2 v2.12.0 // indirect github.com/gorilla/handlers v1.5.2 // indirect @@ -158,7 +164,7 @@ require ( github.com/hashicorp/go-getter v1.7.3 // indirect github.com/hashicorp/go-hclog v1.5.0 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect - github.com/hashicorp/go-metrics v0.5.2 // indirect + github.com/hashicorp/go-metrics v0.5.3 // indirect github.com/hashicorp/go-plugin v1.5.2 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect github.com/hashicorp/go-version v1.6.0 // indirect @@ -173,18 +179,17 @@ require ( github.com/jdx/go-netrc v1.0.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect - github.com/klauspost/compress v1.17.4 // indirect + github.com/klauspost/compress v1.17.7 // indirect github.com/klauspost/pgzip v1.2.6 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.7 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect - github.com/linxGnu/grocksdb v1.8.6 // indirect + github.com/linxGnu/grocksdb v1.8.14 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect github.com/minio/highwayhash v1.0.2 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect @@ -198,27 +203,25 @@ require ( github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0-rc5 // indirect github.com/pelletier/go-toml/v2 v2.1.0 // indirect - github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc // indirect + github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67 // indirect github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect - github.com/pkg/errors v0.9.1 // indirect github.com/pkg/profile v1.7.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.17.0 // indirect - github.com/prometheus/client_model v0.5.0 // indirect - github.com/prometheus/common v0.45.0 // indirect - github.com/prometheus/procfs v0.12.0 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.52.2 // indirect + github.com/prometheus/procfs v0.13.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/rogpeppe/go-internal v1.11.0 // indirect + github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/rs/cors v1.10.1 // indirect - github.com/rs/zerolog v1.31.0 // indirect + github.com/rs/zerolog v1.32.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect + github.com/shamaton/msgpack/v2 v2.2.0 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.11.0 // indirect - github.com/spf13/cast v1.6.0 // indirect github.com/stoewer/go-strcase v1.3.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect @@ -233,30 +236,30 @@ require ( go.dedis.ch/fixbuf v1.0.3 // indirect go.etcd.io/bbolt v1.3.8 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/otel v1.20.0 // indirect - go.opentelemetry.io/otel/metric v1.20.0 // indirect - go.opentelemetry.io/otel/sdk v1.20.0 // indirect - go.opentelemetry.io/otel/trace v1.20.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 // indirect + go.opentelemetry.io/otel v1.22.0 // indirect + go.opentelemetry.io/otel/metric v1.22.0 // indirect + go.opentelemetry.io/otel/sdk v1.21.0 // indirect + go.opentelemetry.io/otel/trace v1.22.0 // indirect go.uber.org/atomic v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.26.0 // indirect - golang.org/x/crypto v0.18.0 // indirect - golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect - golang.org/x/mod v0.14.0 // indirect - golang.org/x/net v0.20.0 // indirect - golang.org/x/oauth2 v0.15.0 // indirect - golang.org/x/sync v0.5.0 // indirect - golang.org/x/sys v0.16.0 // indirect - golang.org/x/term v0.16.0 // indirect + golang.org/x/crypto v0.22.0 // indirect + golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 // indirect + golang.org/x/mod v0.17.0 // indirect + golang.org/x/net v0.24.0 // indirect + golang.org/x/oauth2 v0.18.0 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.19.0 // indirect + golang.org/x/term v0.19.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.153.0 // indirect + google.golang.org/api v0.162.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 // indirect + google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect gopkg.in/ini.v1 v1.67.0 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gotest.tools/v3 v3.5.1 // indirect nhooyr.io/websocket v1.8.6 // indirect diff --git a/go.sum b/go.sum index 422e7c0..d73eca6 100644 --- a/go.sum +++ b/go.sum @@ -35,8 +35,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y= -cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= +cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM= +cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= @@ -73,8 +73,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= -cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= +cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg= +cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= @@ -114,8 +114,8 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97 cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= -cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= +cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc= +cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= @@ -176,8 +176,8 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.35.1 h1:B59ahL//eDfx2IIKFBeT5Atm9wnNmj3+8xG/W4WB//w= -cloud.google.com/go/storage v1.35.1/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= +cloud.google.com/go/storage v1.36.0 h1:P0mOkAcaJxhCTvAkMhxMfrTKiNcub4YmmPBtlhAyTr8= +cloud.google.com/go/storage v1.36.0/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= @@ -193,8 +193,8 @@ connectrpc.com/connect v1.12.0 h1:HwKdOY0lGhhoHdsza+hW55aqHEC64pYpObRNoAgn70g= connectrpc.com/connect v1.12.0/go.mod h1:3AGaO6RRGMx5IKFfqbe3hvK1NqLosFNP2BxDYTPmNPo= connectrpc.com/otelconnect v0.6.0 h1:VJAdQL9+sgdUw9+7+J+jq8pQo/h1S7tSFv2+vDcR7bU= connectrpc.com/otelconnect v0.6.0/go.mod h1:jdcs0uiwXQVmSMgTJ2dAaWR5VbpNd7QKNkuoH7n86RA= -cosmossdk.io/api v0.7.2 h1:BO3i5fvKMKvfaUiMkCznxViuBEfyWA/k6w2eAF6q1C4= -cosmossdk.io/api v0.7.2/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= +cosmossdk.io/api v0.7.4 h1:sPo8wKwCty1lht8kgL3J7YL1voJywP3YWuA5JKkBz30= +cosmossdk.io/api v0.7.4/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= cosmossdk.io/client/v2 v2.0.0-beta.1 h1:XkHh1lhrLYIT9zKl7cIOXUXg2hdhtjTPBUfqERNA1/Q= cosmossdk.io/client/v2 v2.0.0-beta.1/go.mod h1:JEUSu9moNZQ4kU3ir1DKD5eU4bllmAexrGWjmb9k8qU= cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= @@ -205,12 +205,12 @@ cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98ok cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= -cosmossdk.io/log v1.3.0 h1:L0Z0XstClo2kOU4h3V1iDoE5Ji64sg5HLOogzGg67Oo= -cosmossdk.io/log v1.3.0/go.mod h1:HIDyvWLqZe2ovlWabsDN4aPMpY/nUEquAhgfTf2ZzB8= -cosmossdk.io/math v1.2.0 h1:8gudhTkkD3NxOP2YyyJIYYmt6dQ55ZfJkDOaxXpy7Ig= -cosmossdk.io/math v1.2.0/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= -cosmossdk.io/store v1.0.2 h1:lSg5BTvJBHUDwswNNyeh4K/CbqiHER73VU4nDNb8uk0= -cosmossdk.io/store v1.0.2/go.mod h1:EFtENTqVTuWwitGW1VwaBct+yDagk7oG/axBMPH+FXs= +cosmossdk.io/log v1.3.1 h1:UZx8nWIkfbbNEWusZqzAx3ZGvu54TZacWib3EzUYmGI= +cosmossdk.io/log v1.3.1/go.mod h1:2/dIomt8mKdk6vl3OWJcPk2be3pGOS8OQaLUM/3/tCM= +cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= +cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= +cosmossdk.io/store v1.1.0 h1:LnKwgYMc9BInn9PhpTFEQVbL9UK475G2H911CGGnWHk= +cosmossdk.io/store v1.1.0/go.mod h1:oZfW/4Fc/zYqu3JmQcQdUJ3fqu5vnYTn3LZFFy8P8ng= cosmossdk.io/tools/confix v0.1.1 h1:aexyRv9+y15veH3Qw16lxQwo+ki7r2I+g0yNTEFEQM8= cosmossdk.io/tools/confix v0.1.1/go.mod h1:nQVvP1tHsGXS83PonPVWJtSbddIqyjEw99L4M3rPJyQ= cosmossdk.io/x/circuit v0.1.0 h1:IAej8aRYeuOMritczqTlljbUVHq1E85CpBqaCTwYgXs= @@ -221,8 +221,8 @@ cosmossdk.io/x/feegrant v0.1.0 h1:c7s3oAq/8/UO0EiN1H5BIjwVntujVTkYs35YPvvrdQk= cosmossdk.io/x/feegrant v0.1.0/go.mod h1:4r+FsViJRpcZif/yhTn+E0E6OFfg4n0Lx+6cCtnZElU= cosmossdk.io/x/nft v0.1.0 h1:VhcsFiEK33ODN27kxKLa0r/CeFd8laBfbDBwYqCyYCM= cosmossdk.io/x/nft v0.1.0/go.mod h1:ec4j4QAO4mJZ+45jeYRnW7awLHby1JZANqe1hNZ4S3g= -cosmossdk.io/x/tx v0.13.0 h1:8lzyOh3zONPpZv2uTcUmsv0WTXy6T1/aCVDCqShmpzU= -cosmossdk.io/x/tx v0.13.0/go.mod h1:CpNQtmoqbXa33/DVxWQNx5Dcnbkv2xGUhL7tYQ5wUsY= +cosmossdk.io/x/tx v0.13.2 h1:Kh90UH30bhnnUdJH+CmWLyaH8IKdY6BBGY3EkdOk82o= +cosmossdk.io/x/tx v0.13.2/go.mod h1:yhPokDCfXVIuAtyp49IFlWB5YAXUgD7Zek+ZHwsHzvU= cosmossdk.io/x/upgrade v0.1.1 h1:aoPe2gNvH+Gwt/Pgq3dOxxQVU3j5P6Xf+DaUJTDZATc= cosmossdk.io/x/upgrade v0.1.1/go.mod h1:MNLptLPcIFK9CWt7Ra//8WUZAxweyRDNcbs5nkOcQy0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -236,6 +236,8 @@ github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/CosmWasm/wasmvm/v2 v2.1.4 h1:7EUVQjBxXHkVjL2AqqXD7hMEe0dmoNn2li9E4PWRAnA= +github.com/CosmWasm/wasmvm/v2 v2.1.4/go.mod h1:bMhLQL4Yp9CzJi9A83aR7VO9wockOsSlZbT4ztOl6bg= github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= @@ -313,8 +315,8 @@ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= @@ -338,6 +340,8 @@ 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-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ= +github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM= 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= @@ -347,15 +351,15 @@ github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZ github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v0.0.0-20231102162011-844f0582c2eb h1:6Po+YYKT5B5ZXN0wd2rwFBaebM0LufPf8p4zxOd48Kg= -github.com/cockroachdb/pebble v0.0.0-20231102162011-844f0582c2eb/go.mod h1:acMRUGd/BK8AUmQNK3spUCCGzFLZU2bSST3NMXSq2Kc= +github.com/cockroachdb/pebble v1.1.0 h1:pcFh8CdCIt2kmEpK0OIatq67Ln9uGDYY3d5XnE0LJG4= +github.com/cockroachdb/pebble v1.1.0/go.mod h1:sEHm5NOXxyiAoKWhoFxT8xMgd/f3RA6qUqQ1BXKrh2E= github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/cometbft/cometbft v0.38.5 h1:4lOcK5VTPrfbLOhNHmPYe6c7eDXHtBdMCQuKbAfFJdU= -github.com/cometbft/cometbft v0.38.5/go.mod h1:0tqKin+KQs8zDwzYD8rPHzSBIDNPuB4NrwwGDNb/hUg= +github.com/cometbft/cometbft v0.38.6 h1:QSgpCzrGWJ2KUq1qpw+FCfASRpE27T6LQbfEHscdyOk= +github.com/cometbft/cometbft v0.38.6/go.mod h1:8rSPxzUJYquCN8uuBgbUHOMg2KAwvr7CyUw+6ukO4nw= github.com/cometbft/cometbft-db v0.9.1 h1:MIhVX5ja5bXNHF8EYrThkG9F7r9kSfv8BX4LWaxWJ4M= github.com/cometbft/cometbft-db v0.9.1/go.mod h1:iliyWaoV0mRwBJoizElCwwRA9Tf7jZJOURcRZF9m60U= github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= @@ -376,21 +380,21 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= -github.com/cosmos/cosmos-db v1.0.0 h1:EVcQZ+qYag7W6uorBKFPvX6gRjw6Uq2hIh4hCWjuQ0E= -github.com/cosmos/cosmos-db v1.0.0/go.mod h1:iBvi1TtqaedwLdcrZVYRSSCb6eSy61NLj4UNmdIgs0U= -github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= -github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= -github.com/cosmos/cosmos-sdk v0.50.3 h1:zP0AXm54ws2t2qVWvcQhEYVafhOAREU2QL0gnbwjvXw= -github.com/cosmos/cosmos-sdk v0.50.3/go.mod h1:tlrkY1sntOt1q0OX/rqF0zRJtmXNoffAS6VFTcky+w8= +github.com/cosmos/cosmos-db v1.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAKs= +github.com/cosmos/cosmos-db v1.0.2/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA= +github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= +github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= +github.com/cosmos/cosmos-sdk v0.50.6 h1:efR3MsvMHX5sxS3be+hOobGk87IzlZbSpsI2x/Vw3hk= +github.com/cosmos/cosmos-sdk v0.50.6/go.mod h1:lVkRY6cdMJ0fG3gp8y4hFrsKZqF4z7y0M2UXFb9Yt40= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.4.11 h1:LZcMHrx4FjUgrqQSWeaGC1v/TeuVFqSLa43CC6aWR2g= -github.com/cosmos/gogoproto v1.4.11/go.mod h1:/g39Mh8m17X8Q/GDEs5zYTSNaNnInBSohtaxzQnYq1Y= -github.com/cosmos/iavl v1.0.0 h1:bw6t0Mv/mVCJvlMTOPHWLs5uUE3BRBfVWCRelOzl+so= -github.com/cosmos/iavl v1.0.0/go.mod h1:CmTGqMnRnucjxbjduneZXT+0vPgNElYvdefjX2q9tYc= +github.com/cosmos/gogoproto v1.4.12 h1:vB6Lbe/rtnYGjQuFxkPiPYiCybqFT8QvLipDZP8JpFE= +github.com/cosmos/gogoproto v1.4.12/go.mod h1:LnZob1bXRdUoqMMtwYlcR3wjiElmlC+FkjaZRv1/eLY= +github.com/cosmos/iavl v1.1.2 h1:zL9FK7C4L/P4IF1Dm5fIwz0WXCnn7Bp1M2FxH0ayM7Y= +github.com/cosmos/iavl v1.1.2/go.mod h1:jLeUvm6bGT1YutCaL2fIar/8vGUE8cPZvh/gXEWDaDM= github.com/cosmos/ibc-go/modules/capability v1.0.0 h1:r/l++byFtn7jHYa09zlAdSeevo8ci1mVZNO9+V0xsLE= github.com/cosmos/ibc-go/modules/capability v1.0.0/go.mod h1:D81ZxzjZAe0ZO5ambnvn1qedsFQ8lOwtqicG6liLBco= github.com/cosmos/ibc-go/v8 v8.0.0 h1:QKipnr/NGwc+9L7NZipURvmSIu+nw9jOIWTJuDBqOhg= @@ -450,14 +454,14 @@ github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:Htrtb github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= -github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= +github.com/dvsekhvalnov/jose2go v1.6.0 h1:Y9gnSnP4qEI0+/uQkHvFXeD2PLPJeXEL+ySMEA2EjTY= +github.com/dvsekhvalnov/jose2go v1.6.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 v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/emicklei/dot v1.6.0 h1:vUzuoVE8ipzS7QkES4UfxdpCwdU2U97m2Pb2tQCoYRY= -github.com/emicklei/dot v1.6.0/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= +github.com/emicklei/dot v1.6.1 h1:ujpDlBkkwgWUY+qPId5IwapRW/xEoligRSYjioR6DFI= +github.com/emicklei/dot v1.6.1/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= 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= @@ -469,8 +473,8 @@ 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/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA= -github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE= +github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= +github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= 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/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= @@ -491,8 +495,8 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/fxamacker/cbor/v2 v2.5.0 h1:oHsG0V/Q6E/wqTS2O1Cozzsy69nqCiguo5Q1a1ADivE= github.com/fxamacker/cbor/v2 v2.5.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= -github.com/getsentry/sentry-go v0.25.0 h1:q6Eo+hS+yoJlTO3uu/azhQadsD8V+jQn2D8VvX1eOyI= -github.com/getsentry/sentry-go v0.25.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= +github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= +github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= @@ -520,8 +524,8 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= -github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= @@ -599,8 +603,8 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw 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/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= @@ -667,8 +671,8 @@ github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3 github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= -github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= @@ -724,8 +728,8 @@ github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVH 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-metrics v0.5.2 h1:ErEYO2f//CjKsUDw4SmLzelsK6L3ZmOAR/4P9iS7ruY= -github.com/hashicorp/go-metrics v0.5.2/go.mod h1:KEjodfebIOuBYSAe/bHTm+HChmKSxAOXPBieMLYozDE= +github.com/hashicorp/go-metrics v0.5.3 h1:M5uADWMOGCTUNU1YuC4hfknOeHNaX54LDm4oYSucoNE= +github.com/hashicorp/go-metrics v0.5.3/go.mod h1:KEjodfebIOuBYSAe/bHTm+HChmKSxAOXPBieMLYozDE= 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-plugin v1.5.2 h1:aWv8eimFqWlsEiMrYZdPYl+FdHaBJSN4AWwGWfT1G2Y= @@ -812,8 +816,8 @@ github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= -github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg= +github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -837,8 +841,8 @@ github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6 github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/linxGnu/grocksdb v1.8.6 h1:O7I6SIGPrypf3f/gmrrLUBQDKfO8uOoYdWf4gLS06tc= -github.com/linxGnu/grocksdb v1.8.6/go.mod h1:xZCIb5Muw+nhbDK4Y5UJuOrin5MceOuiXkVUR7vp4WY= +github.com/linxGnu/grocksdb v1.8.14 h1:HTgyYalNwBSG/1qCQUIott44wU5b2Y9Kr3z7SK5OfGQ= +github.com/linxGnu/grocksdb v1.8.14/go.mod h1:QYiYypR2d4v63Wj1adOOfzglnoII0gLj3PNh4fZkcFA= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= @@ -861,8 +865,6 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= @@ -955,8 +957,8 @@ github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6 github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc h1:8bQZVK1X6BJR/6nYUPxQEP+ReTsceJTKizeuwjWOPUA= -github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67 h1:jik8PHtAIsPlCRJjJzl4udgEf7hawInF9texMeO2jrU= +github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= @@ -981,32 +983,32 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= -github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= +github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU= +github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k= 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= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= -github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= 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.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.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= -github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= +github.com/prometheus/common v0.52.2 h1:LW8Vk7BccEdONfrJBDffQGRtpSzi5CQaRZGtboOO2ck= +github.com/prometheus/common v0.52.2/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= -github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/prometheus/procfs v0.13.0 h1:GqzLlQyfsPbaEHaQkO7tbDlriv/4o5Hudv6OXHGKX7o= +github.com/prometheus/procfs v0.13.0/go.mod h1:cd4PFCR54QLnGKPaKGA6l+cfuNXtht43ZKY6tow0Y1g= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -1014,14 +1016,14 @@ 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.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= -github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo= github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A= -github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= +github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0= +github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= 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 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= @@ -1035,6 +1037,8 @@ github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0 github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/shamaton/msgpack/v2 v2.2.0 h1:IP1m01pHwCrMa6ZccP9B3bqxEMKMSmMVAVKk54g3L/Y= +github.com/shamaton/msgpack/v2 v2.2.0/go.mod h1:6khjYnkx73f7VQU7wjcFS9DFjs+59naVWJv1TB7qdOI= 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= @@ -1077,8 +1081,9 @@ github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5J 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.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= 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= @@ -1089,8 +1094,9 @@ 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/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= @@ -1154,16 +1160,20 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc= -go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs= -go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA= -go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM= -go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM= -go.opentelemetry.io/otel/sdk v1.20.0/go.mod h1:rmkSx1cZCm/tn16iWDn1GQbLtsW/LvsdEEFzCSRM6V0= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 h1:UNQQKPfTDe1J81ViolILjTKPr9WetKW6uei2hFgJmFs= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0/go.mod h1:r9vWsPS/3AQItv3OSlEJ/E4mbrhUbbw18meOjArPtKQ= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 h1:sv9kVfal0MK0wBMCOGr+HeJm9v803BkJxGrk2au7j08= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0/go.mod h1:SK2UL73Zy1quvRPonmOmRDiWk1KBV3LyIeeIxcEApWw= +go.opentelemetry.io/otel v1.22.0 h1:xS7Ku+7yTFvDfDraDIJVpw7XPyuHlB9MCiqqX5mcJ6Y= +go.opentelemetry.io/otel v1.22.0/go.mod h1:eoV4iAi3Ea8LkAEI9+GFT44O6T/D0GWAVFyZVCC6pMI= +go.opentelemetry.io/otel/metric v1.22.0 h1:lypMQnGyJYeuYPhOM/bgjbFM6WE44W1/T45er4d8Hhg= +go.opentelemetry.io/otel/metric v1.22.0/go.mod h1:evJGjVpZv0mQ5QBRJoBF64yMuOf4xCWdXjK8pzFvliY= +go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= +go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= go.opentelemetry.io/otel/sdk/metric v1.19.0 h1:EJoTO5qysMsYCa+w4UghwFV/ptQgqSL/8Ni+hx+8i1k= go.opentelemetry.io/otel/sdk/metric v1.19.0/go.mod h1:XjG0jQyFJrv2PbMvwND7LwCEhsJzCzV5210euduKcKY= -go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ= -go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU= +go.opentelemetry.io/otel/trace v1.22.0 h1:Hg6pPujv0XG9QaVbGOBVHunyuLcCC3jN7WEhPx83XD0= +go.opentelemetry.io/otel/trace v1.22.0/go.mod h1:RbbHXVqKES9QhzZq/fE5UnOSILqRt40a21sPw2He1xo= 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= @@ -1197,8 +1207,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U 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-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= -golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= +golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= +golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= 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= @@ -1210,8 +1220,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= -golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= +golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 h1:985EYyeCOxTpcgOTJpflJUwOeEz0CQOdPt73OzpE9F8= +golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI= 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= @@ -1238,8 +1248,8 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= 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= @@ -1299,8 +1309,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= -golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= +golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= 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= @@ -1326,8 +1336,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ= -golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= +golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI= +golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= 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= @@ -1342,8 +1352,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 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= @@ -1444,13 +1454,13 @@ golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= -golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= +golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE= -golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= +golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= +golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= 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= @@ -1532,8 +1542,8 @@ 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.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8= -golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk= +golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY= +golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= 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= @@ -1592,8 +1602,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.153.0 h1:N1AwGhielyKFaUqH07/ZSIQR3uNPcV7NVw0vj+j4iR4= -google.golang.org/api v0.153.0/go.mod h1:3qNJX5eOmhiWYc67jRA/3GsDw97UFb5ivv7Y2PrriAY= +google.golang.org/api v0.162.0 h1:Vhs54HkaEpkMBdgGdOT2P6F0csGG/vxDS0hWHJzmmps= +google.golang.org/api v0.162.0/go.mod h1:6SulDkfoBIg4NFmCuZ39XeeAgSHCPecfSUuDyYlAHs0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1710,12 +1720,12 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 h1:1hfbdAfFbkmpg41000wDVqr7jUpK/Yo+LPnIxxGzmkg= -google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic= -google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f h1:2yNACc1O40tTnrsbk9Cv6oxiW8pxI/pXj0wRtdlYmgY= -google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f/go.mod h1:Uy9bTZJqmfrw2rIBxgGLnamc78euZULUBrLZ9XTITKI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 h1:/jFB8jK5R3Sq3i/lmeZO0cATSzFfZaJq1J2Euan3XKU= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0/go.mod h1:FUoWkonphQm3RhTS+kOEhF8h0iDpm4tdXolVCeZ9KKA= +google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= +google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= +google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0= +google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1757,8 +1767,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU= -google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= +google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= +google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 h1:rNBFJjBCOgVr9pWD7rs/knKL4FRTKgpZmsRfV214zcA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0/go.mod h1:Dk1tviKTvMCz5tvh7t+fh94dhmQVHuCt2OzJB3CTW9Y= @@ -1778,8 +1788,8 @@ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= -google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/init-start.sh b/init-start.sh new file mode 100644 index 0000000..f975425 --- /dev/null +++ b/init-start.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +# Define the necessary environment variables : +MONIKER="junction-testing" +CHAIN_ID="junction" +DENOM="amf" +KEY_NAME="zaza" +AMOUNT="1500000000000000000000amf" +VALIDATOR_STAKE="1000000000000000amf" +KEY_RING_BACKEND="--keyring-backend test" + +# Remove the existing junctiond directory : +rm -rf ~/.junction + +# Initialize the junctiond node : +./build/junctiond init "$MONIKER" --default-denom "$DENOM" --chain-id "$CHAIN_ID" + +# Generate Keys : +./build/junctiond keys add $KEY_NAME $KEY_RING_BACKEND + +# Add the genesis account to the genesis file : +./build/junctiond genesis add-genesis-account "$KEY_NAME" $AMOUNT $KEY_RING_BACKEND + +# Stake the validator account in the genesis file : +./build/junctiond genesis gentx "$KEY_NAME" $VALIDATOR_STAKE $KEY_RING_BACKEND --gas-prices="0.0025amf" + +# Collect gentx files : +./build/junctiond genesis collect-gentxs + +# Modify the genesis file with the required changes +GENESIS_FILE="$HOME/.junction/config/genesis.json" +jq '.app_state.gov.params.max_deposit_period = "600s" | + .app_state.gov.params.voting_period = "600s" | + .app_state.gov.params.expedited_voting_period = "300s"' \ + $GENESIS_FILE > "$GENESIS_FILE.tmp" && mv "$GENESIS_FILE.tmp" "$GENESIS_FILE" +echo "Genesis file updated with new voting and deposit periods" + +# Detect the operating system +OS=$(uname) + +# Function to apply sed command based on the OS +apply_sed() { + local file="$1" + local pattern="$2" + local replacement="$3" + + if [ "$OS" = "Darwin" ]; then + sed -i '' "s|$pattern|$replacement|" "$file" + else + sed -i "s|$pattern|$replacement|" "$file" + fi +} +# Paths to configuration files +APP_TOML="$HOME/.junction/config/app.toml" +CONFIG_TOML="$HOME/.junction/config/config.toml" +CLIENT_TOML="$HOME/.junction/config/client.toml" + +# Modify the app.toml file with the required changes +apply_sed "$APP_TOML" 'minimum-gas-prices = ""' 'minimum-gas-prices = "0.00025amf"' +apply_sed "$APP_TOML" 'enable = false' 'enable = true' +apply_sed "$APP_TOML" 'swagger = false' 'swagger = true' +apply_sed "$APP_TOML" 'tcp://localhost:1317' 'tcp://0.0.0.0:1317' +echo "App.toml file updated with new gas prices, enabled Swagger, and updated address" + +# Modify laddr in config.toml to listen on all interfaces (0.0.0.0) +apply_sed "$CONFIG_TOML" 'laddr = "tcp://127.0.0.1:26657"' 'laddr = "tcp://0.0.0.0:26657"' +echo "Config.toml file updated to listen on all interfaces (0.0.0.0) on port 26657" + +# Modify node address in client.toml to 0.0.0.0 +apply_sed "$CLIENT_TOML" 'node = "tcp://localhost:26657"' 'node = "tcp://0.0.0.0:26657"' +echo "Client.toml file updated with new node address (0.0.0.0)" + +# Validate genesis file +./build/junctiond genesis validate-genesis + +# Run the junctiond node +./build/junctiond start \ No newline at end of file diff --git a/x/wasm/alias.go b/x/wasm/alias.go index 221be68..b2c5607 100644 --- a/x/wasm/alias.go +++ b/x/wasm/alias.go @@ -1,6 +1,6 @@ // autogenerated code using github.com/rigelrozanski/multitool // aliases generated for the following subdirectories: -// ALIASGEN: github.com/Cosmwasm/wasmd/x/wasm/types +// ALIASGEN: github.com/airchains-network/junction/x/wasm/types // ALIASGEN: github.com/airchains-network/junction/x/wasm/keeper package wasm diff --git a/x/wasm/client/cli/gov_tx.go b/x/wasm/client/cli/gov_tx.go index f70c88f..2c93d43 100644 --- a/x/wasm/client/cli/gov_tx.go +++ b/x/wasm/client/cli/gov_tx.go @@ -2,7 +2,6 @@ package cli import ( "bytes" - "encoding/hex" "fmt" "net/url" "strconv" @@ -76,12 +75,12 @@ func ProposalStoreCodeCmd() *cobra.Command { return errors.New("authority address is required") } - storeCodeMsg, err := parseStoreCodeArgs(args[0], authority, cmd.Flags()) + src, err := parseStoreCodeArgs(args[0], authority, cmd.Flags()) if err != nil { return err } - proposalMsg, err := v1.NewMsgSubmitProposal([]sdk.Msg{&storeCodeMsg}, deposit, clientCtx.GetFromAddress().String(), "", proposalTitle, summary, expedite) + proposalMsg, err := v1.NewMsgSubmitProposal([]sdk.Msg{&src}, deposit, clientCtx.GetFromAddress().String(), "", proposalTitle, summary, expedite) if err != nil { return err } @@ -166,12 +165,12 @@ func ProposalInstantiateContractCmd() *cobra.Command { return errors.New("authority address is required") } - instantiateMsg, err := parseInstantiateArgs(args[0], args[1], clientCtx.Keyring, authority, cmd.Flags()) + src, err := parseInstantiateArgs(args[0], args[1], clientCtx.Keyring, authority, cmd.Flags()) if err != nil { return err } - proposalMsg, err := v1.NewMsgSubmitProposal([]sdk.Msg{instantiateMsg}, deposit, clientCtx.GetFromAddress().String(), "", proposalTitle, summary, expedite) + proposalMsg, err := v1.NewMsgSubmitProposal([]sdk.Msg{src}, deposit, clientCtx.GetFromAddress().String(), "", proposalTitle, summary, expedite) if err != nil { return err } @@ -191,10 +190,8 @@ func ProposalInstantiateContractCmd() *cobra.Command { } func ProposalInstantiateContract2Cmd() *cobra.Command { - decoder := newArgDecoder(hex.DecodeString) cmd := &cobra.Command{ - Use: "instantiate-contract-2 [code_id_int64] [json_encoded_init_args] [salt] --authority [address] --label [text] --title [text] " + - "--summary [text] --admin [address,optional] --amount [coins,optional] --fix-msg [bool,optional]", + Use: "instantiate-contract-2 [code_id_int64] [json_encoded_init_args] --authority [address] --label [text] --title [text] --summary [text] --admin [address,optional] --amount [coins,optional]", Short: "Submit an instantiate wasm contract proposal with predictable address", Args: cobra.ExactArgs(3), RunE: func(cmd *cobra.Command, args []string) error { @@ -202,14 +199,7 @@ func ProposalInstantiateContract2Cmd() *cobra.Command { 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) - } + authority, err := cmd.Flags().GetString(flagAuthority) if err != nil { return fmt.Errorf("authority: %s", err) @@ -219,22 +209,12 @@ func ProposalInstantiateContract2Cmd() *cobra.Command { return errors.New("authority address is required") } - data, err := parseInstantiateArgs(args[0], args[1], clientCtx.Keyring, authority, cmd.Flags()) + src, err := parseInstantiateArgs(args[0], args[1], clientCtx.Keyring, authority, cmd.Flags()) if err != nil { return err } - instantiateMsg := &types.MsgInstantiateContract2{ - Sender: data.Sender, - Admin: data.Admin, - CodeID: data.CodeID, - Label: data.Label, - Msg: data.Msg, - Funds: data.Funds, - Salt: salt, - FixMsg: fixMsg, - } - proposalMsg, err := v1.NewMsgSubmitProposal([]sdk.Msg{instantiateMsg}, deposit, clientCtx.GetFromAddress().String(), "", proposalTitle, summary, expedite) + proposalMsg, err := v1.NewMsgSubmitProposal([]sdk.Msg{src}, deposit, clientCtx.GetFromAddress().String(), "", proposalTitle, summary, expedite) if err != nil { return err } @@ -248,8 +228,6 @@ func ProposalInstantiateContract2Cmd() *cobra.Command { 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") // proposal flags addCommonProposalFlags(cmd) @@ -277,8 +255,7 @@ func ProposalStoreAndInstantiateContractCmd() *cobra.Command { return errors.New("authority address is required") } - // Variable storeCodeMsg is not really used. But this allows us to reuse parseStoreCodeArgs. - storeCodeMsg, err := parseStoreCodeArgs(args[0], authority, cmd.Flags()) + src, err := parseStoreCodeArgs(args[0], authority, cmd.Flags()) if err != nil { return err } @@ -288,7 +265,7 @@ func ProposalStoreAndInstantiateContractCmd() *cobra.Command { return err } - source, builder, codeHash, err := parseVerificationFlags(storeCodeMsg.WASMByteCode, cmd.Flags()) + source, builder, codeHash, err := parseVerificationFlags(src.WASMByteCode, cmd.Flags()) if err != nil { return err } @@ -319,7 +296,7 @@ func ProposalStoreAndInstantiateContractCmd() *cobra.Command { // ensure sensible admin is set (or explicitly immutable) if adminStr == "" && !noAdmin { - return fmt.Errorf("you must set an admin or explicitly pass --no-admin to make it immutable (wasmd issue #719)") + return fmt.Errorf("you must set an admin or explicitly pass --no-admin to make it immutible (wasmd issue #719)") } if adminStr != "" && noAdmin { return fmt.Errorf("you set an admin and passed --no-admin, those cannot both be true") @@ -342,10 +319,10 @@ func ProposalStoreAndInstantiateContractCmd() *cobra.Command { } } - storeAndInstantiateMsg := types.MsgStoreAndInstantiateContract{ + msg := types.MsgStoreAndInstantiateContract{ Authority: authority, - WASMByteCode: storeCodeMsg.WASMByteCode, - InstantiatePermission: storeCodeMsg.InstantiatePermission, + WASMByteCode: src.WASMByteCode, + InstantiatePermission: src.InstantiatePermission, UnpinCode: unpinCode, Source: source, Builder: builder, @@ -355,11 +332,11 @@ func ProposalStoreAndInstantiateContractCmd() *cobra.Command { Msg: []byte(args[1]), Funds: amount, } - if err = storeAndInstantiateMsg.ValidateBasic(); err != nil { + if err = msg.ValidateBasic(); err != nil { return err } - proposalMsg, err := v1.NewMsgSubmitProposal([]sdk.Msg{&storeAndInstantiateMsg}, deposit, clientCtx.GetFromAddress().String(), "", proposalTitle, summary, expedite) + proposalMsg, err := v1.NewMsgSubmitProposal([]sdk.Msg{&msg}, deposit, clientCtx.GetFromAddress().String(), "", proposalTitle, summary, expedite) if err != nil { return err } @@ -403,12 +380,12 @@ func ProposalMigrateContractCmd() *cobra.Command { return errors.New("authority address is required") } - migrateMsg, err := parseMigrateContractArgs(args, authority) + src, err := parseMigrateContractArgs(args, authority) if err != nil { return err } - proposalMsg, err := v1.NewMsgSubmitProposal([]sdk.Msg{&migrateMsg}, deposit, clientCtx.GetFromAddress().String(), "", proposalTitle, summary, expedite) + proposalMsg, err := v1.NewMsgSubmitProposal([]sdk.Msg{&src}, deposit, clientCtx.GetFromAddress().String(), "", proposalTitle, summary, expedite) if err != nil { return err } @@ -542,12 +519,12 @@ func ProposalUpdateContractAdminCmd() *cobra.Command { return errors.New("authority address is required") } - upgradeAdminMsg, err := parseUpdateContractAdminArgs(args, authority) + src, err := parseUpdateContractAdminArgs(args, authority) if err != nil { return err } - proposalMsg, err := v1.NewMsgSubmitProposal([]sdk.Msg{&upgradeAdminMsg}, deposit, clientCtx.GetFromAddress().String(), "", proposalTitle, summary, expedite) + proposalMsg, err := v1.NewMsgSubmitProposal([]sdk.Msg{&src}, deposit, clientCtx.GetFromAddress().String(), "", proposalTitle, summary, expedite) if err != nil { return err } @@ -770,7 +747,7 @@ func ProposalUpdateInstantiateConfigCmd() *cobra.Command { Long: strings.TrimSpace( fmt.Sprintf(`Submit an update instantiate config proposal for multiple code ids. -Example: +Example: $ %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 { @@ -962,16 +939,15 @@ func ProposalStoreAndMigrateContractCmd() *cobra.Command { return errors.New("authority address is required") } - // Variable storeCodeMsg is not really used. But this allows us to reuse parseStoreCodeArgs. - storeCodeMsg, err := parseStoreCodeArgs(args[0], authority, cmd.Flags()) + src, err := parseStoreCodeArgs(args[0], authority, cmd.Flags()) if err != nil { return err } msg := types.MsgStoreAndMigrateContract{ Authority: authority, - WASMByteCode: storeCodeMsg.WASMByteCode, - InstantiatePermission: storeCodeMsg.InstantiatePermission, + WASMByteCode: src.WASMByteCode, + InstantiatePermission: src.InstantiatePermission, Msg: []byte(args[2]), Contract: args[1], } diff --git a/x/wasm/client/cli/tx.go b/x/wasm/client/cli/tx.go index 2100acb..fcef5a3 100644 --- a/x/wasm/client/cli/tx.go +++ b/x/wasm/client/cli/tx.go @@ -112,6 +112,7 @@ func parseStoreCodeArgs(file, sender string, flags *flag.FlagSet) (types.MsgStor // gzip the wasm file if ioutils.IsWasm(wasm) { wasm, err = ioutils.GzipIt(wasm) + if err != nil { return types.MsgStoreCode{}, err } @@ -228,7 +229,7 @@ $ %s tx wasm instantiate 1 '{"foo":"bar"}' --admin="$(%s keys show mykey -a)" \ return cmd } -// InstantiateContract2Cmd will instantiate a contract from previously uploaded code with predictable address generated +// InstantiateContract2Cmd will instantiate a contract from previously uploaded code with predicable address generated func InstantiateContract2Cmd() *cobra.Command { decoder := newArgDecoder(hex.DecodeString) cmd := &cobra.Command{ @@ -322,7 +323,7 @@ func parseInstantiateArgs(rawCodeID, initMsg string, kr keyring.Keyring, sender // ensure sensible admin is set (or explicitly immutable) if adminStr == "" && !noAdmin { - return nil, fmt.Errorf("you must set an admin or explicitly pass --no-admin to make it immutable (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 nil, fmt.Errorf("you set an admin and passed --no-admin, those cannot both be true") @@ -357,7 +358,7 @@ func parseInstantiateArgs(rawCodeID, initMsg string, kr keyring.Keyring, sender return &msg, msg.ValidateBasic() } -// ExecuteContractCmd will execute a contract method using its address and JSON-encoded arguments. +// ExecuteContractCmd will instantiate a contract from previously uploaded code. func ExecuteContractCmd() *cobra.Command { cmd := &cobra.Command{ Use: "execute [contract_addr_bech32] [json_encoded_send_args] --amount [coins,optional]", diff --git a/x/wasm/ibc.go b/x/wasm/ibc.go index c20539f..4e0ad4b 100644 --- a/x/wasm/ibc.go +++ b/x/wasm/ibc.go @@ -5,7 +5,6 @@ import ( wasmvmtypes "github.com/CosmWasm/wasmvm/v2/types" capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" host "github.com/cosmos/ibc-go/v8/modules/core/24-host" @@ -19,12 +18,6 @@ import ( "github.com/airchains-network/junction/x/wasm/types" ) -// DefaultMaxIBCCallbackGas is the default value of maximum gas that an IBC callback can use. -// If the callback uses more gas, it will be out of gas and the contract state changes will be reverted, -// but the transaction will be committed. -// Pass this to the callbacks middleware or choose a custom value. -const DefaultMaxIBCCallbackGas = uint64(1_000_000) - var _ porttypes.IBCModule = IBCHandler{} // internal interface that is implemented by ibc middleware @@ -285,7 +278,7 @@ func (i IBCHandler) OnRecvPacket( msg := wasmvmtypes.IBCPacketReceiveMsg{Packet: newIBCPacket(packet), Relayer: relayer.String()} ack, err := i.keeper.OnRecvPacket(ctx.WithEventManager(em), contractAddr, msg) if err != nil { - ack = CreateErrorAcknowledgement(err) + ack = channeltypes.NewErrorAcknowledgement(err) // the state gets reverted, so we drop all captured events } else if ack == nil || ack.Success() { // emit all contract and submessage events on success @@ -333,146 +326,22 @@ func (i IBCHandler) OnTimeoutPacket(ctx sdk.Context, packet channeltypes.Packet, return nil } -// IBCSendPacketCallback implements the IBC Callbacks ContractKeeper interface -// see https://github.com/cosmos/ibc-go/blob/main/docs/architecture/adr-008-app-caller-cbs.md#contractkeeper -func (i IBCHandler) IBCSendPacketCallback( - cachedCtx sdk.Context, - sourcePort string, - sourceChannel string, - timeoutHeight clienttypes.Height, - timeoutTimestamp uint64, - packetData []byte, - contractAddress, - packetSenderAddress string, -) error { - _, err := validateSender(contractAddress, packetSenderAddress) - if err != nil { - return err - } - - // no-op, since we are not interested in this callback - return nil -} - -// IBCOnAcknowledgementPacketCallback implements the IBC Callbacks ContractKeeper interface -// see https://github.com/cosmos/ibc-go/blob/main/docs/architecture/adr-008-app-caller-cbs.md#contractkeeper -func (i IBCHandler) IBCOnAcknowledgementPacketCallback( - cachedCtx sdk.Context, - packet channeltypes.Packet, - acknowledgement []byte, - relayer sdk.AccAddress, - contractAddress, - packetSenderAddress string, -) error { - contractAddr, err := validateSender(contractAddress, packetSenderAddress) - if err != nil { - return err - } - - msg := wasmvmtypes.IBCSourceCallbackMsg{ - Acknowledgement: &wasmvmtypes.IBCAckCallbackMsg{ - Acknowledgement: wasmvmtypes.IBCAcknowledgement{Data: acknowledgement}, - OriginalPacket: newIBCPacket(packet), - Relayer: relayer.String(), - }, - } - err = i.keeper.IBCSourceCallback(cachedCtx, contractAddr, msg) - if err != nil { - return errorsmod.Wrap(err, "on source chain callback ack") - } - - return nil -} - -// IBCOnTimeoutPacketCallback implements the IBC Callbacks ContractKeeper interface -// see https://github.com/cosmos/ibc-go/blob/main/docs/architecture/adr-008-app-caller-cbs.md#contractkeeper -func (i IBCHandler) IBCOnTimeoutPacketCallback( - cachedCtx sdk.Context, - packet channeltypes.Packet, - relayer sdk.AccAddress, - contractAddress, - packetSenderAddress string, -) error { - contractAddr, err := validateSender(contractAddress, packetSenderAddress) - if err != nil { - return err - } - - msg := wasmvmtypes.IBCSourceCallbackMsg{ - Timeout: &wasmvmtypes.IBCTimeoutCallbackMsg{ - Packet: newIBCPacket(packet), - Relayer: relayer.String(), - }, - } - err = i.keeper.IBCSourceCallback(cachedCtx, contractAddr, msg) - if err != nil { - return errorsmod.Wrap(err, "on source chain callback timeout") - } - return nil -} - -// IBCReceivePacketCallback implements the IBC Callbacks ContractKeeper interface -// see https://github.com/cosmos/ibc-go/blob/main/docs/architecture/adr-008-app-caller-cbs.md#contractkeeper -func (i IBCHandler) IBCReceivePacketCallback( - cachedCtx sdk.Context, - packet ibcexported.PacketI, - ack ibcexported.Acknowledgement, - contractAddress string, -) error { - // sender validation makes no sense here, as the receiver is never the sender - contractAddr, err := sdk.AccAddressFromBech32(contractAddress) - if err != nil { - return err - } - - msg := wasmvmtypes.IBCDestinationCallbackMsg{ - Ack: wasmvmtypes.IBCAcknowledgement{Data: ack.Acknowledgement()}, - Packet: newIBCPacket(packet), - } - - err = i.keeper.IBCDestinationCallback(cachedCtx, contractAddr, msg) - if err != nil { - return errorsmod.Wrap(err, "on destination chain callback") - } - - return nil -} - -func validateSender(contractAddr, senderAddr string) (sdk.AccAddress, error) { - contractAddress, err := sdk.AccAddressFromBech32(contractAddr) - if err != nil { - return nil, errorsmod.Wrapf(err, "contract address") - } - senderAddress, err := sdk.AccAddressFromBech32(senderAddr) - if err != nil { - return nil, errorsmod.Wrapf(err, "packet sender address") - } - - // We only allow the contract that sent the message to receive source chain callbacks for it. - if !contractAddress.Equals(senderAddress) { - return nil, errorsmod.Wrapf(types.ErrExecuteFailed, "contract address %s does not match packet sender %s", contractAddr, senderAddress) - } - - return contractAddress, nil -} - -func newIBCPacket(packet ibcexported.PacketI) wasmvmtypes.IBCPacket { +func newIBCPacket(packet channeltypes.Packet) wasmvmtypes.IBCPacket { timeout := wasmvmtypes.IBCTimeout{ - Timestamp: packet.GetTimeoutTimestamp(), + Timestamp: packet.TimeoutTimestamp, } - timeoutHeight := packet.GetTimeoutHeight() - if !timeoutHeight.IsZero() { + if !packet.TimeoutHeight.IsZero() { timeout.Block = &wasmvmtypes.IBCTimeoutBlock{ - Height: timeoutHeight.GetRevisionHeight(), - Revision: timeoutHeight.GetRevisionNumber(), + Height: packet.TimeoutHeight.RevisionHeight, + Revision: packet.TimeoutHeight.RevisionNumber, } } return wasmvmtypes.IBCPacket{ - Data: packet.GetData(), - Src: wasmvmtypes.IBCEndpoint{ChannelID: packet.GetSourceChannel(), PortID: packet.GetSourcePort()}, - Dest: wasmvmtypes.IBCEndpoint{ChannelID: packet.GetDestChannel(), PortID: packet.GetDestPort()}, - Sequence: packet.GetSequence(), + Data: packet.Data, + Src: wasmvmtypes.IBCEndpoint{ChannelID: packet.SourceChannel, PortID: packet.SourcePort}, + Dest: wasmvmtypes.IBCEndpoint{ChannelID: packet.DestinationChannel, PortID: packet.DestinationPort}, + Sequence: packet.Sequence, Timeout: timeout, } } @@ -489,12 +358,3 @@ func ValidateChannelParams(channelID string) error { } return nil } - -// CreateErrorAcknowledgement turns an error into an error acknowledgement. -// -// This function is x/wasm specific and might include the full error text in the future -// as we gain confidence that it is deterministic. Don't use it in other contexts. -// See also https://github.com/CosmWasm/wasmd/issues/1740. -func CreateErrorAcknowledgement(err error) ibcexported.Acknowledgement { - return channeltypes.NewErrorAcknowledgementWithCodespace(err) -} diff --git a/x/wasm/ibc_integration_test.go b/x/wasm/ibc_integration_test.go index bc9170a..36d12be 100644 --- a/x/wasm/ibc_integration_test.go +++ b/x/wasm/ibc_integration_test.go @@ -1,9 +1,7 @@ package wasm_test import ( - "encoding/base64" "encoding/json" - "fmt" "testing" wasmvm "github.com/CosmWasm/wasmvm/v2" @@ -173,17 +171,13 @@ func TestOnIBCPacketReceive(t *testing.T) { expAck: []byte(`{"error":"invalid packet: Generic error: my error"}`), }, "with returned msg fails": { - // ErrInvalidAddress (https://github.com/cosmos/cosmos-sdk/blob/v0.50.7/types/errors/errors.go#L28-L29) packetData: []byte(`{"return_msgs": {"msgs": [{"bank":{"send":{"to_address": "invalid-address", "amount": [{"denom": "ALX", "amount": "1"}]}}}]}}`), - expAck: []byte(`{"error":"ABCI error: sdk/7: error handling packet: see events for details"}`), + expAck: []byte(`{"error":"ABCI code: 7: error handling packet: see events for details"}`), }, "with contract panic": { packetData: []byte(`{"panic":{}}`), expPacketNotHandled: true, }, - "without ack": { - packetData: []byte(`{"no_ack":{}}`), - }, } for name, spec := range specs { t.Run(name, func(t *testing.T) { @@ -236,13 +230,13 @@ func TestOnIBCPacketReceive(t *testing.T) { // then if spec.expPacketNotHandled { - const contractPanicToErrMsg = `recovered: Error calling the VM: Error executing Wasm: Wasmer runtime error: RuntimeError: Aborted: panicked at` + const contractPanicToErrMsg = `recovered: Error calling the VM: Error executing Wasm: Wasmer runtime error: RuntimeError: Aborted: panicked at 'This page intentionally faulted'` assert.ErrorContains(t, err, contractPanicToErrMsg) require.Nil(t, *capturedAck) return } + require.NoError(t, err) if spec.expAck != nil { - require.NoError(t, err) assert.Equal(t, spec.expAck, *capturedAck, string(*capturedAck)) } else { require.Nil(t, *capturedAck) @@ -251,94 +245,6 @@ func TestOnIBCPacketReceive(t *testing.T) { } } -func TestIBCAsyncAck(t *testing.T) { - // given 2 chains with a mock on chain A to control the IBC flow - // and the ibc-reflect contract on chain B - // when the no_ack package is relayed - // then the contract does not produce an ack - // and - // when the async_ack message is executed on chain B - // then the contract produces the ack - - ackBytes := []byte("my ack") - - mockContractEngine := NewCaptureAckTestContractEngine() - chainAOpts := []wasmkeeper.Option{ - wasmkeeper.WithWasmEngine(mockContractEngine), - } - var ( - coord = wasmibctesting.NewCoordinator(t, 2, chainAOpts) - chainA = coord.GetChain(wasmibctesting.GetChainID(1)) - chainB = coord.GetChain(wasmibctesting.GetChainID(2)) - ) - // setup chain A contract metadata for mock - myMockContractAddr := chainA.SeedNewContractInstance() // setups env but uses mock contract - - // setup chain B contracts - reflectID := chainB.StoreCodeFile("./keeper/testdata/reflect_1_5.wasm").CodeID - initMsg, err := json.Marshal(wasmkeeper.IBCReflectInitMsg{ReflectCodeID: reflectID}) - require.NoError(t, err) - codeID := chainB.StoreCodeFile("./keeper/testdata/ibc_reflect.wasm").CodeID - ibcReflectContractAddr := chainB.InstantiateContract(codeID, initMsg) - - // establish IBC channels - var ( - sourcePortID = chainA.ContractInfo(myMockContractAddr).IBCPortID - counterpartPortID = chainB.ContractInfo(ibcReflectContractAddr).IBCPortID - path = wasmibctesting.NewPath(chainA, chainB) - ) - path.EndpointA.ChannelConfig = &ibctesting.ChannelConfig{ - PortID: sourcePortID, Version: "ibc-reflect-v1", Order: channeltypes.UNORDERED, - } - path.EndpointB.ChannelConfig = &ibctesting.ChannelConfig{ - PortID: counterpartPortID, Version: "ibc-reflect-v1", Order: channeltypes.UNORDERED, - } - - coord.SetupConnections(path) - coord.CreateChannels(path) - coord.CommitBlock(chainA, chainB) - require.Equal(t, 0, len(chainA.PendingSendPackets)) - require.Equal(t, 0, len(chainB.PendingSendPackets)) - - // when the "no_ack" ibc packet is sent from chain A to chain B - capturedAck := mockContractEngine.SubmitIBCPacket(t, path, chainA, myMockContractAddr, []byte(`{"no_ack":{}}`)) - coord.CommitBlock(chainA, chainB) - - require.Equal(t, 1, len(chainA.PendingSendPackets)) - require.Equal(t, 0, len(chainB.PendingSendPackets)) - - // we don't expect an ack yet - err = path.RelayPacketWithoutAck(chainA.PendingSendPackets[0], nil) - noAckPacket := chainA.PendingSendPackets[0] - chainA.PendingSendPackets = []channeltypes.Packet{} - require.NoError(t, err) - assert.Nil(t, *capturedAck) - - // when the "async_ack" ibc packet is sent from chain A to chain B - destChannel := path.EndpointB.ChannelID - packetSeq := 1 - ackData := base64.StdEncoding.EncodeToString(ackBytes) - ack := fmt.Sprintf(`{"data":"%s"}`, ackData) - msg := fmt.Sprintf(`{"async_ack":{"channel_id":"%s","packet_sequence": "%d", "ack": %s}}`, destChannel, packetSeq, ack) - res, err := chainB.SendMsgs(&types.MsgExecuteContract{ - Sender: chainB.SenderAccount.GetAddress().String(), - Contract: ibcReflectContractAddr.String(), - Msg: []byte(msg), - }) - require.NoError(t, err) - - // relay the ack - err = path.EndpointA.UpdateClient() - require.NoError(t, err) - acknowledgement, err := wasmibctesting.ParseAckFromEvents(res.GetEvents()) - require.NoError(t, err) - err = path.EndpointA.AcknowledgePacket(noAckPacket, acknowledgement) - require.NoError(t, err) - - // now ack for the no_ack packet should have arrived - require.Equal(t, ackBytes, *capturedAck) -} - // mock to submit an ibc data package from given chain and capture the ack type captureAckTestContractEngine struct { *wasmtesting.MockWasmEngine diff --git a/x/wasm/ibc_test.go b/x/wasm/ibc_test.go index 06d5fbc..3daf715 100644 --- a/x/wasm/ibc_test.go +++ b/x/wasm/ibc_test.go @@ -16,7 +16,6 @@ import ( "github.com/cosmos/cosmos-sdk/types/address" "github.com/airchains-network/junction/x/wasm/keeper" - "github.com/airchains-network/junction/x/wasm/keeper/wasmtesting" "github.com/airchains-network/junction/x/wasm/types" ) @@ -52,8 +51,8 @@ func TestOnRecvPacket(t *testing.T) { }, "contract returns err response": { ibcPkg: anyContractIBCPkg, - contractRsp: CreateErrorAcknowledgement(types.ErrInvalid.Wrap("testing")), - expAck: CreateErrorAcknowledgement(types.ErrInvalid.Wrap("testing")), + contractRsp: channeltypes.NewErrorAcknowledgement(types.ErrInvalid.Wrap("testing")), + expAck: channeltypes.NewErrorAcknowledgement(types.ErrInvalid.Wrap("testing")), expEvents: sdk.Events{ { Type: "ibc_packet_received", @@ -88,7 +87,7 @@ func TestOnRecvPacket(t *testing.T) { "returned messages executed with error": { ibcPkg: anyContractIBCPkg, contractOkMsgExecErr: types.ErrInvalid.Wrap("testing"), - expAck: CreateErrorAcknowledgement(types.ErrInvalid.Wrap("testing")), + expAck: channeltypes.NewErrorAcknowledgement(types.ErrInvalid.Wrap("testing")), expEvents: sdk.Events{{ Type: "ibc_packet_received", Attributes: []abci.EventAttribute{ @@ -102,14 +101,14 @@ func TestOnRecvPacket(t *testing.T) { } for name, spec := range specs { t.Run(name, func(t *testing.T) { - mock := wasmtesting.IBCContractKeeperMock{ + mock := IBCContractKeeperMock{ OnRecvPacketFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, msg wasmvmtypes.IBCPacketReceiveMsg) (ibcexported.Acknowledgement, error) { // additional custom event to confirm event handling on state commit/ rollback ctx.EventManager().EmitEvent(myCustomEvent) return spec.contractRsp, spec.contractOkMsgExecErr }, } - h := NewIBCHandler(&mock, nil, nil) + h := NewIBCHandler(mock, nil, nil) em := &sdk.EventManager{} ctx := sdk.Context{}.WithEventManager(em) if spec.expPanic { @@ -196,3 +195,17 @@ func IBCPacketFixture(mutators ...func(p *channeltypes.Packet)) channeltypes.Pac } return r } + +var _ types.IBCContractKeeper = &IBCContractKeeperMock{} + +type IBCContractKeeperMock struct { + types.IBCContractKeeper + OnRecvPacketFn func(ctx sdk.Context, contractAddr sdk.AccAddress, msg wasmvmtypes.IBCPacketReceiveMsg) (ibcexported.Acknowledgement, error) +} + +func (m IBCContractKeeperMock) OnRecvPacket(ctx sdk.Context, contractAddr sdk.AccAddress, msg wasmvmtypes.IBCPacketReceiveMsg) (ibcexported.Acknowledgement, error) { + if m.OnRecvPacketFn == nil { + panic("not expected to be called") + } + return m.OnRecvPacketFn(ctx, contractAddr, msg) +} diff --git a/x/wasm/ibctesting/chain.go b/x/wasm/ibctesting/chain.go index 09d4e41..942c175 100644 --- a/x/wasm/ibctesting/chain.go +++ b/x/wasm/ibctesting/chain.go @@ -15,7 +15,7 @@ import ( tmversion "github.com/cometbft/cometbft/version" capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" //nolint:staticcheck channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" commitmenttypes "github.com/cosmos/ibc-go/v8/modules/core/23-commitment/types" host "github.com/cosmos/ibc-go/v8/modules/core/24-host" diff --git a/x/wasm/ibctesting/endpoint.go b/x/wasm/ibctesting/endpoint.go index 54a20bd..eb519c2 100644 --- a/x/wasm/ibctesting/endpoint.go +++ b/x/wasm/ibctesting/endpoint.go @@ -5,7 +5,7 @@ import ( "strings" abci "github.com/cometbft/cometbft/abci/types" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" //nolint:staticcheck connectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" commitmenttypes "github.com/cosmos/ibc-go/v8/modules/core/23-commitment/types" diff --git a/x/wasm/ibctesting/event_utils.go b/x/wasm/ibctesting/event_utils.go index b383fc0..cc6dea6 100644 --- a/x/wasm/ibctesting/event_utils.go +++ b/x/wasm/ibctesting/event_utils.go @@ -7,7 +7,7 @@ import ( "strings" abci "github.com/cometbft/cometbft/abci/types" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" //nolint:staticcheck channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" ) diff --git a/x/wasm/ibctesting/events.go b/x/wasm/ibctesting/events.go index 4bd939d..d30ca57 100644 --- a/x/wasm/ibctesting/events.go +++ b/x/wasm/ibctesting/events.go @@ -6,7 +6,7 @@ import ( "strconv" abci "github.com/cometbft/cometbft/abci/types" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" //nolint:staticcheck connectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" "github.com/stretchr/testify/suite" diff --git a/x/wasm/ibctesting/path.go b/x/wasm/ibctesting/path.go index e0c0b4a..0bc4943 100644 --- a/x/wasm/ibctesting/path.go +++ b/x/wasm/ibctesting/path.go @@ -89,57 +89,6 @@ func (path *Path) RelayPacket(packet channeltypes.Packet, _ []byte) error { return fmt.Errorf("packet commitment does not exist on either endpoint for provided packet") } -// RelayPacketWithoutAck attempts to relay the packet first on EndpointA and then on EndpointB -// 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. -// In contrast to RelayPacket, this function does not acknowledge the packet and expects it to have no acknowledgement yet. -// It is useful for testing async acknowledgement. -func (path *Path) RelayPacketWithoutAck(packet channeltypes.Packet, _ []byte) error { - pc := path.EndpointA.Chain.App.GetIBCKeeper().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 - if err := path.EndpointB.UpdateClient(); err != nil { - return err - } - - res, err := path.EndpointB.RecvPacketWithResult(packet) - if err != nil { - return err - } - - _, err = ParseAckFromEvents(res.GetEvents()) - if err == nil { - return fmt.Errorf("tried to relay packet without ack but got ack") - } - - return nil - } - - pc = path.EndpointB.Chain.App.GetIBCKeeper().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 - if err := path.EndpointA.UpdateClient(); err != nil { - return err - } - - res, err := path.EndpointA.RecvPacketWithResult(packet) - if err != nil { - return err - } - - _, err = ParseAckFromEvents(res.GetEvents()) - if err == nil { - return fmt.Errorf("tried to relay packet without ack but got ack") - } - - return nil - } - - return fmt.Errorf("packet commitment does not exist on either endpoint for provided packet") -} - // SendMsg delivers the provided messages to the chain. The counterparty // client is updated with the new source consensus state. func (path *Path) SendMsg(msgs ...sdk.Msg) error { diff --git a/x/wasm/keeper/addresses.go b/x/wasm/keeper/addresses.go index b08e999..ef71f41 100644 --- a/x/wasm/keeper/addresses.go +++ b/x/wasm/keeper/addresses.go @@ -22,8 +22,8 @@ func (k Keeper) ClassicAddressGenerator() AddressGenerator { } } -// PredictableAddressGenerator generates a predictable contract address -func PredictableAddressGenerator(creator sdk.AccAddress, salt, msg []byte, fixMsg bool) AddressGenerator { +// PredicableAddressGenerator generates a predictable contract address +func PredicableAddressGenerator(creator sdk.AccAddress, salt, msg []byte, fixMsg bool) AddressGenerator { return func(_ context.Context, _ uint64, checksum []byte) sdk.AccAddress { if !fixMsg { // clear msg to not be included in the address generation msg = []byte{} diff --git a/x/wasm/keeper/capabilities.go b/x/wasm/keeper/capabilities.go index d312370..b8b53d0 100644 --- a/x/wasm/keeper/capabilities.go +++ b/x/wasm/keeper/capabilities.go @@ -16,6 +16,5 @@ func BuiltInCapabilities() []string { "cosmwasm_1_3", "cosmwasm_1_4", "cosmwasm_2_0", - "cosmwasm_2_1", } } diff --git a/x/wasm/keeper/contract_keeper.go b/x/wasm/keeper/contract_keeper.go index 44a0e1e..4ead852 100644 --- a/x/wasm/keeper/contract_keeper.go +++ b/x/wasm/keeper/contract_keeper.go @@ -88,7 +88,7 @@ func (p PermissionedKeeper) Instantiate2( initMsg, label, deposit, - PredictableAddressGenerator(creator, salt, initMsg, fixMsg), + PredicableAddressGenerator(creator, salt, initMsg, fixMsg), p.authZPolicy, ) } diff --git a/x/wasm/keeper/contract_keeper_test.go b/x/wasm/keeper/contract_keeper_test.go index ba07cfb..2613adb 100644 --- a/x/wasm/keeper/contract_keeper_test.go +++ b/x/wasm/keeper/contract_keeper_test.go @@ -7,7 +7,6 @@ import ( "strings" "testing" - wasmvmtypes "github.com/CosmWasm/wasmvm/v2/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -15,7 +14,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/airchains-network/junction/x/wasm/keeper/testdata" "github.com/airchains-network/junction/x/wasm/keeper/wasmtesting" "github.com/airchains-network/junction/x/wasm/types" ) @@ -171,36 +169,3 @@ func TestInstantiate2(t *testing.T) { }) } } - -func TestQuerierError(t *testing.T) { - parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities) - parentCtx = parentCtx.WithGasMeter(storetypes.NewInfiniteGasMeter()) - - contract := InstantiateReflectExampleContract(t, parentCtx, keepers) - - // this query will fail in the contract because there is no such reply - erroringQuery := testdata.ReflectQueryMsg{ - SubMsgResult: &testdata.SubCall{ - ID: 1, - }, - } - // we make the reflect contract run the erroring query to check if our error stays - queryType := testdata.ReflectQueryMsg{ - Chain: &testdata.ChainQuery{ - Request: &wasmvmtypes.QueryRequest{ - Wasm: &wasmvmtypes.WasmQuery{ - Smart: &wasmvmtypes.SmartQuery{ - ContractAddr: contract.Contract.String(), - Msg: mustMarshal(t, erroringQuery), - }, - }, - }, - }, - } - query := mustMarshal(t, queryType) - _, err := keepers.WasmKeeper.QuerySmart(parentCtx, contract.Contract, query) - require.Error(t, err) - - // we expect the contract's "reply 1 not found" to be in there - assert.Contains(t, err.Error(), "reply 1 not found") -} diff --git a/x/wasm/keeper/events_test.go b/x/wasm/keeper/events_test.go index c104706..d6a3022 100644 --- a/x/wasm/keeper/events_test.go +++ b/x/wasm/keeper/events_test.go @@ -246,18 +246,6 @@ func TestNewWasmModuleEvent(t *testing.T) { sdk.NewAttribute("_contract_address", myContract.String()), sdk.NewAttribute("my-real-key", "some-val"))}, }, - "empty value": { - src: []wasmvmtypes.EventAttribute{{Key: "myKey", Value: ""}}, - exp: sdk.Events{sdk.NewEvent("wasm", - sdk.NewAttribute("_contract_address", myContract.String()), - sdk.NewAttribute("myKey", ""))}, - }, - "whitespace-only value": { - src: []wasmvmtypes.EventAttribute{{Key: "myKey", Value: " "}}, - exp: sdk.Events{sdk.NewEvent("wasm", - sdk.NewAttribute("_contract_address", myContract.String()), - sdk.NewAttribute("myKey", ""))}, - }, "empty elements": { src: make([]wasmvmtypes.EventAttribute, 10), isError: true, diff --git a/x/wasm/keeper/handler_plugin.go b/x/wasm/keeper/handler_plugin.go index c49c12f..ac38a02 100644 --- a/x/wasm/keeper/handler_plugin.go +++ b/x/wasm/keeper/handler_plugin.go @@ -39,7 +39,6 @@ type SDKMessageHandler struct { // NewDefaultMessageHandler constructor func NewDefaultMessageHandler( - keeper *Keeper, router MessageRouter, ics4Wrapper types.ICS4Wrapper, channelKeeper types.ChannelKeeper, @@ -55,7 +54,7 @@ func NewDefaultMessageHandler( } return NewMessageHandlerChain( NewSDKMessageHandler(cdc, router, encoders), - NewIBCRawPacketHandler(ics4Wrapper, keeper, channelKeeper, capabilityKeeper), + NewIBCRawPacketHandler(ics4Wrapper, channelKeeper, capabilityKeeper), NewBurnCoinMessageHandler(bankKeeper), ) } @@ -125,20 +124,6 @@ func (h SDKMessageHandler) handleSdkMessage(ctx sdk.Context, contractAddr sdk.Ad return nil, errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "can't route message %+v", msg) } -type callDepthMessageHandler struct { - Messenger - MaxCallDepth uint32 -} - -func (h callDepthMessageHandler) DispatchMsg(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, msgResponses [][]*codectypes.Any, err error) { - ctx, err = checkAndIncreaseCallDepth(ctx, h.MaxCallDepth) - if err != nil { - return nil, nil, nil, err - } - - return h.Messenger.DispatchMsg(ctx, contractAddr, contractIBCPortID, msg) -} - // MessageHandlerChain defines a chain of handlers that are called one by one until it can be handled. type MessageHandlerChain struct { handlers []Messenger @@ -176,16 +161,14 @@ func (m MessageHandlerChain) DispatchMsg(ctx sdk.Context, contractAddr sdk.AccAd // IBCRawPacketHandler handles IBC.SendPacket messages which are published to an IBC channel. type IBCRawPacketHandler struct { ics4Wrapper types.ICS4Wrapper - wasmKeeper types.IBCContractKeeper channelKeeper types.ChannelKeeper capabilityKeeper types.CapabilityKeeper } // NewIBCRawPacketHandler constructor -func NewIBCRawPacketHandler(ics4Wrapper types.ICS4Wrapper, wasmKeeper types.IBCContractKeeper, channelKeeper types.ChannelKeeper, capabilityKeeper types.CapabilityKeeper) IBCRawPacketHandler { +func NewIBCRawPacketHandler(ics4Wrapper types.ICS4Wrapper, channelKeeper types.ChannelKeeper, capabilityKeeper types.CapabilityKeeper) IBCRawPacketHandler { return IBCRawPacketHandler{ ics4Wrapper: ics4Wrapper, - wasmKeeper: wasmKeeper, channelKeeper: channelKeeper, capabilityKeeper: capabilityKeeper, } @@ -193,86 +176,39 @@ func NewIBCRawPacketHandler(ics4Wrapper types.ICS4Wrapper, wasmKeeper types.IBCC // DispatchMsg publishes a raw IBC packet onto the channel. func (h IBCRawPacketHandler) DispatchMsg(ctx sdk.Context, _ sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) ([]sdk.Event, [][]byte, [][]*codectypes.Any, error) { - if msg.IBC == nil { + if msg.IBC == nil || msg.IBC.SendPacket == nil { return nil, nil, nil, types.ErrUnknownMsg } - switch { - case msg.IBC.SendPacket != nil: - if contractIBCPortID == "" { - return nil, nil, nil, errorsmod.Wrapf(types.ErrUnsupportedForContract, "ibc not supported") - } - contractIBCChannelID := msg.IBC.SendPacket.ChannelID - if contractIBCChannelID == "" { - return nil, nil, nil, errorsmod.Wrapf(types.ErrEmpty, "ibc channel") - } - - channelCap, ok := h.capabilityKeeper.GetCapability(ctx, host.ChannelCapabilityPath(contractIBCPortID, contractIBCChannelID)) - if !ok { - return nil, nil, nil, errorsmod.Wrap(channeltypes.ErrChannelCapabilityNotFound, "module does not own channel capability") - } - seq, err := h.ics4Wrapper.SendPacket(ctx, channelCap, contractIBCPortID, contractIBCChannelID, ConvertWasmIBCTimeoutHeightToCosmosHeight(msg.IBC.SendPacket.Timeout.Block), msg.IBC.SendPacket.Timeout.Timestamp, msg.IBC.SendPacket.Data) - if err != nil { - return nil, nil, nil, errorsmod.Wrap(err, "channel") - } - moduleLogger(ctx).Debug("ibc packet set", "seq", seq) - - resp := &types.MsgIBCSendResponse{Sequence: seq} - val, err := resp.Marshal() - if err != nil { - return nil, nil, nil, errorsmod.Wrap(err, "failed to marshal IBC send response") - } - any, err := codectypes.NewAnyWithValue(resp) - if err != nil { - return nil, nil, nil, errorsmod.Wrap(err, "failed to convert IBC send response to Any") - } - msgResponses := [][]*codectypes.Any{{any}} - - return nil, [][]byte{val}, msgResponses, nil - case msg.IBC.WriteAcknowledgement != nil: - if contractIBCPortID == "" { - return nil, nil, nil, errorsmod.Wrapf(types.ErrUnsupportedForContract, "ibc not supported") - } - contractIBCChannelID := msg.IBC.WriteAcknowledgement.ChannelID - if contractIBCChannelID == "" { - return nil, nil, nil, errorsmod.Wrapf(types.ErrEmpty, "ibc channel") - } - - channelCap, ok := h.capabilityKeeper.GetCapability(ctx, host.ChannelCapabilityPath(contractIBCPortID, contractIBCChannelID)) - if !ok { - return nil, nil, nil, errorsmod.Wrap(channeltypes.ErrChannelCapabilityNotFound, "module does not own channel capability") - } - - packet, err := h.wasmKeeper.LoadAsyncAckPacket(ctx, contractIBCPortID, contractIBCChannelID, msg.IBC.WriteAcknowledgement.PacketSequence) - if err != nil { - return nil, nil, nil, errorsmod.Wrap(types.ErrInvalid, "packet") - } - - err = h.ics4Wrapper.WriteAcknowledgement(ctx, channelCap, packet, ContractConfirmStateAck(msg.IBC.WriteAcknowledgement.Ack.Data)) - if err != nil { - return nil, nil, nil, errorsmod.Wrap(err, "acknowledgement") - } - - // Delete the packet from the store after acknowledgement. - // This ensures WriteAcknowledgement can only be used once per packet - // such that overriding the acknowledgement later on is not possible. - h.wasmKeeper.DeleteAsyncAckPacket(ctx, contractIBCPortID, contractIBCChannelID, msg.IBC.WriteAcknowledgement.PacketSequence) - - resp := &types.MsgIBCWriteAcknowledgementResponse{} - val, err := resp.Marshal() - if err != nil { - return nil, nil, nil, errorsmod.Wrap(err, "failed to marshal IBC send response") - } + if contractIBCPortID == "" { + return nil, nil, nil, errorsmod.Wrapf(types.ErrUnsupportedForContract, "ibc not supported") + } + contractIBCChannelID := msg.IBC.SendPacket.ChannelID + if contractIBCChannelID == "" { + return nil, nil, nil, errorsmod.Wrapf(types.ErrEmpty, "ibc channel") + } - any, err := codectypes.NewAnyWithValue(resp) - if err != nil { - return nil, nil, nil, errorsmod.Wrap(err, "failed to convert IBC send response to Any") - } - msgResponses := [][]*codectypes.Any{{any}} + channelCap, ok := h.capabilityKeeper.GetCapability(ctx, host.ChannelCapabilityPath(contractIBCPortID, contractIBCChannelID)) + if !ok { + return nil, nil, nil, errorsmod.Wrap(channeltypes.ErrChannelCapabilityNotFound, "module does not own channel capability") + } + seq, err := h.ics4Wrapper.SendPacket(ctx, channelCap, contractIBCPortID, contractIBCChannelID, ConvertWasmIBCTimeoutHeightToCosmosHeight(msg.IBC.SendPacket.Timeout.Block), msg.IBC.SendPacket.Timeout.Timestamp, msg.IBC.SendPacket.Data) + if err != nil { + return nil, nil, nil, errorsmod.Wrap(err, "channel") + } + moduleLogger(ctx).Debug("ibc packet set", "seq", seq) - return nil, [][]byte{val}, msgResponses, nil - default: - return nil, nil, nil, types.ErrUnknownMsg + resp := &types.MsgIBCSendResponse{Sequence: seq} + val, err := resp.Marshal() + if err != nil { + return nil, nil, nil, errorsmod.Wrap(err, "failed to marshal IBC send response") } + any, err := codectypes.NewAnyWithValue(resp) + if err != nil { + return nil, nil, nil, errorsmod.Wrap(err, "failed to convert IBC send response to Any") + } + msgResponses := [][]*codectypes.Any{{any}} + + return nil, [][]byte{val}, msgResponses, nil } var _ Messenger = MessageHandlerFunc(nil) diff --git a/x/wasm/keeper/handler_plugin_encoders.go b/x/wasm/keeper/handler_plugin_encoders.go index ffe50c5..1dd7132 100644 --- a/x/wasm/keeper/handler_plugin_encoders.go +++ b/x/wasm/keeper/handler_plugin_encoders.go @@ -6,7 +6,7 @@ import ( wasmvmtypes "github.com/CosmWasm/wasmvm/v2/types" ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" - ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" //nolint:staticcheck channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" errorsmod "cosmossdk.io/errors" diff --git a/x/wasm/keeper/handler_plugin_test.go b/x/wasm/keeper/handler_plugin_test.go index ef5e8e9..1f4f848 100644 --- a/x/wasm/keeper/handler_plugin_test.go +++ b/x/wasm/keeper/handler_plugin_test.go @@ -6,11 +6,9 @@ import ( wasmvm "github.com/CosmWasm/wasmvm/v2" wasmvmtypes "github.com/CosmWasm/wasmvm/v2/types" - "github.com/cosmos/gogoproto/proto" capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" //nolint:staticcheck channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -242,13 +240,11 @@ func TestIBCRawPacketHandler(t *testing.T) { timeoutTimestamp uint64 data []byte } - var capturedPacketSent *CapturedPacket - var capturedAck []byte - var capturedPacketAck *CapturedPacket + var capturedPacket *CapturedPacket - capturingICS4Mock := &wasmtesting.MockICS4Wrapper{ + capturePacketsSenderMock := &wasmtesting.MockIBCPacketSender{ SendPacketFn: func(ctx sdk.Context, channelCap *capabilitytypes.Capability, sourcePort, sourceChannel string, timeoutHeight clienttypes.Height, timeoutTimestamp uint64, data []byte) (uint64, error) { - capturedPacketSent = &CapturedPacket{ + capturedPacket = &CapturedPacket{ sourcePort: sourcePort, sourceChannel: sourceChannel, timeoutHeight: timeoutHeight, @@ -257,17 +253,6 @@ func TestIBCRawPacketHandler(t *testing.T) { } return 1, nil }, - WriteAcknowledgementFn: func(ctx sdk.Context, chanCap *capabilitytypes.Capability, packet ibcexported.PacketI, acknowledgement ibcexported.Acknowledgement) error { - capturedPacketAck = &CapturedPacket{ - sourcePort: packet.GetSourcePort(), - sourceChannel: packet.GetSourceChannel(), - timeoutHeight: packet.GetTimeoutHeight().(clienttypes.Height), - timeoutTimestamp: packet.GetTimeoutTimestamp(), - data: packet.GetData(), - } - capturedAck = acknowledgement.Acknowledgement() - return nil - }, } chanKeeper := &wasmtesting.MockChannelKeeper{ GetChannelFn: func(ctx sdk.Context, srcPort, srcChan string) (channeltypes.Channel, bool) { @@ -284,40 +269,19 @@ func TestIBCRawPacketHandler(t *testing.T) { return &capabilitytypes.Capability{}, true }, } - contractKeeper := wasmtesting.IBCContractKeeperMock{} - // also store a packet to be acked - ackPacket := channeltypes.Packet{ - Sequence: 1, - SourcePort: "src-port", - SourceChannel: "channel-0", - DestinationPort: ibcPort, - DestinationChannel: "channel-1", - Data: []byte{}, - TimeoutHeight: clienttypes.Height{}, - TimeoutTimestamp: 1720000000000000000, - } - contractKeeper.StoreAsyncAckPacket(ctx, ackPacket) - - sendResponse := types.MsgIBCSendResponse{Sequence: 1} - ackResponse := types.MsgIBCWriteAcknowledgementResponse{} specs := map[string]struct { - srcMsg wasmvmtypes.IBCMsg + srcMsg wasmvmtypes.SendPacketMsg chanKeeper types.ChannelKeeper capKeeper types.CapabilityKeeper expPacketSent *CapturedPacket - expPacketAck *CapturedPacket - expAck []byte expErr *errorsmod.Error - expResp proto.Message }{ - "send packet, all good": { - srcMsg: wasmvmtypes.IBCMsg{ - SendPacket: &wasmvmtypes.SendPacketMsg{ - ChannelID: "channel-1", - Data: []byte("myData"), - Timeout: wasmvmtypes.IBCTimeout{Block: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}}, - }, + "all good": { + srcMsg: wasmvmtypes.SendPacketMsg{ + ChannelID: "channel-1", + Data: []byte("myData"), + Timeout: wasmvmtypes.IBCTimeout{Block: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}}, }, chanKeeper: chanKeeper, capKeeper: capKeeper, @@ -327,15 +291,12 @@ func TestIBCRawPacketHandler(t *testing.T) { timeoutHeight: clienttypes.Height{RevisionNumber: 1, RevisionHeight: 2}, data: []byte("myData"), }, - expResp: &sendResponse, }, - "send packet, capability not found returns error": { - srcMsg: wasmvmtypes.IBCMsg{ - SendPacket: &wasmvmtypes.SendPacketMsg{ - ChannelID: "channel-1", - Data: []byte("myData"), - Timeout: wasmvmtypes.IBCTimeout{Block: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}}, - }, + "capability not found returns error": { + srcMsg: wasmvmtypes.SendPacketMsg{ + ChannelID: "channel-1", + Data: []byte("myData"), + Timeout: wasmvmtypes.IBCTimeout{Block: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}}, }, chanKeeper: chanKeeper, capKeeper: wasmtesting.MockCapabilityKeeper{ @@ -345,37 +306,13 @@ func TestIBCRawPacketHandler(t *testing.T) { }, expErr: channeltypes.ErrChannelCapabilityNotFound, }, - "async ack, all good": { - srcMsg: wasmvmtypes.IBCMsg{ - WriteAcknowledgement: &wasmvmtypes.WriteAcknowledgementMsg{ - ChannelID: "channel-1", - PacketSequence: 1, - Ack: wasmvmtypes.IBCAcknowledgement{Data: []byte("myAck")}, - }, - }, - chanKeeper: chanKeeper, - capKeeper: capKeeper, - expPacketAck: &CapturedPacket{ - sourcePort: ackPacket.SourcePort, - sourceChannel: ackPacket.SourceChannel, - timeoutHeight: ackPacket.TimeoutHeight, - timeoutTimestamp: ackPacket.TimeoutTimestamp, - data: ackPacket.Data, - }, - expAck: []byte("myAck"), - expResp: &ackResponse, - }, } for name, spec := range specs { t.Run(name, func(t *testing.T) { - capturedPacketSent = nil - capturedAck = nil - capturedPacketAck = nil - + capturedPacket = nil // when - h := NewIBCRawPacketHandler(capturingICS4Mock, &contractKeeper, spec.chanKeeper, spec.capKeeper) - evts, data, msgResponses, gotErr := h.DispatchMsg(ctx, RandomAccountAddress(t), ibcPort, wasmvmtypes.CosmosMsg{IBC: &spec.srcMsg}) //nolint:gosec - + h := NewIBCRawPacketHandler(capturePacketsSenderMock, spec.chanKeeper, spec.capKeeper) + evts, data, msgResponses, gotErr := h.DispatchMsg(ctx, RandomAccountAddress(t), ibcPort, wasmvmtypes.CosmosMsg{IBC: &wasmvmtypes.IBCMsg{SendPacket: &spec.srcMsg}}) //nolint:gosec // then require.True(t, spec.expErr.Is(gotErr), "exp %v but got %#+v", spec.expErr, gotErr) if spec.expErr != nil { @@ -385,16 +322,16 @@ func TestIBCRawPacketHandler(t *testing.T) { assert.Nil(t, evts) require.NotNil(t, data) assert.Len(t, msgResponses, 1) - assert.Equal(t, "/"+proto.MessageName(spec.expResp), msgResponses[0][0].TypeUrl) + assert.Equal(t, "/cosmwasm.wasm.v1.MsgIBCSendResponse", msgResponses[0][0].TypeUrl) + + expMsg := types.MsgIBCSendResponse{Sequence: 1} - // compare expected responses - expResp, err := proto.Marshal(spec.expResp) + actualMsg := types.MsgIBCSendResponse{} + err := actualMsg.Unmarshal(data[0]) require.NoError(t, err) - assert.Equal(t, expResp, msgResponses[0][0].Value) - assert.Equal(t, spec.expPacketSent, capturedPacketSent) - assert.Equal(t, spec.expAck, capturedAck) - assert.Equal(t, spec.expPacketAck, capturedPacketAck) + assert.Equal(t, expMsg, actualMsg) + assert.Equal(t, spec.expPacketSent, capturedPacket) }) } } diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index 116a51e..158d69d 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -14,7 +14,6 @@ import ( wasmvm "github.com/CosmWasm/wasmvm/v2" wasmvmtypes "github.com/CosmWasm/wasmvm/v2/types" - channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" "cosmossdk.io/collections" corestoretypes "cosmossdk.io/core/store" @@ -99,7 +98,6 @@ type Keeper struct { queryGasLimit uint64 gasRegister types.GasRegister maxQueryStackSize uint32 - maxCallDepth uint32 acceptedAccountTypes map[reflect.Type]struct{} accountPruner AccountPruner params collections.Item[types.Params] @@ -448,6 +446,8 @@ func (k Keeper) migrate( defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "migrate") sdkCtx := sdk.UnwrapSDKContext(ctx) + setupCost := k.gasRegister.SetupContractCost(k.IsPinnedCode(ctx, newCodeID), len(msg)) + sdkCtx.GasMeter().ConsumeGas(setupCost, "Loading CosmWasm module: migrate") contractInfo := k.GetContractInfo(ctx, contractAddress) if contractInfo == nil { @@ -467,8 +467,7 @@ func (k Keeper) migrate( } // check for IBC flag - report, err := k.wasmVM.AnalyzeCode(newCodeInfo.CodeHash) - switch { + switch report, err := k.wasmVM.AnalyzeCode(newCodeInfo.CodeHash); { case err != nil: return nil, errorsmod.Wrap(types.ErrVMError, err.Error()) case !report.HasIBCEntryPoints && contractInfo.IBCPortID != "": @@ -483,25 +482,26 @@ func (k Keeper) migrate( contractInfo.IBCPortID = ibcPort } - var response *wasmvmtypes.Response + env := types.NewEnv(sdkCtx, contractAddress) + + // prepare querier + querier := k.newQueryHandler(sdkCtx, contractAddress) - // check for migrate version - oldCodeInfo := k.GetCodeInfo(ctx, contractInfo.CodeID) - oldReport, err := k.wasmVM.AnalyzeCode(oldCodeInfo.CodeHash) + prefixStoreKey := types.GetContractStorePrefix(contractAddress) + vmStore := types.NewStoreAdapter(prefix.NewStore(runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)), prefixStoreKey)) + gasLeft := k.runtimeGasForContract(sdkCtx) + res, gasUsed, err := k.wasmVM.Migrate(newCodeInfo.CodeHash, env, msg, vmStore, cosmwasmAPI, &querier, k.gasMeter(sdkCtx), gasLeft, costJSONDeserialization) + k.consumeRuntimeGas(sdkCtx, gasUsed) if err != nil { return nil, errorsmod.Wrap(types.ErrVMError, err.Error()) } - - // call migrate entrypoint, except if both migrate versions are set and the same value - if report.ContractMigrateVersion == nil || - oldReport.ContractMigrateVersion == nil || - *report.ContractMigrateVersion != *oldReport.ContractMigrateVersion { - response, err = k.callMigrateEntrypoint(sdkCtx, contractAddress, wasmvmtypes.Checksum(newCodeInfo.CodeHash), msg, newCodeID) - if err != nil { - return nil, err - } + if res == nil { + // If this gets executed, that's a bug in wasmvm + return nil, errorsmod.Wrap(types.ErrVMError, "internal wasmvm error") + } + if res.Err != "" { + return nil, types.MarkErrorDeterministic(errorsmod.Wrap(types.ErrMigrationFailed, res.Err)) } - // delete old secondary index entry err = k.removeFromContractCodeSecondaryIndex(ctx, contractAddress, k.mustGetLastContractHistoryEntry(sdkCtx, contractAddress)) if err != nil { @@ -525,62 +525,15 @@ func (k Keeper) migrate( sdk.NewAttribute(types.AttributeKeyContractAddr, contractAddress.String()), )) - var data []byte - - // if migrate entry point was called - if response != nil { - sdkCtx = types.WithSubMsgAuthzPolicy(sdkCtx, authZ.SubMessageAuthorizationPolicy(types.AuthZActionMigrateContract)) - data, err = k.handleContractResponse( - sdkCtx, - contractAddress, - contractInfo.IBCPortID, - response.Messages, - response.Attributes, - response.Data, - response.Events, - ) - if err != nil { - return nil, errorsmod.Wrap(err, "dispatch") - } - return data, nil + sdkCtx = types.WithSubMsgAuthzPolicy(sdkCtx, authZ.SubMessageAuthorizationPolicy(types.AuthZActionMigrateContract)) + data, err := k.handleContractResponse(sdkCtx, contractAddress, contractInfo.IBCPortID, res.Ok.Messages, res.Ok.Attributes, res.Ok.Data, res.Ok.Events) + if err != nil { + return nil, errorsmod.Wrap(err, "dispatch") } return data, nil } -func (k Keeper) callMigrateEntrypoint( - sdkCtx sdk.Context, - contractAddress sdk.AccAddress, - newChecksum wasmvmtypes.Checksum, - msg []byte, - newCodeID uint64, -) (*wasmvmtypes.Response, error) { - setupCost := k.gasRegister.SetupContractCost(k.IsPinnedCode(sdkCtx, newCodeID), len(msg)) - sdkCtx.GasMeter().ConsumeGas(setupCost, "Loading CosmWasm module: migrate") - - env := types.NewEnv(sdkCtx, contractAddress) - - // prepare querier - querier := k.newQueryHandler(sdkCtx, contractAddress) - - prefixStoreKey := types.GetContractStorePrefix(contractAddress) - vmStore := types.NewStoreAdapter(prefix.NewStore(runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)), prefixStoreKey)) - gasLeft := k.runtimeGasForContract(sdkCtx) - res, gasUsed, err := k.wasmVM.Migrate(newChecksum, env, msg, vmStore, cosmwasmAPI, &querier, k.gasMeter(sdkCtx), gasLeft, costJSONDeserialization) - k.consumeRuntimeGas(sdkCtx, gasUsed) - if err != nil { - return nil, errorsmod.Wrap(types.ErrVMError, err.Error()) - } - if res == nil { - // If this gets executed, that's a bug in wasmvm - return nil, errorsmod.Wrap(types.ErrVMError, "internal wasmvm error") - } - if res.Err != "" { - return nil, types.MarkErrorDeterministic(errorsmod.Wrap(types.ErrMigrationFailed, res.Err)) - } - return res.Ok, nil -} - // Sudo allows privileged access to a contract. This can never be called by an external tx, but only by // another native Go module directly, or on-chain governance (if sudo proposals are enabled). Thus, the keeper doesn't // place any access controls on it, that is the responsibility or the app developer (who passes the wasm.Keeper in app.go) @@ -822,7 +775,6 @@ func (k Keeper) mustGetLastContractHistoryEntry(ctx context.Context, contractAdd // QuerySmart queries the smart contract itself. func (k Keeper) QuerySmart(ctx context.Context, contractAddr sdk.AccAddress, req []byte) ([]byte, error) { defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "query-smart") - // checks and increase query stack size sdkCtx, err := checkAndIncreaseQueryStackSize(sdk.UnwrapSDKContext(ctx), k.maxQueryStackSize) if err != nil { @@ -847,7 +799,7 @@ func (k Keeper) QuerySmart(ctx context.Context, contractAddr sdk.AccAddress, req return nil, errorsmod.Wrap(types.ErrVMError, qErr.Error()) } if queryResult.Err != "" { - return nil, types.MarkErrorDeterministic(errorsmod.Wrap(types.ErrQueryFailed, queryResult.Err)) + return nil, errorsmod.Wrap(types.ErrQueryFailed, queryResult.Err) } return queryResult.Ok, nil } @@ -870,24 +822,6 @@ func checkAndIncreaseQueryStackSize(ctx context.Context, maxQueryStackSize uint3 return types.WithQueryStackSize(sdk.UnwrapSDKContext(ctx), queryStackSize), nil } -func checkAndIncreaseCallDepth(ctx context.Context, maxCallDepth uint32) (sdk.Context, error) { - var callDepth uint32 = 0 - if size, ok := types.CallDepth(ctx); ok { - callDepth = size - } - - // increase - callDepth++ - - // did we go too far? - if callDepth > maxCallDepth { - return sdk.Context{}, types.ErrExceedMaxCallDepth - } - - // set updated stack size - return types.WithCallDepth(sdk.UnwrapSDKContext(ctx), callDepth), nil -} - // QueryRaw returns the contract's state for give key. Returns `nil` when key is `nil`. func (k Keeper) QueryRaw(ctx context.Context, contractAddress sdk.AccAddress, key []byte) []byte { defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "query-raw") @@ -930,48 +864,6 @@ func (k Keeper) contractInstance(ctx context.Context, contractAddress sdk.AccAdd return contractInfo, codeInfo, types.NewStoreAdapter(prefixStore), nil } -func (k Keeper) LoadAsyncAckPacket(ctx context.Context, portID, channelID string, sequence uint64) (channeltypes.Packet, error) { - prefixStore, key := k.getAsyncAckStoreAndKey(ctx, portID, channelID, sequence) - - packetBz := prefixStore.Get(key) - - if len(packetBz) == 0 { - return channeltypes.Packet{}, types.ErrNotFound.Wrap("packet") - } - - var packet channeltypes.Packet - // unmarshal packet - if err := k.cdc.Unmarshal(packetBz, &packet); err != nil { - return channeltypes.Packet{}, err - } - - return packet, nil -} - -func (k Keeper) StoreAsyncAckPacket(ctx context.Context, packet channeltypes.Packet) error { - prefixStore, key := k.getAsyncAckStoreAndKey(ctx, packet.DestinationPort, packet.DestinationChannel, packet.Sequence) - - packetBz, err := k.cdc.Marshal(&packet) - if err != nil { - return err - } - prefixStore.Set(key, packetBz) - return nil -} - -func (k Keeper) DeleteAsyncAckPacket(ctx context.Context, portID, channelID string, sequence uint64) { - prefixStore, key := k.getAsyncAckStoreAndKey(ctx, portID, channelID, sequence) - prefixStore.Delete(key) -} - -func (k Keeper) getAsyncAckStoreAndKey(ctx context.Context, portID, channelID string, sequence uint64) (prefix.Store, []byte) { - // packets are stored under the destination port - prefixStoreKey := types.GetAsyncAckStorePrefix(portID) - prefixStore := prefix.NewStore(runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)), prefixStoreKey) - key := types.GetAsyncPacketKey(channelID, sequence) - return prefixStore, key -} - func (k Keeper) GetContractInfo(ctx context.Context, contractAddress sdk.AccAddress) *types.ContractInfo { store := k.storeService.OpenKVStore(ctx) var contract types.ContractInfo diff --git a/x/wasm/keeper/keeper_cgo.go b/x/wasm/keeper/keeper_cgo.go index 8770c2f..0d77663 100644 --- a/x/wasm/keeper/keeper_cgo.go +++ b/x/wasm/keeper/keeper_cgo.go @@ -47,10 +47,10 @@ func NewKeeper( accountPruner: NewVestingCoinBurner(bankKeeper), portKeeper: portKeeper, capabilityKeeper: capabilityKeeper, + messenger: NewDefaultMessageHandler(router, ics4Wrapper, channelKeeper, capabilityKeeper, bankKeeper, cdc, portSource), queryGasLimit: wasmConfig.SmartQueryGasLimit, gasRegister: types.NewDefaultWasmGasRegister(), maxQueryStackSize: types.DefaultMaxQueryStackSize, - maxCallDepth: types.DefaultMaxCallDepth, acceptedAccountTypes: defaultAcceptedAccountTypes, params: collections.NewItem(sb, types.ParamsKey, "params", codec.CollValue[types.Params](cdc)), propagateGovAuthorization: map[types.AuthorizationPolicyAction]struct{}{ @@ -58,14 +58,11 @@ func NewKeeper( }, authority: authority, } - keeper.messenger = NewDefaultMessageHandler(keeper, router, ics4Wrapper, channelKeeper, capabilityKeeper, bankKeeper, cdc, portSource) keeper.wasmVMQueryHandler = DefaultQueryPlugins(bankKeeper, stakingKeeper, distrKeeper, channelKeeper, keeper) preOpts, postOpts := splitOpts(opts) for _, o := range preOpts { o.apply(keeper) } - // always wrap the messenger, even if it was replaced by an option - keeper.messenger = callDepthMessageHandler{keeper.messenger, keeper.maxCallDepth} // only set the wasmvm if no one set this in the options // NewVM does a lot, so better not to create it and silently drop it. if keeper.wasmVM == nil { diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index 6373d84..719d29d 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -44,8 +44,7 @@ import ( var hackatomWasm []byte var AvailableCapabilities = []string{ - "iterator", "staking", "stargate", "cosmwasm_1_1", "cosmwasm_1_2", "cosmwasm_1_3", - "cosmwasm_1_4", "cosmwasm_2_0", "cosmwasm_2_1", + "iterator", "staking", "stargate", "cosmwasm_1_1", "cosmwasm_1_2", "cosmwasm_1_3", "cosmwasm_1_4", "cosmwasm_2_0", } func TestNewKeeper(t *testing.T) { @@ -422,7 +421,7 @@ func TestInstantiate(t *testing.T) { gasAfter := ctx.GasMeter().GasConsumed() if types.EnableGasVerification { - require.Equal(t, uint64(0x1bc8f), gasAfter-gasBefore) + require.Equal(t, uint64(0x1bc64), gasAfter-gasBefore) } // ensure it is stored properly @@ -847,7 +846,7 @@ func TestInstantiateWithContractFactoryChildQueriesParent(t *testing.T) { router := baseapp.NewMsgServiceRouter() router.SetInterfaceRegistry(keepers.EncodingConfig.InterfaceRegistry) types.RegisterMsgServer(router, NewMsgServerImpl(keeper)) - keeper.messenger = NewDefaultMessageHandler(nil, router, nil, nil, nil, nil, keepers.EncodingConfig.Codec, nil) + keeper.messenger = NewDefaultMessageHandler(router, nil, nil, nil, nil, keepers.EncodingConfig.Codec, nil) // overwrite wasmvm in response handler keeper.wasmVMResponseHandler = NewDefaultWasmVMContractResponseHandler(NewMessageDispatcher(keeper.messenger, keeper)) @@ -959,7 +958,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(0x1acb4), gasAfter-gasBefore) + require.Equal(t, uint64(0x1ac6a), gasAfter-gasBefore) } // ensure bob now exists and got both payments released bobAcct = accKeeper.GetAccount(ctx, bob) @@ -1223,10 +1222,6 @@ func TestMigrate(t *testing.T) { require.NoError(t, keeper.SetAccessConfig(parentCtx, restrictedCodeExample.CodeID, restrictedCodeExample.CreatorAddr, types.AllowNobody)) require.NotEqual(t, originalCodeID, restrictedCodeExample.CodeID) - // store hackatom contracts with "migrate_version" attributes - hackatom42 := StoreExampleContract(t, parentCtx, keepers, "./testdata/hackatom_42.wasm") - hackatom420 := StoreExampleContract(t, parentCtx, keepers, "./testdata/hackatom_420.wasm") - anyAddr := RandomAccountAddress(t) newVerifierAddr := RandomAccountAddress(t) initMsgBz := HackatomExampleInitMsg{ @@ -1356,51 +1351,6 @@ func TestMigrate(t *testing.T) { migrateMsg: migMsgBz, expErr: types.ErrMigrationFailed, }, - "all good with migrate versions": { - admin: creator, - caller: creator, - initMsg: initMsgBz, - fromCodeID: hackatom42.CodeID, - toCodeID: hackatom420.CodeID, - migrateMsg: migMsgBz, - expVerifier: newVerifierAddr, - }, - "all good with no migrate version to migrate version contract": { - admin: creator, - caller: creator, - initMsg: initMsgBz, - fromCodeID: originalCodeID, - toCodeID: hackatom42.CodeID, - migrateMsg: migMsgBz, - expVerifier: newVerifierAddr, - }, - "all good with same migrate version": { - admin: creator, - caller: creator, - initMsg: initMsgBz, - fromCodeID: hackatom42.CodeID, - toCodeID: hackatom42.CodeID, - migrateMsg: migMsgBz, - expVerifier: fred, // not updated - }, - "all good with migrate version contract to no migrate version contract": { - admin: creator, - caller: creator, - initMsg: initMsgBz, - fromCodeID: hackatom42.CodeID, - toCodeID: originalCodeID, - migrateMsg: migMsgBz, - expVerifier: newVerifierAddr, - }, - "all good with migration to older migrate version": { - admin: creator, - caller: creator, - initMsg: initMsgBz, - fromCodeID: hackatom420.CodeID, - toCodeID: hackatom42.CodeID, - migrateMsg: migMsgBz, - expVerifier: newVerifierAddr, - }, } blockHeight := parentCtx.BlockHeight() diff --git a/x/wasm/keeper/metrics.go b/x/wasm/keeper/metrics.go index a2b26a1..37d7cd4 100644 --- a/x/wasm/keeper/metrics.go +++ b/x/wasm/keeper/metrics.go @@ -14,7 +14,6 @@ const ( // metricSource source of wasmvm metrics type metricSource interface { GetMetrics() (*wasmvmtypes.Metrics, error) - GetPinnedMetrics() (*wasmvmtypes.PinnedMetrics, error) } var _ prometheus.Collector = (*WasmVMMetricsCollector)(nil) @@ -26,8 +25,6 @@ type WasmVMMetricsCollector struct { CacheMissesDescr *prometheus.Desc CacheElementsDescr *prometheus.Desc CacheSizeDescr *prometheus.Desc - PinnedHitsDescr *prometheus.Desc - PinnedSizeDescr *prometheus.Desc } // NewWasmVMMetricsCollector constructor @@ -41,8 +38,6 @@ func NewWasmVMMetricsCollector(s metricSource) *WasmVMMetricsCollector { CacheMissesDescr: prometheus.NewDesc("wasmvm_cache_misses_total", "Total number of cache misses", nil, nil), CacheElementsDescr: prometheus.NewDesc("wasmvm_cache_elements_total", "Total number of elements in the cache", []string{"type"}, nil), CacheSizeDescr: prometheus.NewDesc("wasmvm_cache_size_bytes", "Total number of elements in the cache", []string{"type"}, nil), - PinnedHitsDescr: prometheus.NewDesc("wasmvm_pinned_contract_hits", "Number of hits of a pinned contract", []string{"checksum"}, nil), - PinnedSizeDescr: prometheus.NewDesc("wasmvm_pinned_contract_size", "Size of a pinned contract", []string{"checksum"}, nil), } } @@ -62,25 +57,17 @@ func (p *WasmVMMetricsCollector) Describe(descs chan<- *prometheus.Desc) { // Collect is called by the Prometheus registry when collecting metrics. func (p *WasmVMMetricsCollector) Collect(c chan<- prometheus.Metric) { m, err := p.source.GetMetrics() - if err == nil { - c <- prometheus.MustNewConstMetric(p.CacheHitsDescr, prometheus.CounterValue, float64(m.HitsPinnedMemoryCache), labelPinned) - c <- prometheus.MustNewConstMetric(p.CacheHitsDescr, prometheus.CounterValue, float64(m.HitsMemoryCache), labelMemory) - c <- prometheus.MustNewConstMetric(p.CacheHitsDescr, prometheus.CounterValue, float64(m.HitsFsCache), labelFs) - c <- prometheus.MustNewConstMetric(p.CacheMissesDescr, prometheus.CounterValue, float64(m.Misses)) - c <- prometheus.MustNewConstMetric(p.CacheElementsDescr, prometheus.GaugeValue, float64(m.ElementsPinnedMemoryCache), labelPinned) - c <- prometheus.MustNewConstMetric(p.CacheElementsDescr, prometheus.GaugeValue, float64(m.ElementsMemoryCache), labelMemory) - c <- prometheus.MustNewConstMetric(p.CacheSizeDescr, prometheus.GaugeValue, float64(m.SizeMemoryCache), labelMemory) - c <- prometheus.MustNewConstMetric(p.CacheSizeDescr, prometheus.GaugeValue, float64(m.SizePinnedMemoryCache), labelPinned) + if err != nil { + return } - - pm, err := p.source.GetPinnedMetrics() - if err == nil { - for _, mod := range pm.PerModule { - c <- prometheus.MustNewConstMetric(p.PinnedHitsDescr, prometheus.CounterValue, float64(mod.Metrics.Hits), mod.Checksum.String()) - c <- prometheus.MustNewConstMetric(p.PinnedSizeDescr, prometheus.GaugeValue, float64(mod.Metrics.Size), mod.Checksum.String()) - } - } - + c <- prometheus.MustNewConstMetric(p.CacheHitsDescr, prometheus.CounterValue, float64(m.HitsPinnedMemoryCache), labelPinned) + c <- prometheus.MustNewConstMetric(p.CacheHitsDescr, prometheus.CounterValue, float64(m.HitsMemoryCache), labelMemory) + c <- prometheus.MustNewConstMetric(p.CacheHitsDescr, prometheus.CounterValue, float64(m.HitsFsCache), labelFs) + c <- prometheus.MustNewConstMetric(p.CacheMissesDescr, prometheus.CounterValue, float64(m.Misses)) + c <- prometheus.MustNewConstMetric(p.CacheElementsDescr, prometheus.GaugeValue, float64(m.ElementsPinnedMemoryCache), labelPinned) + c <- prometheus.MustNewConstMetric(p.CacheElementsDescr, prometheus.GaugeValue, float64(m.ElementsMemoryCache), labelMemory) + c <- prometheus.MustNewConstMetric(p.CacheSizeDescr, prometheus.GaugeValue, float64(m.SizeMemoryCache), labelMemory) + c <- prometheus.MustNewConstMetric(p.CacheSizeDescr, prometheus.GaugeValue, float64(m.SizePinnedMemoryCache), labelPinned) // Node about fs metrics: // The number of elements and the size of elements in the file system cache cannot easily be obtained. // We had to either scan the whole directory of potentially thousands of files or track the values when files are added or removed. diff --git a/x/wasm/keeper/msg_server.go b/x/wasm/keeper/msg_server.go index 5469f2f..d19843a 100644 --- a/x/wasm/keeper/msg_server.go +++ b/x/wasm/keeper/msg_server.go @@ -94,7 +94,7 @@ func (m msgServer) InstantiateContract2(ctx context.Context, msg *types.MsgInsta policy := m.selectAuthorizationPolicy(ctx, msg.Sender) - addrGenerator := PredictableAddressGenerator(senderAddr, msg.Salt, msg.Msg, msg.FixMsg) + addrGenerator := PredicableAddressGenerator(senderAddr, msg.Salt, msg.Msg, msg.FixMsg) contractAddr, data, err := m.keeper.instantiate(ctx, msg.CodeID, senderAddr, adminAddr, msg.Msg, msg.Label, msg.Funds, addrGenerator, policy) if err != nil { diff --git a/x/wasm/keeper/options.go b/x/wasm/keeper/options.go index ea9432e..126617c 100644 --- a/x/wasm/keeper/options.go +++ b/x/wasm/keeper/options.go @@ -158,12 +158,6 @@ func WithMaxQueryStackSize(m uint32) Option { }) } -func WithMaxCallDepth(m uint32) Option { - return optsFn(func(k *Keeper) { - k.maxCallDepth = 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. // diff --git a/x/wasm/keeper/options_test.go b/x/wasm/keeper/options_test.go index 21d205e..63c4554 100644 --- a/x/wasm/keeper/options_test.go +++ b/x/wasm/keeper/options_test.go @@ -59,9 +59,7 @@ func TestConstructorOptions(t *testing.T) { "message handler": { srcOpt: WithMessageHandler(&wasmtesting.MockMessageHandler{}), verify: func(t *testing.T, k Keeper) { - require.IsType(t, callDepthMessageHandler{}, k.messenger) - messenger, _ := k.messenger.(callDepthMessageHandler) - assert.IsType(t, &wasmtesting.MockMessageHandler{}, messenger.Messenger) + assert.IsType(t, &wasmtesting.MockMessageHandler{}, k.messenger) }, }, "query plugins": { @@ -72,7 +70,7 @@ func TestConstructorOptions(t *testing.T) { }, "message handler decorator": { srcOpt: WithMessageHandlerDecorator(func(old Messenger) Messenger { - require.IsType(t, callDepthMessageHandler{}, old) + require.IsType(t, &MessageHandlerChain{}, old) return &wasmtesting.MockMessageHandler{} }), verify: func(t *testing.T, k Keeper) { @@ -110,18 +108,12 @@ func TestConstructorOptions(t *testing.T) { assert.Equal(t, uint64(2), costCanonical) }, }, - "max query recursion limit": { + "max recursion query limit": { srcOpt: WithMaxQueryStackSize(1), verify: func(t *testing.T, k Keeper) { assert.IsType(t, uint32(1), k.maxQueryStackSize) }, }, - "max message recursion limit": { - srcOpt: WithMaxCallDepth(1), - verify: func(t *testing.T, k Keeper) { - assert.IsType(t, uint32(1), k.maxCallDepth) - }, - }, "accepted account types": { srcOpt: WithAcceptedAccountTypesOnContractInstantiation(&authtypes.BaseAccount{}, &vestingtypes.ContinuousVestingAccount{}), verify: func(t *testing.T, k Keeper) { diff --git a/x/wasm/keeper/querier.go b/x/wasm/keeper/querier.go index ec5d318..aafc17b 100644 --- a/x/wasm/keeper/querier.go +++ b/x/wasm/keeper/querier.go @@ -24,9 +24,6 @@ import ( "github.com/airchains-network/junction/x/wasm/types" ) -// DefaultGasCostBuildAddress is the SDK gas cost to build a contract address -const DefaultGasCostBuildAddress = 10 - var _ types.QueryServer = &GrpcQuerier{} type GrpcQuerier struct { @@ -431,10 +428,6 @@ func (q GrpcQuerier) BuildAddress(c context.Context, req *types.QueryBuildAddres if len(salt) == 0 { return nil, status.Error(codes.InvalidArgument, "empty salt") } - - ctx := sdk.UnwrapSDKContext(c) - defer ctx.GasMeter().ConsumeGas(DefaultGasCostBuildAddress, "build address") - if req.InitArgs == nil { return &types.QueryBuildAddressResponse{ Address: BuildContractAddressPredictable(codeHash, creator, salt, []byte{}).String(), diff --git a/x/wasm/keeper/query_plugins_test.go b/x/wasm/keeper/query_plugins_test.go index eaee55c..cb925f2 100644 --- a/x/wasm/keeper/query_plugins_test.go +++ b/x/wasm/keeper/query_plugins_test.go @@ -561,7 +561,7 @@ func TestQueryErrors(t *testing.T) { return nil, spec.src }) ms := store.NewCommitMultiStore(dbm.NewMemDB(), log.NewTestLogger(t), storemetrics.NewNoOpMetrics()) - ctx := sdk.NewContext(ms, cmtproto.Header{}, false, log.NewTestLogger(t)).WithGasMeter(storetypes.NewInfiniteGasMeter()) + ctx := sdk.Context{}.WithGasMeter(storetypes.NewInfiniteGasMeter()).WithMultiStore(ms).WithLogger(log.NewTestLogger(t)) q := keeper.NewQueryHandler(ctx, mock, sdk.AccAddress{}, types.NewDefaultWasmGasRegister()) _, gotErr := q.Query(wasmvmtypes.QueryRequest{}, 1) assert.Equal(t, spec.expErr, gotErr) diff --git a/x/wasm/keeper/recurse_test.go b/x/wasm/keeper/recurse_test.go index 93abfd8..bb7c2cd 100644 --- a/x/wasm/keeper/recurse_test.go +++ b/x/wasm/keeper/recurse_test.go @@ -56,12 +56,12 @@ func initRecurseContract(t *testing.T) (contract sdk.AccAddress, ctx sdk.Context func TestGasCostOnQuery(t *testing.T) { const ( - GasNoWork uint64 = 63_983 + GasNoWork uint64 = 63_950 // Note: about 100 SDK gas (10k CosmWasm gas) for each round of sha256 - GasWork50 uint64 = 64_222 // this is a little shy of 50k gas - to keep an eye on the limit + GasWork50 uint64 = 64_218 // this is a little shy of 50k gas - to keep an eye on the limit - GasReturnUnhashed uint64 = 55 - GasReturnHashed uint64 = 46 + GasReturnUnhashed uint64 = 32 + GasReturnHashed uint64 = 26 ) cases := map[string]struct { @@ -211,9 +211,9 @@ func TestLimitRecursiveQueryGas(t *testing.T) { const ( // Note: about 100 SDK gas (10k CosmWasm gas) for each round of sha256 - GasWork2k uint64 = 76_279 // = SetupContractCost + x // we have 6x gas used in cpu than in the instance + GasWork2k uint64 = 77_161 // = SetupContractCost + x // we have 6x gas used in cpu than in the instance // This is overhead for calling into a sub-contract - GasReturnHashed uint64 = 48 + GasReturnHashed uint64 = 27 ) cases := map[string]struct { @@ -240,7 +240,8 @@ func TestLimitRecursiveQueryGas(t *testing.T) { Work: 2000, }, expectQueriesFromContract: 5, - expectedGas: GasWork2k + 5*(GasWork2k+GasReturnHashed), + // FIXME: why -1 ... confused a bit by calculations, seems like rounding issues + expectedGas: GasWork2k + 5*(GasWork2k+GasReturnHashed), }, // this is where we expect an error... // it has enough gas to run 5 times and die on the 6th (5th time dispatching to sub-contract) @@ -262,8 +263,8 @@ func TestLimitRecursiveQueryGas(t *testing.T) { }, expectQueriesFromContract: 10, expectOutOfGas: false, - expectError: "query wasm contract failed", // Error we get from the contract instance doing the failing query, not wasmd - expectedGas: 10*(GasWork2k+GasReturnHashed) + 3279, // lots of additional gas for long error message + expectError: "query wasm contract failed", // Error we get from the contract instance doing the failing query, not wasmd + expectedGas: 10*(GasWork2k+GasReturnHashed) - 249, }, } diff --git a/x/wasm/keeper/relay.go b/x/wasm/keeper/relay.go index 122ad80..081ebc6 100644 --- a/x/wasm/keeper/relay.go +++ b/x/wasm/keeper/relay.go @@ -4,7 +4,6 @@ import ( "time" wasmvmtypes "github.com/CosmWasm/wasmvm/v2/types" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" @@ -170,17 +169,6 @@ func (k Keeper) OnRecvPacket( // submessage errors result in error ACK with state reverted. Error message is redacted return nil, err } - - if data == nil { - // Protocol might never write acknowledgement or contract - // wants async acknowledgements, we don't know. - // So store the packet for later. - err = k.StoreAsyncAckPacket(ctx, convertPacket(msg.Packet)) - if err != nil { - return nil, err - } - return nil, nil - } // success ACK, state will be committed return ContractConfirmStateAck(data), nil } @@ -270,94 +258,7 @@ func (k Keeper) OnTimeoutPacket( return k.handleIBCBasicContractResponse(ctx, contractAddr, contractInfo.IBCPortID, res.Ok) } -// IBCSourceCallback calls the contract to let it know the packet triggered by its -// IBC-callbacks-enabled message either timed out or was acknowledged. -func (k Keeper) IBCSourceCallback( - ctx sdk.Context, - contractAddr sdk.AccAddress, - msg wasmvmtypes.IBCSourceCallbackMsg, -) error { - defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "ibc-source-chain-callback") - - contractInfo, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddr) - if err != nil { - return err - } - - env := types.NewEnv(ctx, contractAddr) - querier := k.newQueryHandler(ctx, contractAddr) - - gasLeft := k.runtimeGasForContract(ctx) - res, gasUsed, execErr := k.wasmVM.IBCSourceCallback(codeInfo.CodeHash, env, msg, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gasLeft, costJSONDeserialization) - k.consumeRuntimeGas(ctx, gasUsed) - if execErr != nil { - return errorsmod.Wrap(types.ErrExecuteFailed, execErr.Error()) - } - if res == nil { - // If this gets executed, that's a bug in wasmvm - return errorsmod.Wrap(types.ErrVMError, "internal wasmvm error") - } - if res.Err != "" { - return types.MarkErrorDeterministic(errorsmod.Wrap(types.ErrExecuteFailed, res.Err)) - } - - return k.handleIBCBasicContractResponse(ctx, contractAddr, contractInfo.IBCPortID, res.Ok) -} - -// IBCDestinationCallback calls the contract to let it know that it received a packet of an -// IBC-callbacks-enabled message that was acknowledged. -func (k Keeper) IBCDestinationCallback( - ctx sdk.Context, - contractAddr sdk.AccAddress, - msg wasmvmtypes.IBCDestinationCallbackMsg, -) error { - defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "ibc-destination-chain-callback") - - contractInfo, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddr) - if err != nil { - return err - } - - env := types.NewEnv(ctx, contractAddr) - querier := k.newQueryHandler(ctx, contractAddr) - - gasLeft := k.runtimeGasForContract(ctx) - res, gasUsed, execErr := k.wasmVM.IBCDestinationCallback(codeInfo.CodeHash, env, msg, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gasLeft, costJSONDeserialization) - k.consumeRuntimeGas(ctx, gasUsed) - if execErr != nil { - return errorsmod.Wrap(types.ErrExecuteFailed, execErr.Error()) - } - if res == nil { - // If this gets executed, that's a bug in wasmvm - return errorsmod.Wrap(types.ErrVMError, "internal wasmvm error") - } - if res.Err != "" { - return types.MarkErrorDeterministic(errorsmod.Wrap(types.ErrExecuteFailed, res.Err)) - } - - return k.handleIBCBasicContractResponse(ctx, contractAddr, contractInfo.IBCPortID, res.Ok) -} - func (k Keeper) handleIBCBasicContractResponse(ctx sdk.Context, addr sdk.AccAddress, id string, res *wasmvmtypes.IBCBasicResponse) error { _, err := k.handleContractResponse(ctx, addr, id, res.Messages, res.Attributes, nil, res.Events) return err } - -func convertPacket(packet wasmvmtypes.IBCPacket) channeltypes.Packet { - p := channeltypes.Packet{ - Sequence: packet.Sequence, - SourcePort: packet.Src.PortID, - SourceChannel: packet.Src.ChannelID, - DestinationPort: packet.Dest.PortID, - DestinationChannel: packet.Dest.ChannelID, - Data: packet.Data, - TimeoutTimestamp: packet.Timeout.Timestamp, - } - if packet.Timeout.Block != nil { - p.TimeoutHeight = clienttypes.Height{ - RevisionNumber: packet.Timeout.Block.Revision, - RevisionHeight: packet.Timeout.Block.Height, - } - } - return p -} diff --git a/x/wasm/keeper/relay_test.go b/x/wasm/keeper/relay_test.go index a5c3467..2d83245 100644 --- a/x/wasm/keeper/relay_test.go +++ b/x/wasm/keeper/relay_test.go @@ -343,14 +343,6 @@ func TestOnRecvPacket(t *testing.T) { "can return empty ack data": { contractAddr: example.Contract, expContractGas: myContractGas, - contractResp: &wasmvmtypes.IBCReceiveResult{ - Ok: &wasmvmtypes.IBCReceiveResponse{Acknowledgement: []byte{}}, - }, - expAck: []byte{}, - }, - "can return nil ack": { - contractAddr: example.Contract, - expContractGas: myContractGas + 2720, // 2720 is the cost of storing the packet contractResp: &wasmvmtypes.IBCReceiveResult{ Ok: &wasmvmtypes.IBCReceiveResponse{}, }, @@ -488,11 +480,7 @@ func TestOnRecvPacket(t *testing.T) { return } require.NoError(t, err) - if spec.expAck != nil { - require.Equal(t, spec.expAck, gotAck.Acknowledgement()) - } else { - require.Nil(t, gotAck) - } + require.Equal(t, spec.expAck, gotAck.Acknowledgement()) // verify gas consumed const storageCosts = storetypes.Gas(2903) diff --git a/x/wasm/keeper/submsg_test.go b/x/wasm/keeper/submsg_test.go index e55c0d2..14a273d 100644 --- a/x/wasm/keeper/submsg_test.go +++ b/x/wasm/keeper/submsg_test.go @@ -243,7 +243,7 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { "send tokens": { submsgID: 5, msg: validBankSend, - resultAssertions: []assertion{assertReturnedEvents(0), assertGasUsed(110_000, 112_000)}, + resultAssertions: []assertion{assertReturnedEvents(0), assertGasUsed(110_000, 111_000)}, }, "not enough tokens": { submsgID: 6, diff --git a/x/wasm/keeper/testdata/hackatom_42.wasm b/x/wasm/keeper/testdata/hackatom_42.wasm deleted file mode 100644 index e4b36b2..0000000 Binary files a/x/wasm/keeper/testdata/hackatom_42.wasm and /dev/null differ diff --git a/x/wasm/keeper/testdata/hackatom_420.wasm b/x/wasm/keeper/testdata/hackatom_420.wasm deleted file mode 100644 index 6baf02d..0000000 Binary files a/x/wasm/keeper/testdata/hackatom_420.wasm and /dev/null differ diff --git a/x/wasm/keeper/testdata/ibc_reflect.wasm b/x/wasm/keeper/testdata/ibc_reflect.wasm index 9a75666..051be2a 100644 Binary files a/x/wasm/keeper/testdata/ibc_reflect.wasm and b/x/wasm/keeper/testdata/ibc_reflect.wasm differ diff --git a/x/wasm/keeper/wasmtesting/mock_engine.go b/x/wasm/keeper/wasmtesting/mock_engine.go index 109e787..7f13cbd 100644 --- a/x/wasm/keeper/wasmtesting/mock_engine.go +++ b/x/wasm/keeper/wasmtesting/mock_engine.go @@ -22,29 +22,26 @@ var _ types.WasmEngine = &MockWasmEngine{} // MockWasmEngine implements types.WasmEngine for testing purpose. One or multiple messages can be stubbed. // Without a stub function a panic is thrown. type MockWasmEngine struct { - StoreCodeFn func(codeID wasmvm.WasmCode, gasLimit uint64) (wasmvm.Checksum, uint64, error) - StoreCodeUncheckedFn func(codeID wasmvm.WasmCode) (wasmvm.Checksum, error) - AnalyzeCodeFn func(codeID wasmvm.Checksum) (*wasmvmtypes.AnalysisReport, error) - 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.ContractResult, uint64, error) - ExecuteFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, info wasmvmtypes.MessageInfo, executeMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.ContractResult, uint64, error) - QueryFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, queryMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.QueryResult, uint64, error) - MigrateFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, migrateMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.ContractResult, uint64, error) - SudoFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, sudoMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.ContractResult, uint64, error) - ReplyFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, reply wasmvmtypes.Reply, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.ContractResult, uint64, error) - GetCodeFn func(codeID wasmvm.Checksum) (wasmvm.WasmCode, error) - CleanupFn func() - IBCChannelOpenFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCChannelOpenMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCChannelOpenResult, uint64, error) - IBCChannelConnectFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCChannelConnectMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResult, uint64, error) - IBCChannelCloseFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCChannelCloseMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResult, uint64, error) - IBCPacketReceiveFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketReceiveMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCReceiveResult, uint64, error) - IBCPacketAckFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketAckMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResult, uint64, error) - IBCPacketTimeoutFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketTimeoutMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResult, uint64, error) - IBCSourceCallbackFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCSourceCallbackMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResult, uint64, error) - IBCDestinationCallbackFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCDestinationCallbackMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResult, uint64, error) - PinFn func(checksum wasmvm.Checksum) error - UnpinFn func(checksum wasmvm.Checksum) error - GetMetricsFn func() (*wasmvmtypes.Metrics, error) - GetPinMetricsFn func() (*wasmvmtypes.PinnedMetrics, error) + StoreCodeFn func(codeID wasmvm.WasmCode, gasLimit uint64) (wasmvm.Checksum, uint64, error) + StoreCodeUncheckedFn func(codeID wasmvm.WasmCode) (wasmvm.Checksum, error) + AnalyzeCodeFn func(codeID wasmvm.Checksum) (*wasmvmtypes.AnalysisReport, error) + 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.ContractResult, uint64, error) + ExecuteFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, info wasmvmtypes.MessageInfo, executeMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.ContractResult, uint64, error) + QueryFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, queryMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.QueryResult, uint64, error) + MigrateFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, migrateMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.ContractResult, uint64, error) + SudoFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, sudoMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.ContractResult, uint64, error) + ReplyFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, reply wasmvmtypes.Reply, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.ContractResult, uint64, error) + GetCodeFn func(codeID wasmvm.Checksum) (wasmvm.WasmCode, error) + CleanupFn func() + IBCChannelOpenFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCChannelOpenMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCChannelOpenResult, uint64, error) + IBCChannelConnectFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCChannelConnectMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResult, uint64, error) + IBCChannelCloseFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCChannelCloseMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResult, uint64, error) + IBCPacketReceiveFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketReceiveMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCReceiveResult, uint64, error) + IBCPacketAckFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketAckMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResult, uint64, error) + IBCPacketTimeoutFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketTimeoutMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResult, uint64, error) + PinFn func(checksum wasmvm.Checksum) error + UnpinFn func(checksum wasmvm.Checksum) error + GetMetricsFn func() (*wasmvmtypes.Metrics, error) } func (m *MockWasmEngine) IBCChannelOpen(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCChannelOpenMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCChannelOpenResult, uint64, error) { @@ -89,20 +86,6 @@ func (m *MockWasmEngine) IBCPacketTimeout(codeID wasmvm.Checksum, env wasmvmtype return m.IBCPacketTimeoutFn(codeID, env, msg, store, goapi, querier, gasMeter, gasLimit, deserCost) } -func (m MockWasmEngine) IBCSourceCallback(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCSourceCallbackMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResult, uint64, error) { - if m.IBCSourceCallbackFn == nil { - panic("not expected to be called") - } - return m.IBCSourceCallbackFn(codeID, env, msg, store, goapi, querier, gasMeter, gasLimit, deserCost) -} - -func (m MockWasmEngine) IBCDestinationCallback(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCDestinationCallbackMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResult, uint64, error) { - if m.IBCDestinationCallbackFn == nil { - panic("not expected to be called") - } - return m.IBCDestinationCallbackFn(codeID, env, msg, store, goapi, querier, gasMeter, gasLimit, deserCost) -} - func (m *MockWasmEngine) StoreCode(codeID wasmvm.WasmCode, gasLimit uint64) (wasmvm.Checksum, uint64, error) { if m.StoreCodeFn == nil { panic("not supposed to be called!") @@ -201,13 +184,6 @@ func (m *MockWasmEngine) GetMetrics() (*wasmvmtypes.Metrics, error) { return m.GetMetricsFn() } -func (m *MockWasmEngine) GetPinnedMetrics() (*wasmvmtypes.PinnedMetrics, error) { - if m.GetPinMetricsFn == nil { - panic("not expected to be called") - } - return m.GetPinMetricsFn() -} - var AlwaysPanicMockWasmEngine = &MockWasmEngine{} // SelfCallingInstMockWasmEngine prepares a WasmEngine mock that calls itself on instantiation. diff --git a/x/wasm/keeper/wasmtesting/mock_keepers.go b/x/wasm/keeper/wasmtesting/mock_keepers.go index 54dc3b0..f7b9a7f 100644 --- a/x/wasm/keeper/wasmtesting/mock_keepers.go +++ b/x/wasm/keeper/wasmtesting/mock_keepers.go @@ -1,14 +1,9 @@ package wasmtesting import ( - "context" - "fmt" - - wasmvmtypes "github.com/CosmWasm/wasmvm/v2/types" capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" //nolint:staticcheck channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" sdk "github.com/cosmos/cosmos-sdk/types" @@ -66,32 +61,17 @@ func (m *MockChannelKeeper) SetChannel(ctx sdk.Context, portID, channelID string m.SetChannelFn(ctx, portID, channelID, channel) } -var _ types.ICS4Wrapper = &MockICS4Wrapper{} - -type MockICS4Wrapper struct { - SendPacketFn func(ctx sdk.Context, channelCap *capabilitytypes.Capability, sourcePort, sourceChannel string, timeoutHeight clienttypes.Height, timeoutTimestamp uint64, data []byte) (uint64, error) - WriteAcknowledgementFn func(ctx sdk.Context, chanCap *capabilitytypes.Capability, packet ibcexported.PacketI, acknowledgement ibcexported.Acknowledgement) error +type MockIBCPacketSender struct { + SendPacketFn func(ctx sdk.Context, channelCap *capabilitytypes.Capability, sourcePort, sourceChannel string, timeoutHeight clienttypes.Height, timeoutTimestamp uint64, data []byte) (uint64, error) } -func (m *MockICS4Wrapper) SendPacket(ctx sdk.Context, channelCap *capabilitytypes.Capability, sourcePort, sourceChannel string, timeoutHeight clienttypes.Height, timeoutTimestamp uint64, data []byte) (uint64, error) { +func (m *MockIBCPacketSender) SendPacket(ctx sdk.Context, channelCap *capabilitytypes.Capability, sourcePort, sourceChannel string, timeoutHeight clienttypes.Height, timeoutTimestamp uint64, data []byte) (uint64, error) { if m.SendPacketFn == nil { panic("not supposed to be called!") } return m.SendPacketFn(ctx, channelCap, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, data) } -func (m *MockICS4Wrapper) WriteAcknowledgement( - ctx sdk.Context, - chanCap *capabilitytypes.Capability, - packet ibcexported.PacketI, - acknowledgement ibcexported.Acknowledgement, -) error { - if m.WriteAcknowledgementFn == nil { - panic("not supposed to be called!") - } - return m.WriteAcknowledgementFn(ctx, chanCap, packet, acknowledgement) -} - func MockChannelKeeperIterator(s []channeltypes.IdentifiedChannel) func(ctx sdk.Context, cb func(channeltypes.IdentifiedChannel) bool) { return func(ctx sdk.Context, cb func(channeltypes.IdentifiedChannel) bool) { for _, channel := range s { @@ -142,45 +122,3 @@ func (m MockIBCTransferKeeper) GetPort(ctx sdk.Context) string { } return m.GetPortFn(ctx) } - -var _ types.IBCContractKeeper = &IBCContractKeeperMock{} - -type IBCContractKeeperMock struct { - types.IBCContractKeeper - OnRecvPacketFn func(ctx sdk.Context, contractAddr sdk.AccAddress, msg wasmvmtypes.IBCPacketReceiveMsg) (ibcexported.Acknowledgement, error) - - packets map[string]channeltypes.Packet -} - -func (m *IBCContractKeeperMock) OnRecvPacket(ctx sdk.Context, contractAddr sdk.AccAddress, msg wasmvmtypes.IBCPacketReceiveMsg) (ibcexported.Acknowledgement, error) { - if m.OnRecvPacketFn == nil { - panic("not expected to be called") - } - return m.OnRecvPacketFn(ctx, contractAddr, msg) -} - -func (m *IBCContractKeeperMock) LoadAsyncAckPacket(ctx context.Context, portID, channelID string, sequence uint64) (channeltypes.Packet, error) { - if m.packets == nil { - m.packets = make(map[string]channeltypes.Packet) - } - key := portID + fmt.Sprint(len(channelID)) + channelID - packet, ok := m.packets[key] - if !ok { - return channeltypes.Packet{}, fmt.Errorf("packet not found") - } - return packet, nil -} - -func (m *IBCContractKeeperMock) StoreAsyncAckPacket(ctx context.Context, packet channeltypes.Packet) error { - if m.packets == nil { - m.packets = make(map[string]channeltypes.Packet) - } - key := packet.DestinationPort + fmt.Sprint(len(packet.DestinationChannel)) + packet.DestinationChannel - m.packets[key] = packet - return nil -} - -func (m *IBCContractKeeperMock) DeleteAsyncAckPacket(ctx context.Context, portID, channelID string, sequence uint64) { - key := portID + fmt.Sprint(len(channelID)) + channelID - delete(m.packets, key) -} diff --git a/x/wasm/module_test.go b/x/wasm/module_test.go index e2af18b..96dee2c 100644 --- a/x/wasm/module_test.go +++ b/x/wasm/module_test.go @@ -63,10 +63,7 @@ func setupTest(t *testing.T) testData { InstantiateDefaultPermission: v2.AccessTypeEverybody, } - ctx, keepers := keeper.CreateTestInput(t, false, []string{ - "iterator", "staking", "stargate", "cosmwasm_1_1", "cosmwasm_1_2", "cosmwasm_1_3", - "cosmwasm_1_4", "cosmwasm_2_0", "cosmwasm_2_1", - }) + ctx, keepers := keeper.CreateTestInput(t, false, []string{"iterator", "staking", "stargate", "cosmwasm_1_1", "cosmwasm_1_2", "cosmwasm_1_3", "cosmwasm_1_4", "cosmwasm_2_0"}) encConf := keeper.MakeEncodingConfig(t) queryRouter := baseapp.NewGRPCQueryRouter() serviceRouter := baseapp.NewMsgServiceRouter() diff --git a/x/wasm/types/context.go b/x/wasm/types/context.go index 002cf01..60d5ded 100644 --- a/x/wasm/types/context.go +++ b/x/wasm/types/context.go @@ -18,8 +18,6 @@ const ( contextKeySubMsgAuthzPolicy = iota // gas register contextKeyGasRegister = iota - - contextKeyCallDepth contextKey = iota ) // WithTXCounter stores a transaction counter value in the context @@ -45,15 +43,6 @@ func QueryStackSize(ctx context.Context) (uint32, bool) { return val, ok } -func WithCallDepth(ctx sdk.Context, counter uint32) sdk.Context { - return ctx.WithValue(contextKeyCallDepth, counter) -} - -func CallDepth(ctx context.Context) (uint32, bool) { - val, ok := ctx.Value(contextKeyCallDepth).(uint32) - return val, ok -} - // WithSubMsgAuthzPolicy stores the authorization policy for submessages into the context returned func WithSubMsgAuthzPolicy(ctx sdk.Context, policy AuthorizationPolicy) sdk.Context { if policy == nil { diff --git a/x/wasm/types/errors.go b/x/wasm/types/errors.go index 7ed79d5..00ea45d 100644 --- a/x/wasm/types/errors.go +++ b/x/wasm/types/errors.go @@ -89,9 +89,6 @@ var ( // ErrVMError means an error occurred in wasmvm (not in the contract itself, but in the host environment) ErrVMError = errorsmod.Register(DefaultCodespace, 29, "wasmvm error") - - // ErrExceedMaxCallDepth error if max message stack size is exceeded - ErrExceedMaxCallDepth = errorsmod.Register(DefaultCodespace, 30, "max call depth exceeded") ) // WasmVMErrorable mapped error type in wasmvm and are not redacted diff --git a/x/wasm/types/expected_keepers.go b/x/wasm/types/expected_keepers.go index e3c60fa..d2df911 100644 --- a/x/wasm/types/expected_keepers.go +++ b/x/wasm/types/expected_keepers.go @@ -4,7 +4,7 @@ import ( "context" capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" //nolint:staticcheck connectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" @@ -105,13 +105,6 @@ type ICS4Wrapper interface { timeoutTimestamp uint64, data []byte, ) (uint64, error) - - WriteAcknowledgement( - ctx sdk.Context, - chanCap *capabilitytypes.Capability, - packet ibcexported.PacketI, - acknowledgement ibcexported.Acknowledgement, - ) error } // ClientKeeper defines the expected IBC client keeper diff --git a/x/wasm/types/exported_keepers.go b/x/wasm/types/exported_keepers.go index 0ece2c0..918ad21 100644 --- a/x/wasm/types/exported_keepers.go +++ b/x/wasm/types/exported_keepers.go @@ -5,7 +5,6 @@ import ( wasmvmtypes "github.com/CosmWasm/wasmvm/v2/types" capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" - channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" sdk "github.com/cosmos/cosmos-sdk/types" @@ -116,29 +115,9 @@ type IBCContractKeeper interface { contractAddr sdk.AccAddress, msg wasmvmtypes.IBCPacketTimeoutMsg, ) error - IBCSourceCallback( - ctx sdk.Context, - contractAddr sdk.AccAddress, - msg wasmvmtypes.IBCSourceCallbackMsg, - ) error - IBCDestinationCallback( - ctx sdk.Context, - contractAddr sdk.AccAddress, - msg wasmvmtypes.IBCDestinationCallbackMsg, - ) error // ClaimCapability allows the transfer module to claim a capability // that IBC module passes to it ClaimCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) error // AuthenticateCapability wraps the scopedKeeper's AuthenticateCapability function AuthenticateCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) bool - - // LoadAsyncAckPacket loads a previously stored packet. See StoreAsyncAckPacket for more details. - // Both the portID and channelID are the ones on the destination chain (the chain that this is executed on). - LoadAsyncAckPacket(ctx context.Context, portID, channelID string, sequence uint64) (channeltypes.Packet, error) - // StoreAsyncAckPacket stores a packet to be acknowledged later. These are packets that were - // received and processed by the contract, but the contract did not want to acknowledge them immediately. - // They are stored in the keeper until the contract calls "WriteAcknowledgement" to acknowledge them. - StoreAsyncAckPacket(ctx context.Context, packet channeltypes.Packet) error - // DeleteAsyncAckPacket deletes a previously stored packet. See StoreAsyncAckPacket for more details. - DeleteAsyncAckPacket(ctx context.Context, portID, channelID string, sequence uint64) } diff --git a/x/wasm/types/gas_register.go b/x/wasm/types/gas_register.go index 37d12d4..ca6e11c 100644 --- a/x/wasm/types/gas_register.go +++ b/x/wasm/types/gas_register.go @@ -80,7 +80,7 @@ type GasRegister interface { // SetupContractCost are charged when interacting with a Wasm contract, i.e. every time // the contract is prepared for execution through any entry point (execute/instantiate/sudo/query/ibc_*/...). SetupContractCost(discount bool, msgLen int) storetypes.Gas - // ReplyCosts costs to handle a message reply + // ReplyCosts costs to to handle a message reply ReplyCosts(discount bool, reply wasmvmtypes.Reply) storetypes.Gas // EventCosts costs to persist an event EventCosts(attrs []wasmvmtypes.EventAttribute, events wasmvmtypes.Array[wasmvmtypes.Event]) storetypes.Gas @@ -187,7 +187,7 @@ func (g WasmGasRegister) SetupContractCost(discount bool, msgLen int) storetypes } } -// ReplyCosts costs to handle a message reply. +// ReplyCosts costs to to handle a message reply. // Set discount to true in cases where you can reasonably assume the contract // is loaded from an in-memory cache (e.g. pinned contracts or replys). func (g WasmGasRegister) ReplyCosts(discount bool, reply wasmvmtypes.Reply) storetypes.Gas { diff --git a/x/wasm/types/ibc.pb.go b/x/wasm/types/ibc.pb.go index 4703ce6..0e25049 100644 --- a/x/wasm/types/ibc.pb.go +++ b/x/wasm/types/ibc.pb.go @@ -123,47 +123,6 @@ func (m *MsgIBCSendResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgIBCSendResponse proto.InternalMessageInfo -// MsgIBCWriteAcknowledgementResponse -type MsgIBCWriteAcknowledgementResponse struct{} - -func (m *MsgIBCWriteAcknowledgementResponse) Reset() { *m = MsgIBCWriteAcknowledgementResponse{} } -func (m *MsgIBCWriteAcknowledgementResponse) String() string { return proto.CompactTextString(m) } -func (*MsgIBCWriteAcknowledgementResponse) ProtoMessage() {} -func (*MsgIBCWriteAcknowledgementResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_af0d1c43ea53c4b9, []int{2} -} - -func (m *MsgIBCWriteAcknowledgementResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} - -func (m *MsgIBCWriteAcknowledgementResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgIBCWriteAcknowledgementResponse.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 *MsgIBCWriteAcknowledgementResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgIBCWriteAcknowledgementResponse.Merge(m, src) -} - -func (m *MsgIBCWriteAcknowledgementResponse) XXX_Size() int { - return m.Size() -} - -func (m *MsgIBCWriteAcknowledgementResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgIBCWriteAcknowledgementResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgIBCWriteAcknowledgementResponse proto.InternalMessageInfo - // MsgIBCCloseChannel port and channel need to be owned by the contract type MsgIBCCloseChannel struct { Channel string `protobuf:"bytes,2,opt,name=channel,proto3" json:"channel,omitempty" yaml:"source_channel"` @@ -173,7 +132,7 @@ func (m *MsgIBCCloseChannel) Reset() { *m = MsgIBCCloseChannel{} } func (m *MsgIBCCloseChannel) String() string { return proto.CompactTextString(m) } func (*MsgIBCCloseChannel) ProtoMessage() {} func (*MsgIBCCloseChannel) Descriptor() ([]byte, []int) { - return fileDescriptor_af0d1c43ea53c4b9, []int{3} + return fileDescriptor_af0d1c43ea53c4b9, []int{2} } func (m *MsgIBCCloseChannel) XXX_Unmarshal(b []byte) error { @@ -210,36 +169,34 @@ var xxx_messageInfo_MsgIBCCloseChannel proto.InternalMessageInfo func init() { proto.RegisterType((*MsgIBCSend)(nil), "cosmwasm.wasm.v1.MsgIBCSend") proto.RegisterType((*MsgIBCSendResponse)(nil), "cosmwasm.wasm.v1.MsgIBCSendResponse") - proto.RegisterType((*MsgIBCWriteAcknowledgementResponse)(nil), "cosmwasm.wasm.v1.MsgIBCWriteAcknowledgementResponse") proto.RegisterType((*MsgIBCCloseChannel)(nil), "cosmwasm.wasm.v1.MsgIBCCloseChannel") } func init() { proto.RegisterFile("cosmwasm/wasm/v1/ibc.proto", fileDescriptor_af0d1c43ea53c4b9) } var fileDescriptor_af0d1c43ea53c4b9 = []byte{ - // 349 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x51, 0xc1, 0x4e, 0xc2, 0x40, - 0x10, 0xed, 0x1a, 0x44, 0xdd, 0xa8, 0xc1, 0x8d, 0x26, 0x95, 0x98, 0x42, 0x36, 0xc6, 0x70, 0xa2, - 0x12, 0x6e, 0x9e, 0x94, 0x7a, 0x90, 0x83, 0x97, 0x6a, 0x42, 0xe2, 0x85, 0x94, 0x76, 0xd2, 0x36, - 0x76, 0xbb, 0x95, 0xdd, 0x82, 0xfc, 0x85, 0x9f, 0xc5, 0x91, 0xa3, 0x27, 0xa2, 0xe5, 0x0f, 0xf8, - 0x02, 0x43, 0xe9, 0xa2, 0x5c, 0xbd, 0x4c, 0x67, 0xde, 0x7b, 0xf3, 0x9a, 0x9d, 0x87, 0xab, 0x2e, - 0x17, 0x6c, 0xec, 0x08, 0x66, 0xe6, 0x65, 0xd4, 0x32, 0xc3, 0x81, 0xdb, 0x4c, 0x86, 0x5c, 0x72, - 0x52, 0x51, 0x5c, 0x33, 0x2f, 0xa3, 0x56, 0xf5, 0xd4, 0xe7, 0x3e, 0xcf, 0x49, 0x73, 0xd5, 0xad, - 0x75, 0x34, 0x43, 0x18, 0x3f, 0x0a, 0xbf, 0xdb, 0xb1, 0x9e, 0x20, 0xf6, 0x48, 0x1b, 0xef, 0xb9, - 0x81, 0x13, 0xc7, 0x10, 0xe9, 0x3b, 0x75, 0xd4, 0x38, 0xe8, 0x9c, 0x2f, 0xe7, 0xb5, 0xb3, 0x89, - 0xc3, 0xa2, 0x1b, 0x2a, 0x78, 0x3a, 0x74, 0xa1, 0x5f, 0xf0, 0xd4, 0x56, 0x4a, 0x72, 0x8b, 0x8f, - 0x65, 0xc8, 0x80, 0xa7, 0xb2, 0x1f, 0x40, 0xe8, 0x07, 0x52, 0x2f, 0xd5, 0x51, 0xa3, 0xf4, 0x77, - 0x77, 0x9b, 0xa7, 0xf6, 0x51, 0x01, 0x3c, 0xe4, 0x33, 0xe9, 0xe2, 0x13, 0xa5, 0x58, 0x7d, 0x85, - 0x74, 0x58, 0xa2, 0xef, 0xe6, 0x26, 0x17, 0xcb, 0x79, 0x4d, 0xdf, 0x36, 0xd9, 0x48, 0xa8, 0x5d, - 0x29, 0xb0, 0x67, 0x05, 0x11, 0x82, 0x4b, 0x9e, 0x23, 0x1d, 0xbd, 0x5c, 0x47, 0x8d, 0x43, 0x3b, - 0xef, 0xe9, 0x35, 0x26, 0xbf, 0x6f, 0xb4, 0x41, 0x24, 0x3c, 0x16, 0x40, 0xaa, 0x78, 0x5f, 0xc0, - 0x5b, 0x0a, 0xb1, 0x0b, 0x3a, 0x5a, 0xfd, 0xcb, 0xde, 0xcc, 0xf4, 0x12, 0xd3, 0xf5, 0x46, 0x6f, - 0x18, 0x4a, 0xb8, 0x73, 0x5f, 0x63, 0x3e, 0x8e, 0xc0, 0xf3, 0x81, 0x41, 0x2c, 0x95, 0x03, 0xed, - 0x2a, 0x5f, 0x2b, 0xe2, 0x02, 0xac, 0xe2, 0x1c, 0xff, 0xb9, 0x61, 0xe7, 0x7e, 0xfa, 0x6d, 0x68, - 0xd3, 0xcc, 0x40, 0xb3, 0xcc, 0x40, 0x5f, 0x99, 0x81, 0x3e, 0x16, 0x86, 0x36, 0x5b, 0x18, 0xda, - 0xe7, 0xc2, 0xd0, 0x5e, 0xae, 0xfc, 0x50, 0x06, 0xe9, 0xa0, 0xe9, 0x72, 0x66, 0x5a, 0x5c, 0xb0, - 0x9e, 0x0a, 0xdd, 0x33, 0xdf, 0xd7, 0xe1, 0xcb, 0x49, 0x02, 0x62, 0x50, 0xce, 0x43, 0x6d, 0xff, - 0x04, 0x00, 0x00, 0xff, 0xff, 0x70, 0x2b, 0x1f, 0x90, 0x1a, 0x02, 0x00, 0x00, + // 329 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x51, 0xc1, 0x4e, 0xf2, 0x40, + 0x10, 0xee, 0xfe, 0xe1, 0x47, 0xdd, 0xa8, 0xc1, 0x8d, 0x26, 0x95, 0x98, 0x85, 0xec, 0xc1, 0x70, + 0xa2, 0x12, 0x6e, 0x9e, 0x0c, 0xf5, 0x20, 0x07, 0x2f, 0xd5, 0xc4, 0xc4, 0x0b, 0x29, 0x65, 0xd2, + 0x36, 0x61, 0xbb, 0x95, 0xdd, 0xa2, 0xbc, 0x85, 0x8f, 0xc5, 0x91, 0xa3, 0x27, 0xa2, 0xe5, 0x0d, + 0x78, 0x02, 0xd3, 0xa5, 0x8b, 0x72, 0xf5, 0x32, 0x3b, 0xf3, 0x7d, 0xdf, 0xcc, 0x66, 0xe6, 0xc3, + 0xf5, 0x40, 0x48, 0xfe, 0xea, 0x4b, 0xee, 0xe8, 0x30, 0xed, 0x38, 0xf1, 0x30, 0x68, 0xa7, 0x13, + 0xa1, 0x04, 0xa9, 0x19, 0xae, 0xad, 0xc3, 0xb4, 0x53, 0x3f, 0x0d, 0x45, 0x28, 0x34, 0xe9, 0x14, + 0xd9, 0x46, 0xc7, 0x72, 0x84, 0xf1, 0xbd, 0x0c, 0xfb, 0x3d, 0xf7, 0x01, 0x92, 0x11, 0xe9, 0xe2, + 0xbd, 0x20, 0xf2, 0x93, 0x04, 0xc6, 0xf6, 0xbf, 0x26, 0x6a, 0x1d, 0xf4, 0xce, 0xd7, 0xcb, 0xc6, + 0xd9, 0xcc, 0xe7, 0xe3, 0x6b, 0x26, 0x45, 0x36, 0x09, 0x60, 0x50, 0xf2, 0xcc, 0x33, 0x4a, 0x72, + 0x83, 0x8f, 0x55, 0xcc, 0x41, 0x64, 0x6a, 0x10, 0x41, 0x1c, 0x46, 0xca, 0xae, 0x34, 0x51, 0xab, + 0xf2, 0xbb, 0x77, 0x97, 0x67, 0xde, 0x51, 0x09, 0xdc, 0xe9, 0x9a, 0xf4, 0xf1, 0x89, 0x51, 0x14, + 0xaf, 0x54, 0x3e, 0x4f, 0xed, 0xff, 0x7a, 0xc8, 0xc5, 0x7a, 0xd9, 0xb0, 0x77, 0x87, 0x6c, 0x25, + 0xcc, 0xab, 0x95, 0xd8, 0xa3, 0x81, 0x08, 0xc1, 0x95, 0x91, 0xaf, 0x7c, 0xbb, 0xda, 0x44, 0xad, + 0x43, 0x4f, 0xe7, 0xec, 0x0a, 0x93, 0x9f, 0x1d, 0x3d, 0x90, 0xa9, 0x48, 0x24, 0x90, 0x3a, 0xde, + 0x97, 0xf0, 0x92, 0x41, 0x12, 0x80, 0x8d, 0x8a, 0xbf, 0xbc, 0x6d, 0xcd, 0xfa, 0xa6, 0xc3, 0x1d, + 0x0b, 0x09, 0x6e, 0xb9, 0xe8, 0x5f, 0xae, 0xd3, 0xbb, 0x9d, 0x7f, 0x51, 0x6b, 0x9e, 0x53, 0xb4, + 0xc8, 0x29, 0xfa, 0xcc, 0x29, 0x7a, 0x5f, 0x51, 0x6b, 0xb1, 0xa2, 0xd6, 0xc7, 0x8a, 0x5a, 0xcf, + 0x97, 0x61, 0xac, 0xa2, 0x6c, 0xd8, 0x0e, 0x04, 0x77, 0x5c, 0x21, 0xf9, 0x93, 0xb1, 0x73, 0xe4, + 0xbc, 0x6d, 0x6c, 0x55, 0xb3, 0x14, 0xe4, 0xb0, 0xaa, 0xed, 0xea, 0x7e, 0x07, 0x00, 0x00, 0xff, + 0xff, 0x2c, 0xea, 0x36, 0xb0, 0xf4, 0x01, 0x00, 0x00, } func (m *MsgIBCSend) Marshal() (dAtA []byte, err error) { @@ -317,29 +274,6 @@ func (m *MsgIBCSendResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *MsgIBCWriteAcknowledgementResponse) 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 *MsgIBCWriteAcknowledgementResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgIBCWriteAcknowledgementResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - func (m *MsgIBCCloseChannel) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -417,15 +351,6 @@ func (m *MsgIBCSendResponse) Size() (n int) { return n } -func (m *MsgIBCWriteAcknowledgementResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - func (m *MsgIBCCloseChannel) Size() (n int) { if m == nil { return 0 @@ -672,57 +597,6 @@ func (m *MsgIBCSendResponse) Unmarshal(dAtA []byte) error { return nil } -func (m *MsgIBCWriteAcknowledgementResponse) 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 ErrIntOverflowIbc - } - 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: MsgIBCWriteAcknowledgementResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgIBCWriteAcknowledgementResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipIbc(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthIbc - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} - func (m *MsgIBCCloseChannel) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/wasm/types/keys.go b/x/wasm/types/keys.go index 107b9de..468d986 100644 --- a/x/wasm/types/keys.go +++ b/x/wasm/types/keys.go @@ -1,8 +1,6 @@ package types import ( - "encoding/binary" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/address" ) @@ -35,7 +33,6 @@ var ( TXCounterPrefix = []byte{0x08} ContractsByCreatorPrefix = []byte{0x09} ParamsKey = []byte{0x10} - AsyncAckKeyPrefix = []byte{0x11} KeySequenceCodeID = append(SequenceKeyPrefix, []byte("lastCodeId")...) KeySequenceInstanceID = append(SequenceKeyPrefix, []byte("lastContractId")...) @@ -63,23 +60,6 @@ func GetContractStorePrefix(addr sdk.AccAddress) []byte { return append(ContractStorePrefix, addr...) } -// GetAsyncPacketKey returns the key for a packet that is acknowledged asynchronously -func GetAsyncPacketKey(destChannel string, sequence uint64) []byte { - // key is a concatenation of length-prefixed destination channel and sequence - channel := []byte(destChannel) - channelLen := make([]byte, 4) - binary.BigEndian.PutUint32(channelLen, uint32(len(channel))) - seq := make([]byte, 8) - binary.BigEndian.PutUint64(seq, sequence) - - return append(append(channelLen, channel...), seq...) -} - -// GetAsyncAckStorePrefix returns the store prefix for packets that are acknowledged asynchronously -func GetAsyncAckStorePrefix(portID string) []byte { - return append(AsyncAckKeyPrefix, portID...) -} - // GetContractByCreatedSecondaryIndexKey returns the key for the secondary index: // `` func GetContractByCreatedSecondaryIndexKey(contractAddr sdk.AccAddress, c ContractCodeHistoryEntry) []byte { diff --git a/x/wasm/types/params.go b/x/wasm/types/params.go index c5cfb67..4b923b1 100644 --- a/x/wasm/types/params.go +++ b/x/wasm/types/params.go @@ -29,7 +29,7 @@ func (a AccessType) With(addrs ...sdk.AccAddress) AccessConfig { for i, v := range addrs { bech32Addrs[i] = v.String() } - if err := validateBech32Addresses(bech32Addrs); err != nil { + if err := assertValidAddresses(bech32Addrs); err != nil { panic(errorsmod.Wrap(err, "addresses")) } return AccessConfig{Permission: AccessTypeAnyOfAddresses, Addresses: bech32Addrs} @@ -129,11 +129,28 @@ func (a AccessConfig) ValidateBasic() error { case AccessTypeNobody, AccessTypeEverybody: return nil case AccessTypeAnyOfAddresses: - return errorsmod.Wrap(validateBech32Addresses(a.Addresses), "addresses") + return errorsmod.Wrap(assertValidAddresses(a.Addresses), "addresses") } return errorsmod.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 { + return errorsmod.Wrapf(err, "address: %s", a) + } + if _, exists := idx[a]; exists { + return ErrDuplicate.Wrapf("address: %s", a) + } + idx[a] = struct{}{} + } + 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 { diff --git a/x/wasm/types/query.pb.go b/x/wasm/types/query.pb.go index 421d124..8b53310 100644 --- a/x/wasm/types/query.pb.go +++ b/x/wasm/types/query.pb.go @@ -1210,102 +1210,101 @@ func init() { func init() { proto.RegisterFile("cosmwasm/wasm/v1/query.proto", fileDescriptor_9677c207036b9f2b) } var fileDescriptor_9677c207036b9f2b = []byte{ - // 1508 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x98, 0xcf, 0x6f, 0x1b, 0x45, - 0x14, 0xc7, 0x3d, 0xa9, 0xe3, 0xd8, 0x93, 0x40, 0x9d, 0xa1, 0xb4, 0xae, 0xdb, 0xda, 0xd1, 0xb6, - 0x84, 0xd4, 0x6d, 0xbd, 0x4d, 0x4a, 0xa9, 0x5a, 0x0e, 0xc8, 0x4e, 0x4b, 0xd3, 0x8a, 0xd2, 0xd4, - 0x95, 0x40, 0x02, 0x21, 0x33, 0xb6, 0x27, 0xce, 0x22, 0x7b, 0xd7, 0xdd, 0x99, 0x34, 0x8d, 0xa2, - 0xf4, 0xd0, 0x13, 0x12, 0x17, 0x10, 0x07, 0x44, 0x91, 0x80, 0x03, 0x87, 0xa2, 0x82, 0x54, 0x09, - 0x24, 0x2a, 0x24, 0xee, 0x39, 0x56, 0x70, 0xe1, 0x64, 0x41, 0x8a, 0x54, 0xd4, 0x3f, 0xa1, 0x27, - 0xb4, 0xf3, 0xc3, 0xbb, 0x6b, 0x7b, 0x6d, 0x27, 0xf8, 0xc0, 0x25, 0x5a, 0xef, 0xbe, 0x37, 0xf3, - 0x99, 0xef, 0xbc, 0x79, 0xef, 0x4d, 0xe0, 0xc1, 0xb2, 0x45, 0xeb, 0xab, 0x98, 0xd6, 0x75, 0xfe, - 0xe7, 0xe6, 0xac, 0x7e, 0x63, 0x85, 0xd8, 0x6b, 0xd9, 0x86, 0x6d, 0x31, 0x0b, 0xc5, 0xd5, 0xd7, - 0x2c, 0xff, 0x73, 0x73, 0x36, 0xb9, 0xa7, 0x6a, 0x55, 0x2d, 0xfe, 0x51, 0x77, 0x9e, 0x84, 0x5d, - 0xb2, 0x73, 0x14, 0xb6, 0xd6, 0x20, 0x54, 0x7d, 0xad, 0x5a, 0x56, 0xb5, 0x46, 0x74, 0xdc, 0x30, - 0x74, 0x6c, 0x9a, 0x16, 0xc3, 0xcc, 0xb0, 0x4c, 0xf5, 0x35, 0xe3, 0xf8, 0x5a, 0x54, 0x2f, 0x61, - 0x4a, 0xc4, 0xe4, 0xfa, 0xcd, 0xd9, 0x12, 0x61, 0x78, 0x56, 0x6f, 0xe0, 0xaa, 0x61, 0x72, 0x63, - 0x69, 0x7b, 0x40, 0xda, 0x2a, 0x33, 0x2f, 0x6c, 0x72, 0x12, 0xd7, 0x0d, 0xd3, 0xd2, 0xf9, 0x5f, - 0xf9, 0x6a, 0xbf, 0xb0, 0x2f, 0x0a, 0x60, 0xf1, 0x43, 0x7c, 0xd2, 0xde, 0x82, 0x89, 0x6b, 0x8e, - 0xf3, 0xbc, 0x65, 0x32, 0x1b, 0x97, 0xd9, 0x25, 0x73, 0xc9, 0x2a, 0x90, 0x1b, 0x2b, 0x84, 0x32, - 0x34, 0x07, 0xc7, 0x70, 0xa5, 0x62, 0x13, 0x4a, 0x13, 0x60, 0x0a, 0xcc, 0xc4, 0xf2, 0x89, 0xdf, - 0x7e, 0x3a, 0xb1, 0x47, 0xba, 0xe7, 0xc4, 0x97, 0xeb, 0xcc, 0x36, 0xcc, 0x6a, 0x41, 0x19, 0x6a, - 0x3f, 0x00, 0xb8, 0xbf, 0xcb, 0x80, 0xb4, 0x61, 0x99, 0x94, 0xec, 0x64, 0x44, 0xf4, 0x36, 0x7c, - 0xae, 0x2c, 0xc7, 0x2a, 0x1a, 0xe6, 0x92, 0x95, 0x18, 0x99, 0x02, 0x33, 0xe3, 0x73, 0xa9, 0x6c, - 0xfb, 0xa6, 0x64, 0xbd, 0x53, 0xe6, 0x27, 0x37, 0x9b, 0xe9, 0xd0, 0xa3, 0x66, 0x1a, 0x3c, 0x6d, - 0xa6, 0x43, 0xf7, 0x9e, 0x3c, 0xc8, 0x80, 0xc2, 0x44, 0xd9, 0x63, 0x70, 0x2e, 0xfc, 0xcf, 0x37, - 0x69, 0xa0, 0x7d, 0x01, 0xe0, 0x01, 0x1f, 0xef, 0x82, 0x41, 0x99, 0x65, 0xaf, 0xfd, 0x07, 0x0d, - 0xd0, 0x1b, 0x10, 0xba, 0x5b, 0x26, 0x71, 0xa7, 0xb3, 0xd2, 0xc7, 0xd9, 0xdf, 0xac, 0xd8, 0x2f, - 0xb9, 0xbf, 0xd9, 0x45, 0x5c, 0x25, 0x72, 0xbe, 0x82, 0xc7, 0x53, 0x7b, 0x08, 0xe0, 0xc1, 0xee, - 0x6c, 0x52, 0xce, 0xab, 0x70, 0x8c, 0x98, 0xcc, 0x36, 0x88, 0x03, 0xb7, 0x6b, 0x66, 0x7c, 0x2e, - 0x13, 0x2c, 0xca, 0xbc, 0x55, 0x21, 0xd2, 0xff, 0x82, 0xc9, 0xec, 0xb5, 0x7c, 0x6c, 0xb3, 0x25, - 0x8c, 0x1a, 0x05, 0x5d, 0xec, 0x42, 0xfe, 0x72, 0x5f, 0x72, 0x41, 0xe3, 0x43, 0xbf, 0xdd, 0xa6, - 0x2a, 0xcd, 0xaf, 0x39, 0x00, 0x4a, 0xd5, 0x7d, 0x70, 0xac, 0x6c, 0x55, 0x48, 0xd1, 0xa8, 0x70, - 0x55, 0xc3, 0x85, 0x88, 0xf3, 0xf3, 0x52, 0x65, 0x68, 0xd2, 0x7d, 0xdd, 0x2e, 0x5d, 0x0b, 0x40, - 0x4a, 0xf7, 0x2a, 0x8c, 0xa9, 0x68, 0x10, 0xe2, 0xf5, 0xda, 0x59, 0xd7, 0x74, 0x78, 0x0a, 0xdd, - 0x55, 0x84, 0xb9, 0x5a, 0x4d, 0x41, 0x5e, 0x67, 0x98, 0x91, 0xff, 0x43, 0xe4, 0x7d, 0x0b, 0xe0, - 0xa1, 0x00, 0x38, 0xa9, 0xdf, 0x39, 0x18, 0xa9, 0x5b, 0x15, 0x52, 0x53, 0x91, 0xb7, 0xaf, 0x33, - 0xf2, 0xae, 0x38, 0xdf, 0xbd, 0x61, 0x26, 0x3d, 0x86, 0xa7, 0xe1, 0x0d, 0x29, 0x61, 0x01, 0xaf, - 0x0e, 0x4d, 0xc2, 0x43, 0x10, 0xf2, 0xd9, 0x8b, 0x15, 0xcc, 0x30, 0x87, 0x9b, 0x28, 0xc4, 0xf8, - 0x9b, 0xf3, 0x98, 0x61, 0xed, 0x94, 0x14, 0xa6, 0x73, 0x4a, 0x29, 0x0c, 0x82, 0x61, 0xee, 0x09, - 0xb8, 0x27, 0x7f, 0xd6, 0xbe, 0x04, 0x30, 0xc5, 0xbd, 0xae, 0xd7, 0xb1, 0xcd, 0x86, 0x86, 0x7a, - 0xa1, 0x13, 0x35, 0x3f, 0xfd, 0xac, 0x99, 0x46, 0x1e, 0xb8, 0x2b, 0x84, 0x52, 0x5c, 0x25, 0x77, - 0x9f, 0x3c, 0xc8, 0x8c, 0x1b, 0x66, 0xcd, 0x30, 0x49, 0xf1, 0x43, 0x6a, 0x99, 0xde, 0x25, 0xbd, - 0x0f, 0xd3, 0x81, 0x70, 0xad, 0xdd, 0xf6, 0x2c, 0x6a, 0xe0, 0x39, 0xc4, 0xe2, 0x8f, 0xc1, 0xb8, - 0x3c, 0x89, 0xfd, 0xcf, 0xbf, 0xf6, 0x70, 0x04, 0xc6, 0x1d, 0x43, 0x5f, 0xd5, 0x38, 0xda, 0x66, - 0x9d, 0x8f, 0x6f, 0x35, 0xd3, 0x11, 0x6e, 0x76, 0xfe, 0x69, 0x33, 0x3d, 0x62, 0x54, 0x5a, 0xf9, - 0x63, 0x0e, 0x8e, 0x95, 0x6d, 0x82, 0x99, 0x65, 0x73, 0x3d, 0x7a, 0xca, 0x28, 0x0d, 0xd1, 0x35, - 0x18, 0x73, 0x40, 0x8b, 0xcb, 0x98, 0x2e, 0x27, 0x76, 0xf1, 0x15, 0xbe, 0xf2, 0xac, 0x99, 0x3e, - 0x59, 0x35, 0xd8, 0xf2, 0x4a, 0x29, 0x5b, 0xb6, 0xea, 0x7a, 0xd9, 0xaa, 0x13, 0x56, 0x5a, 0x62, - 0xee, 0x43, 0xcd, 0x28, 0x51, 0xbd, 0xb4, 0xc6, 0x08, 0xcd, 0x2e, 0x90, 0x5b, 0x79, 0xe7, 0xa1, - 0x10, 0x75, 0x86, 0x59, 0xc0, 0x74, 0x19, 0x7d, 0x00, 0xf7, 0x1a, 0x26, 0x65, 0xd8, 0x64, 0x06, - 0x66, 0xa4, 0xd8, 0x20, 0x76, 0xdd, 0xa0, 0xd4, 0x89, 0xf6, 0x48, 0x50, 0xf1, 0xca, 0x95, 0xcb, - 0x84, 0xd2, 0x79, 0xcb, 0x5c, 0x32, 0xaa, 0xde, 0x43, 0xf3, 0xa2, 0x67, 0xa0, 0xc5, 0xd6, 0x38, - 0xa2, 0x7a, 0x5d, 0x0e, 0x47, 0xc3, 0xf1, 0xd1, 0xcb, 0xe1, 0xe8, 0x68, 0x3c, 0xa2, 0xdd, 0x01, - 0x70, 0xd2, 0x23, 0xb4, 0xd4, 0xee, 0x92, 0x93, 0xe7, 0x1c, 0xed, 0x9c, 0xca, 0x09, 0xf8, 0xe4, - 0x5a, 0xb7, 0x22, 0xe1, 0x97, 0x3c, 0x1f, 0x55, 0x95, 0xb3, 0x10, 0x2d, 0xcb, 0x6f, 0xe8, 0xa0, - 0x0c, 0x02, 0x11, 0x68, 0xd1, 0xa7, 0xcd, 0x34, 0xff, 0x2d, 0xb6, 0x59, 0x96, 0xd3, 0xf7, 0x3c, - 0x0c, 0x54, 0xed, 0xb6, 0x3f, 0x2b, 0x81, 0x1d, 0x67, 0xa5, 0xfb, 0x00, 0x22, 0xef, 0xe8, 0x72, - 0x89, 0x6f, 0x42, 0xd8, 0x5a, 0xa2, 0x4a, 0x47, 0x83, 0xac, 0xd1, 0x23, 0x72, 0x4c, 0x2d, 0x72, - 0x88, 0xc9, 0x09, 0xc3, 0x7d, 0x1c, 0x76, 0xd1, 0x30, 0x4d, 0x52, 0xe9, 0x21, 0xc8, 0xce, 0xd3, - 0xf4, 0xc7, 0x40, 0x76, 0x6f, 0xbe, 0x39, 0xa4, 0x2c, 0xd3, 0x30, 0x2a, 0x4f, 0x8d, 0x10, 0x25, - 0x9c, 0x1f, 0xdf, 0x6a, 0xa6, 0xc7, 0xc4, 0xb1, 0xa1, 0x85, 0x31, 0x71, 0x62, 0x86, 0xb8, 0xe0, - 0x3d, 0x72, 0x77, 0x16, 0xb1, 0x8d, 0xeb, 0x6a, 0xad, 0x5a, 0x01, 0xbe, 0xe0, 0x7b, 0x2b, 0xe9, - 0x5e, 0x83, 0x91, 0x06, 0x7f, 0x23, 0xe3, 0x21, 0xd1, 0xb9, 0x61, 0xc2, 0xc3, 0x57, 0x40, 0x84, - 0x8b, 0x13, 0x08, 0xa9, 0x8e, 0xea, 0x2e, 0x4e, 0xb3, 0x92, 0x38, 0x07, 0x77, 0xcb, 0xf3, 0x5d, - 0x1c, 0x34, 0xaf, 0x3e, 0x2f, 0x1d, 0x72, 0x43, 0x2e, 0xa6, 0x3f, 0x02, 0x99, 0x60, 0xbb, 0xd1, - 0x4a, 0x39, 0x2e, 0x42, 0xd4, 0x6a, 0x72, 0x25, 0x2f, 0xe9, 0xdf, 0x97, 0x4c, 0x2a, 0x9f, 0x9c, - 0x72, 0x19, 0xde, 0x6e, 0xde, 0x57, 0xb1, 0x95, 0x5f, 0x31, 0x6a, 0x15, 0x39, 0x81, 0x52, 0xf7, - 0x80, 0xcc, 0x2a, 0x3c, 0x65, 0x72, 0x5d, 0x45, 0x9e, 0xe0, 0xc9, 0xaf, 0x8b, 0xf4, 0x23, 0xdb, - 0x94, 0x1e, 0xc1, 0x30, 0xc5, 0x35, 0xc6, 0xb3, 0x71, 0xac, 0xc0, 0x9f, 0x9d, 0x39, 0x0d, 0xd3, - 0x60, 0x45, 0x6c, 0x57, 0x69, 0x22, 0xcc, 0xab, 0x6b, 0xd4, 0x79, 0x91, 0xb3, 0xab, 0x54, 0xbb, - 0x2a, 0x6f, 0x1d, 0x7e, 0xd8, 0x9d, 0xdf, 0x3a, 0xe6, 0x3e, 0xdf, 0x0d, 0x47, 0xf9, 0x88, 0xe8, - 0x2e, 0x80, 0x13, 0xde, 0x9b, 0x05, 0xea, 0xd2, 0x64, 0x07, 0x5d, 0xa1, 0x92, 0xc7, 0x06, 0xb2, - 0x15, 0x9c, 0xda, 0xec, 0x47, 0x4e, 0x94, 0xdf, 0xf9, 0xfd, 0xef, 0xcf, 0x46, 0xa6, 0xd1, 0x11, - 0xbd, 0xe3, 0x32, 0xa9, 0x76, 0x5b, 0x5f, 0x97, 0x94, 0x1b, 0xe8, 0x3e, 0x80, 0xbb, 0xdb, 0x6e, - 0x07, 0xe8, 0x44, 0x9f, 0x39, 0xfd, 0x37, 0x9c, 0x64, 0x76, 0x50, 0x73, 0x49, 0x79, 0xd6, 0xa5, - 0xcc, 0xa2, 0xe3, 0x83, 0x50, 0xea, 0xcb, 0x92, 0xec, 0x3b, 0x0f, 0xad, 0x6c, 0xc8, 0xfb, 0xd2, - 0xfa, 0x6f, 0x0e, 0x7d, 0x69, 0xdb, 0xfa, 0x7c, 0xed, 0x8c, 0x4b, 0x7b, 0x1c, 0x65, 0xba, 0xd1, - 0x56, 0x88, 0xbe, 0x2e, 0x13, 0xe5, 0x86, 0xee, 0x36, 0xfa, 0xdf, 0x03, 0x18, 0x6f, 0xef, 0x7e, - 0x51, 0xd0, 0xec, 0x01, 0x3d, 0x7c, 0x52, 0x1f, 0xd8, 0x7e, 0x60, 0xdc, 0x0e, 0x71, 0x29, 0x27, - 0xfb, 0x19, 0xc0, 0x78, 0x7b, 0x4f, 0x1a, 0x88, 0x1b, 0xd0, 0x2f, 0x07, 0xe2, 0x06, 0x35, 0xbb, - 0x5a, 0xde, 0xc5, 0x3d, 0x83, 0x4e, 0x0f, 0x84, 0x6b, 0xe3, 0x55, 0x7d, 0xdd, 0x6d, 0x5b, 0x37, - 0xd0, 0x2f, 0x00, 0xa2, 0xce, 0xd6, 0x13, 0x9d, 0x0c, 0x60, 0x09, 0x6c, 0xa1, 0x93, 0xb3, 0xdb, - 0xf0, 0x90, 0xfc, 0xaf, 0x73, 0xf4, 0xb3, 0xe8, 0xcc, 0x60, 0x4a, 0x3b, 0x03, 0xf9, 0xe1, 0x6f, - 0xc3, 0x30, 0x8f, 0x62, 0x2d, 0x30, 0x2c, 0xdd, 0xd0, 0x3d, 0xdc, 0xd3, 0x46, 0x12, 0x9d, 0x70, - 0x15, 0xd5, 0xd0, 0x54, 0xbf, 0x78, 0x45, 0xab, 0x70, 0x94, 0x57, 0x7d, 0xd4, 0x6b, 0x70, 0x95, - 0xb6, 0x93, 0x47, 0x7a, 0x1b, 0x49, 0x84, 0xc3, 0x2e, 0x42, 0x02, 0xed, 0xed, 0x8e, 0x80, 0x3e, - 0x05, 0x70, 0xdc, 0xd3, 0x75, 0xa0, 0xa3, 0x01, 0x43, 0x77, 0x76, 0x3f, 0xc9, 0xcc, 0x20, 0xa6, - 0x92, 0xe5, 0x98, 0xcb, 0x32, 0x85, 0x52, 0xdd, 0x59, 0xa8, 0xde, 0xe0, 0x9e, 0xe8, 0x0e, 0x80, - 0x11, 0xd1, 0x34, 0xa0, 0xa0, 0x95, 0xfa, 0x7a, 0x93, 0xe4, 0x4b, 0x7d, 0xac, 0xb6, 0x07, 0x21, - 0x66, 0xfe, 0x15, 0x40, 0xd4, 0x59, 0xe8, 0x03, 0xc3, 0x39, 0xb0, 0x83, 0x09, 0x0c, 0xe7, 0xe0, - 0x2e, 0x62, 0xe0, 0xe3, 0x48, 0x75, 0x59, 0x6f, 0xf5, 0xf5, 0xb6, 0x4a, 0xbd, 0x81, 0xbe, 0x02, - 0x70, 0xc2, 0x5b, 0x45, 0x03, 0xcb, 0x5d, 0x97, 0xbe, 0x20, 0xb0, 0xdc, 0x75, 0x2b, 0xcb, 0xda, - 0x69, 0x97, 0x36, 0x83, 0x66, 0x7a, 0x9c, 0xc0, 0x92, 0xe3, 0xad, 0x08, 0xf3, 0x0b, 0x9b, 0x7f, - 0xa5, 0x42, 0xf7, 0xb6, 0x52, 0xa1, 0xcd, 0xad, 0x14, 0x78, 0xb4, 0x95, 0x02, 0x7f, 0x6e, 0xa5, - 0xc0, 0x27, 0x8f, 0x53, 0xa1, 0x47, 0x8f, 0x53, 0xa1, 0x3f, 0x1e, 0xa7, 0x42, 0xef, 0x4e, 0x7b, - 0x6e, 0x6e, 0xf3, 0x16, 0xad, 0xbf, 0xa3, 0x46, 0xad, 0xe8, 0xb7, 0xc4, 0xe8, 0xfc, 0xdf, 0xb2, - 0xa5, 0x08, 0xff, 0x17, 0xe8, 0xa9, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x4c, 0xae, 0x50, 0x98, - 0xfd, 0x15, 0x00, 0x00, + // 1493 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcf, 0x6f, 0x1b, 0xc5, + 0x17, 0xf7, 0xa4, 0x8e, 0x63, 0x4f, 0xf2, 0x6d, 0x9d, 0xf9, 0x96, 0xd6, 0x75, 0xdb, 0x75, 0xb4, + 0x94, 0x90, 0xba, 0xad, 0xb7, 0x49, 0x0b, 0x15, 0x45, 0x08, 0xd9, 0x69, 0x69, 0x5a, 0x51, 0x9a, + 0xba, 0x12, 0x48, 0x20, 0x64, 0xc6, 0xde, 0x89, 0xb3, 0xc8, 0xde, 0x75, 0x77, 0x26, 0x6d, 0xad, + 0x28, 0x1c, 0x7a, 0x85, 0x03, 0x12, 0xe2, 0xd0, 0x72, 0x80, 0x43, 0x05, 0x95, 0x2a, 0xa4, 0x0a, + 0x38, 0x54, 0xfc, 0x05, 0x39, 0x56, 0x70, 0xe1, 0x64, 0x20, 0x45, 0x2a, 0xca, 0x9f, 0xd0, 0x13, + 0xda, 0x99, 0x59, 0x7b, 0xd7, 0xf6, 0xda, 0xdb, 0xe0, 0x03, 0x17, 0x6b, 0x77, 0xe7, 0xfd, 0xf8, + 0xcc, 0xe7, 0xbd, 0x79, 0xef, 0x8d, 0xe1, 0xa1, 0x8a, 0x45, 0xeb, 0x37, 0x31, 0xad, 0x6b, 0xfc, + 0xe7, 0xc6, 0xbc, 0x76, 0x7d, 0x8d, 0xd8, 0xcd, 0x5c, 0xc3, 0xb6, 0x98, 0x85, 0x92, 0xee, 0x6a, + 0x8e, 0xff, 0xdc, 0x98, 0x4f, 0xef, 0xad, 0x5a, 0x55, 0x8b, 0x2f, 0x6a, 0xce, 0x93, 0x90, 0x4b, + 0xf7, 0x5a, 0x61, 0xcd, 0x06, 0xa1, 0xee, 0x6a, 0xd5, 0xb2, 0xaa, 0x35, 0xa2, 0xe1, 0x86, 0xa1, + 0x61, 0xd3, 0xb4, 0x18, 0x66, 0x86, 0x65, 0xba, 0xab, 0x59, 0x47, 0xd7, 0xa2, 0x5a, 0x19, 0x53, + 0x22, 0x9c, 0x6b, 0x37, 0xe6, 0xcb, 0x84, 0xe1, 0x79, 0xad, 0x81, 0xab, 0x86, 0xc9, 0x85, 0xa5, + 0xec, 0x34, 0xae, 0x1b, 0xa6, 0xa5, 0xf1, 0x5f, 0xf9, 0xe9, 0x80, 0x50, 0x2f, 0x09, 0x4c, 0xe2, + 0x45, 0x2c, 0xa9, 0xef, 0xc0, 0xd4, 0x55, 0xc7, 0xde, 0xa2, 0x65, 0x32, 0x1b, 0x57, 0xd8, 0x45, + 0x73, 0xc5, 0x2a, 0x92, 0xeb, 0x6b, 0x84, 0x32, 0xb4, 0x00, 0x27, 0xb0, 0xae, 0xdb, 0x84, 0xd2, + 0x14, 0x98, 0x01, 0x73, 0x89, 0x42, 0xea, 0x97, 0x9f, 0x4e, 0xec, 0x95, 0xea, 0x79, 0xb1, 0x72, + 0x8d, 0xd9, 0x86, 0x59, 0x2d, 0xba, 0x82, 0xea, 0xf7, 0x00, 0x1e, 0xe8, 0x63, 0x90, 0x36, 0x2c, + 0x93, 0x92, 0x9d, 0x58, 0x44, 0xef, 0xc2, 0xff, 0x55, 0xa4, 0xad, 0x92, 0x61, 0xae, 0x58, 0xa9, + 0xb1, 0x19, 0x30, 0x37, 0xb9, 0xa0, 0xe4, 0xba, 0x79, 0xcf, 0x79, 0x5d, 0x16, 0xa6, 0x37, 0x5b, + 0x99, 0xc8, 0xe3, 0x56, 0x06, 0x6c, 0xb7, 0x32, 0x91, 0xfb, 0x4f, 0x1f, 0x66, 0x41, 0x71, 0xaa, + 0xe2, 0x11, 0x38, 0x1b, 0xfd, 0xfb, 0x9b, 0x0c, 0x50, 0xef, 0x00, 0x78, 0xd0, 0x87, 0x77, 0xc9, + 0xa0, 0xcc, 0xb2, 0x9b, 0xff, 0x82, 0x03, 0xf4, 0x16, 0x84, 0x9d, 0xa8, 0x48, 0xb8, 0xb3, 0x39, + 0xa9, 0xe3, 0x84, 0x30, 0x27, 0xf2, 0x47, 0x86, 0x30, 0xb7, 0x8c, 0xab, 0x44, 0xfa, 0x2b, 0x7a, + 0x34, 0xd5, 0x47, 0x00, 0x1e, 0xea, 0x8f, 0x4d, 0xd2, 0x79, 0x05, 0x4e, 0x10, 0x93, 0xd9, 0x06, + 0x71, 0xc0, 0xed, 0x9a, 0x9b, 0x5c, 0xc8, 0x06, 0x93, 0xb2, 0x68, 0xe9, 0x44, 0xea, 0x9f, 0x37, + 0x99, 0xdd, 0x2c, 0x24, 0x36, 0xdb, 0xc4, 0xb8, 0x56, 0xd0, 0x85, 0x3e, 0xc8, 0x5f, 0x1e, 0x8a, + 0x5c, 0xa0, 0xf1, 0x41, 0xff, 0xa4, 0x8b, 0x55, 0x5a, 0x68, 0x3a, 0x00, 0x5c, 0x56, 0xf7, 0xc3, + 0x89, 0x8a, 0xa5, 0x93, 0x92, 0xa1, 0x73, 0x56, 0xa3, 0xc5, 0x98, 0xf3, 0x7a, 0x51, 0x1f, 0x19, + 0x75, 0x5f, 0x77, 0x53, 0xd7, 0x06, 0x20, 0xa9, 0x7b, 0x15, 0x26, 0xdc, 0x6c, 0x10, 0xe4, 0x0d, + 0x8a, 0x6c, 0x47, 0x74, 0x74, 0x0c, 0xdd, 0x75, 0x11, 0xe6, 0x6b, 0x35, 0x17, 0xe4, 0x35, 0x86, + 0x19, 0xf9, 0x2f, 0x64, 0xde, 0x3d, 0x00, 0x0f, 0x07, 0x80, 0x93, 0xfc, 0x9d, 0x85, 0xb1, 0xba, + 0xa5, 0x93, 0x9a, 0x9b, 0x79, 0xfb, 0x7b, 0x33, 0xef, 0xb2, 0xb3, 0xee, 0x4d, 0x33, 0xa9, 0x31, + 0x3a, 0x0e, 0xaf, 0x4b, 0x0a, 0x8b, 0xf8, 0xe6, 0xc8, 0x28, 0x3c, 0x0c, 0x21, 0xf7, 0x5e, 0xd2, + 0x31, 0xc3, 0x1c, 0xdc, 0x54, 0x31, 0xc1, 0xbf, 0x9c, 0xc3, 0x0c, 0xab, 0xa7, 0x24, 0x31, 0xbd, + 0x2e, 0x25, 0x31, 0x08, 0x46, 0xb9, 0x26, 0xe0, 0x9a, 0xfc, 0x59, 0xfd, 0x0a, 0x40, 0x85, 0x6b, + 0x5d, 0xab, 0x63, 0x9b, 0x8d, 0x0c, 0xea, 0xf9, 0x5e, 0xa8, 0x85, 0xd9, 0x67, 0xad, 0x0c, 0xf2, + 0x80, 0xbb, 0x4c, 0x28, 0xc5, 0x55, 0x72, 0xf7, 0xe9, 0xc3, 0xec, 0xa4, 0x61, 0xd6, 0x0c, 0x93, + 0x94, 0x3e, 0xa6, 0x96, 0xe9, 0xdd, 0xd2, 0x87, 0x30, 0x13, 0x08, 0xae, 0x1d, 0x6d, 0xcf, 0xa6, + 0x42, 0xfb, 0x10, 0x9b, 0x3f, 0x06, 0x93, 0xf2, 0x24, 0x0e, 0x3f, 0xff, 0xea, 0xa3, 0x31, 0x98, + 0x74, 0x04, 0x7d, 0x5d, 0xe3, 0x68, 0x97, 0x74, 0x21, 0xb9, 0xd5, 0xca, 0xc4, 0xb8, 0xd8, 0xb9, + 0xed, 0x56, 0x66, 0xcc, 0xd0, 0xdb, 0xf5, 0x63, 0x01, 0x4e, 0x54, 0x6c, 0x82, 0x99, 0x65, 0x73, + 0x3e, 0x06, 0xd2, 0x28, 0x05, 0xd1, 0x55, 0x98, 0x70, 0x80, 0x96, 0x56, 0x31, 0x5d, 0x4d, 0xed, + 0xe2, 0x3b, 0x3c, 0xfd, 0xac, 0x95, 0x39, 0x59, 0x35, 0xd8, 0xea, 0x5a, 0x39, 0x57, 0xb1, 0xea, + 0x5a, 0xc5, 0xaa, 0x13, 0x56, 0x5e, 0x61, 0x9d, 0x87, 0x9a, 0x51, 0xa6, 0x5a, 0xb9, 0xc9, 0x08, + 0xcd, 0x2d, 0x91, 0x5b, 0x05, 0xe7, 0xa1, 0x18, 0x77, 0xcc, 0x2c, 0x61, 0xba, 0x8a, 0x3e, 0x82, + 0xfb, 0x0c, 0x93, 0x32, 0x6c, 0x32, 0x03, 0x33, 0x52, 0x6a, 0x10, 0xbb, 0x6e, 0x50, 0xea, 0x64, + 0x7b, 0x2c, 0xa8, 0x79, 0xe5, 0x2b, 0x15, 0x42, 0xe9, 0xa2, 0x65, 0xae, 0x18, 0x55, 0xef, 0xa1, + 0x79, 0xc1, 0x63, 0x68, 0xb9, 0x6d, 0x47, 0x74, 0xaf, 0x4b, 0xd1, 0x78, 0x34, 0x39, 0x7e, 0x29, + 0x1a, 0x1f, 0x4f, 0xc6, 0xd4, 0xdb, 0x00, 0x4e, 0x7b, 0x88, 0x96, 0xdc, 0x5d, 0x74, 0xea, 0x9c, + 0xc3, 0x9d, 0xd3, 0x39, 0x01, 0x77, 0xae, 0xf6, 0x6b, 0x12, 0x7e, 0xca, 0x0b, 0x71, 0xb7, 0x73, + 0x16, 0xe3, 0x15, 0xb9, 0x86, 0x0e, 0xc9, 0x24, 0x10, 0x89, 0x16, 0xdf, 0x6e, 0x65, 0xf8, 0xbb, + 0x08, 0xb3, 0x6c, 0xa7, 0x1f, 0x78, 0x30, 0x50, 0x37, 0xda, 0xfe, 0xaa, 0x04, 0x76, 0x5c, 0x95, + 0x1e, 0x00, 0x88, 0xbc, 0xd6, 0xe5, 0x16, 0xdf, 0x86, 0xb0, 0xbd, 0x45, 0xb7, 0x1c, 0x85, 0xd9, + 0xa3, 0x87, 0xe4, 0x84, 0xbb, 0xc9, 0x11, 0x16, 0x27, 0x0c, 0xf7, 0x73, 0xb0, 0xcb, 0x86, 0x69, + 0x12, 0x7d, 0x00, 0x21, 0x3b, 0x2f, 0xd3, 0x9f, 0x02, 0x39, 0xbd, 0xf9, 0x7c, 0x48, 0x5a, 0x66, + 0x61, 0x5c, 0x9e, 0x1a, 0x41, 0x4a, 0xb4, 0x30, 0xb9, 0xd5, 0xca, 0x4c, 0x88, 0x63, 0x43, 0x8b, + 0x13, 0xe2, 0xc4, 0x8c, 0x70, 0xc3, 0x7b, 0x65, 0x74, 0x96, 0xb1, 0x8d, 0xeb, 0xee, 0x5e, 0xd5, + 0x22, 0xfc, 0xbf, 0xef, 0xab, 0x44, 0xf7, 0x3a, 0x8c, 0x35, 0xf8, 0x17, 0x99, 0x0f, 0xa9, 0xde, + 0x80, 0x09, 0x0d, 0x5f, 0x03, 0x11, 0x2a, 0x4e, 0x22, 0x28, 0x3d, 0xdd, 0x5d, 0x9c, 0x66, 0x97, + 0xe2, 0x3c, 0xdc, 0x23, 0xcf, 0x77, 0x29, 0x6c, 0x5d, 0xdd, 0x2d, 0x15, 0xf2, 0x23, 0x6e, 0xa6, + 0x3f, 0x02, 0x59, 0x60, 0xfb, 0xa1, 0x95, 0x74, 0x5c, 0x80, 0xa8, 0x3d, 0xe4, 0x4a, 0xbc, 0x64, + 0xf8, 0x5c, 0x32, 0xed, 0xea, 0xe4, 0x5d, 0x95, 0xd1, 0x45, 0xf3, 0x81, 0x9b, 0x5b, 0x85, 0x35, + 0xa3, 0xa6, 0x4b, 0x07, 0x2e, 0xbb, 0x07, 0x65, 0x55, 0xe1, 0x25, 0x93, 0xf3, 0x2a, 0xea, 0x04, + 0x2f, 0x7e, 0x7d, 0xa8, 0x1f, 0x7b, 0x4e, 0xea, 0x11, 0x8c, 0x52, 0x5c, 0x63, 0xbc, 0x1a, 0x27, + 0x8a, 0xfc, 0xd9, 0xf1, 0x69, 0x98, 0x06, 0x2b, 0x61, 0xbb, 0x4a, 0x53, 0x51, 0xde, 0x5d, 0xe3, + 0xce, 0x87, 0xbc, 0x5d, 0xa5, 0xea, 0x15, 0x79, 0xeb, 0xf0, 0x83, 0xdd, 0xf9, 0xad, 0x63, 0xe1, + 0xf7, 0xdd, 0x70, 0x9c, 0x5b, 0x44, 0x5f, 0x02, 0x38, 0xe5, 0xbd, 0x59, 0xa0, 0x3e, 0x43, 0x76, + 0xd0, 0x15, 0x2a, 0x7d, 0x2c, 0x94, 0xac, 0xc0, 0xa9, 0x1e, 0xbf, 0xfd, 0xeb, 0x5f, 0x5f, 0x8c, + 0xcd, 0xa2, 0x23, 0x5a, 0xcf, 0x55, 0xd1, 0x0d, 0xb4, 0xb6, 0x2e, 0x01, 0x6e, 0xa0, 0x6f, 0x01, + 0xdc, 0xd3, 0x75, 0x31, 0x40, 0x27, 0x86, 0xb8, 0xf3, 0x5f, 0x6e, 0xd2, 0xb9, 0xb0, 0xe2, 0x12, + 0xe0, 0x69, 0x0e, 0x30, 0x87, 0x8e, 0x87, 0x01, 0xa8, 0xad, 0x4a, 0x50, 0xf7, 0x3c, 0x40, 0xe5, + 0x18, 0x3e, 0x14, 0xa8, 0xff, 0xbe, 0x30, 0x14, 0x68, 0xd7, 0x74, 0xaf, 0x2e, 0x70, 0xa0, 0xc7, + 0x51, 0xb6, 0x1f, 0x50, 0x9d, 0x68, 0xeb, 0xb2, 0x32, 0x6e, 0x68, 0x9d, 0xc9, 0xfe, 0x3b, 0x00, + 0x93, 0xdd, 0xe3, 0x2e, 0x0a, 0x72, 0x1c, 0x30, 0xb4, 0xa7, 0xb5, 0xd0, 0xf2, 0x61, 0x90, 0xf6, + 0x50, 0x4a, 0x39, 0xa8, 0x1f, 0x00, 0x4c, 0x76, 0xcf, 0x9f, 0x81, 0x48, 0x03, 0x66, 0xe3, 0x40, + 0xa4, 0x41, 0x83, 0xad, 0xfa, 0x06, 0x47, 0x7a, 0x06, 0xbd, 0x12, 0x0a, 0xa9, 0x8d, 0x6f, 0x6a, + 0xeb, 0x9d, 0xe9, 0x74, 0x03, 0xfd, 0x0c, 0x20, 0xea, 0x9d, 0x30, 0xd1, 0xc9, 0x00, 0x18, 0x81, + 0x93, 0x72, 0x7a, 0xfe, 0x39, 0x34, 0x24, 0xf4, 0x37, 0x39, 0xf4, 0xd7, 0xd0, 0x99, 0x70, 0x24, + 0x3b, 0x86, 0xfc, 0xe0, 0x9b, 0x30, 0xca, 0xd3, 0x56, 0x0d, 0xcc, 0xc3, 0x4e, 0xae, 0xbe, 0x38, + 0x50, 0x46, 0x22, 0x9a, 0xe3, 0x88, 0x54, 0x34, 0x33, 0x2c, 0x41, 0x91, 0x0d, 0xc7, 0x79, 0x5f, + 0x47, 0x83, 0xec, 0xba, 0x85, 0x39, 0x7d, 0x64, 0xb0, 0x90, 0xf4, 0xae, 0x70, 0xef, 0x29, 0xb4, + 0xaf, 0xbf, 0x77, 0xf4, 0x19, 0x80, 0x93, 0x9e, 0x91, 0x02, 0x1d, 0x0d, 0xb0, 0xda, 0x3b, 0xda, + 0xa4, 0xb3, 0x61, 0x44, 0x25, 0x8c, 0x59, 0x0e, 0x63, 0x06, 0x29, 0xfd, 0x61, 0x50, 0xad, 0xc1, + 0x95, 0xd0, 0x06, 0x8c, 0x89, 0x59, 0x00, 0x05, 0x6d, 0xcf, 0x37, 0x72, 0xa4, 0x5f, 0x1a, 0x22, + 0x15, 0xda, 0xbd, 0x70, 0xfa, 0x08, 0x40, 0xd4, 0xdb, 0xba, 0x03, 0x33, 0x37, 0x70, 0x26, 0x09, + 0xcc, 0xdc, 0xe0, 0xb9, 0x20, 0xcc, 0xa1, 0xa3, 0x9a, 0x6c, 0x9e, 0xda, 0x7a, 0x57, 0xdb, 0xdd, + 0x40, 0x77, 0x00, 0x9c, 0xf2, 0xb6, 0xc4, 0xc0, 0xde, 0xd5, 0xa7, 0xc9, 0x07, 0xf6, 0xae, 0x7e, + 0x3d, 0x56, 0x3d, 0xc9, 0x81, 0x66, 0xd1, 0xdc, 0x80, 0x23, 0x56, 0x76, 0x14, 0x5d, 0x70, 0x85, + 0xa5, 0xcd, 0x3f, 0x95, 0xc8, 0xfd, 0x2d, 0x25, 0xb2, 0xb9, 0xa5, 0x80, 0xc7, 0x5b, 0x0a, 0xf8, + 0x63, 0x4b, 0x01, 0x9f, 0x3f, 0x51, 0x22, 0x8f, 0x9f, 0x28, 0x91, 0xdf, 0x9e, 0x28, 0x91, 0xf7, + 0x67, 0x3d, 0x37, 0xb0, 0x45, 0x8b, 0xd6, 0xdf, 0x73, 0xad, 0xea, 0xda, 0x2d, 0x61, 0x9d, 0xff, + 0x83, 0x5a, 0x8e, 0xf1, 0xbf, 0x32, 0x4f, 0xfd, 0x13, 0x00, 0x00, 0xff, 0xff, 0x63, 0x9e, 0xb7, + 0x27, 0xa8, 0x15, 0x00, 0x00, } func (this *QueryContractInfoResponse) Equal(that interface{}) bool { diff --git a/x/wasm/types/query.pb.gw.go b/x/wasm/types/query.pb.gw.go index 8994570..a07546a 100644 --- a/x/wasm/types/query.pb.gw.go +++ b/x/wasm/types/query.pb.gw.go @@ -52,6 +52,7 @@ func request_Query_ContractInfo_0(ctx context.Context, marshaler runtime.Marshal } protoReq.Address, err = runtime.String(val) + if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } @@ -77,6 +78,7 @@ func local_request_Query_ContractInfo_0(ctx context.Context, marshaler runtime.M } protoReq.Address, err = runtime.String(val) + if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } @@ -104,6 +106,7 @@ func request_Query_ContractHistory_0(ctx context.Context, marshaler runtime.Mars } protoReq.Address, err = runtime.String(val) + if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } @@ -136,6 +139,7 @@ func local_request_Query_ContractHistory_0(ctx context.Context, marshaler runtim } protoReq.Address, err = runtime.String(val) + if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } @@ -170,6 +174,7 @@ func request_Query_ContractsByCode_0(ctx context.Context, marshaler runtime.Mars } protoReq.CodeId, err = runtime.Uint64(val) + if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "code_id", err) } @@ -202,6 +207,7 @@ func local_request_Query_ContractsByCode_0(ctx context.Context, marshaler runtim } protoReq.CodeId, err = runtime.Uint64(val) + if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "code_id", err) } @@ -236,6 +242,7 @@ func request_Query_AllContractState_0(ctx context.Context, marshaler runtime.Mar } protoReq.Address, err = runtime.String(val) + if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } @@ -268,6 +275,7 @@ func local_request_Query_AllContractState_0(ctx context.Context, marshaler runti } protoReq.Address, err = runtime.String(val) + if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } @@ -300,6 +308,7 @@ func request_Query_RawContractState_0(ctx context.Context, marshaler runtime.Mar } protoReq.Address, err = runtime.String(val) + if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } @@ -310,6 +319,7 @@ func request_Query_RawContractState_0(ctx context.Context, marshaler runtime.Mar } protoReq.QueryData, err = runtime.Bytes(val) + if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "query_data", err) } @@ -335,6 +345,7 @@ func local_request_Query_RawContractState_0(ctx context.Context, marshaler runti } protoReq.Address, err = runtime.String(val) + if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } @@ -345,6 +356,7 @@ func local_request_Query_RawContractState_0(ctx context.Context, marshaler runti } protoReq.QueryData, err = runtime.Bytes(val) + if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "query_data", err) } @@ -370,6 +382,7 @@ func request_Query_SmartContractState_0(ctx context.Context, marshaler runtime.M } protoReq.Address, err = runtime.String(val) + if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } @@ -380,6 +393,7 @@ func request_Query_SmartContractState_0(ctx context.Context, marshaler runtime.M } protoReq.QueryData, err = runtime.Bytes(val) + if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "query_data", err) } @@ -405,6 +419,7 @@ func local_request_Query_SmartContractState_0(ctx context.Context, marshaler run } protoReq.Address, err = runtime.String(val) + if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } @@ -415,6 +430,7 @@ func local_request_Query_SmartContractState_0(ctx context.Context, marshaler run } protoReq.QueryData, err = runtime.Bytes(val) + if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "query_data", err) } @@ -440,6 +456,7 @@ func request_Query_Code_0(ctx context.Context, marshaler runtime.Marshaler, clie } protoReq.CodeId, err = runtime.Uint64(val) + if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "code_id", err) } @@ -465,6 +482,7 @@ func local_request_Query_Code_0(ctx context.Context, marshaler runtime.Marshaler } protoReq.CodeId, err = runtime.Uint64(val) + if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "code_id", err) } @@ -572,6 +590,7 @@ func request_Query_ContractsByCreator_0(ctx context.Context, marshaler runtime.M } protoReq.CreatorAddress, err = runtime.String(val) + if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "creator_address", err) } @@ -604,6 +623,7 @@ func local_request_Query_ContractsByCreator_0(ctx context.Context, marshaler run } protoReq.CreatorAddress, err = runtime.String(val) + if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "creator_address", err) } diff --git a/x/wasm/types/tx.go b/x/wasm/types/tx.go index 057f77f..ecd68bd 100644 --- a/x/wasm/types/tx.go +++ b/x/wasm/types/tx.go @@ -12,8 +12,6 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) -const maxCodeIDCount = 50 - // RawContractMessage defines a json message that is sent or returned by a wasm contract. // This type can hold any type of bytes. Until validateBasic is called there should not be // any assumptions made that the data is valid syntax or semantic. @@ -358,14 +356,15 @@ func (msg MsgPinCodes) ValidateBasic() error { return validateCodeIDs(msg.CodeIDs) } -// validateCodeIDs ensures the list is not empty, has no duplicates -// and does not exceed the max number of code IDs +const maxCodeIDTotal = 50 + +// ensure not empty, not duplicates and not exceeding max number func validateCodeIDs(codeIDs []uint64) error { switch n := len(codeIDs); { case n == 0: return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "empty code ids") - case n > maxCodeIDCount: - return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "total number of code ids is greater than %d", maxCodeIDCount) + case n > maxCodeIDTotal: + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "total number of code ids is greater than %d", maxCodeIDTotal) } if hasDuplicates(codeIDs) { return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "duplicate code ids") @@ -469,7 +468,11 @@ func (msg MsgAddCodeUploadParamsAddresses) ValidateBasic() error { return errorsmod.Wrap(err, "authority") } - return validateBech32Addresses(msg.Addresses) + if len(msg.Addresses) == 0 { + return errorsmod.Wrap(ErrEmpty, "addresses") + } + + return checkDuplicatedAddresses(msg.Addresses) } func (msg MsgRemoveCodeUploadParamsAddresses) Route() string { @@ -485,7 +488,26 @@ func (msg MsgRemoveCodeUploadParamsAddresses) ValidateBasic() error { return errorsmod.Wrap(err, "authority") } - return validateBech32Addresses(msg.Addresses) + if len(msg.Addresses) == 0 { + return errorsmod.Wrap(ErrEmpty, "addresses") + } + + return checkDuplicatedAddresses(msg.Addresses) +} + +func checkDuplicatedAddresses(addresses []string) error { + index := map[string]struct{}{} + for _, addr := range addresses { + addr = strings.ToUpper(addr) + if _, err := sdk.AccAddressFromBech32(addr); err != nil { + return errorsmod.Wrap(err, "addresses") + } + if _, found := index[addr]; found { + return errorsmod.Wrap(ErrInvalid, "duplicate addresses") + } + index[addr] = struct{}{} + } + return nil } func (msg MsgStoreAndMigrateContract) Route() string { diff --git a/x/wasm/types/tx.pb.go b/x/wasm/types/tx.pb.go index f0c58e7..32d0b3d 100644 --- a/x/wasm/types/tx.pb.go +++ b/x/wasm/types/tx.pb.go @@ -233,7 +233,7 @@ func (m *MsgInstantiateContractResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgInstantiateContractResponse proto.InternalMessageInfo // MsgInstantiateContract2 create a new smart contract instance for the given -// code id with a predictable address. +// 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"` diff --git a/x/wasm/types/tx_test.go b/x/wasm/types/tx_test.go index 6f237b1..1045b95 100644 --- a/x/wasm/types/tx_test.go +++ b/x/wasm/types/tx_test.go @@ -763,13 +763,6 @@ func TestMsgAddCodeUploadParamsAddressesValidation(t *testing.T) { badAddress := "abcd" // proper address size goodAddress := sdk.AccAddress(make([]byte, 20)).String() - goodAddress2 := strings.ToUpper(goodAddress) - require.NotEqual(t, goodAddress, goodAddress2) // sanity check - - tooManyAddresses := make([]string, MaxAddressCount+1) - for i := range tooManyAddresses { - tooManyAddresses[i] = sdk.AccAddress(bytes.Repeat([]byte{byte(i)}, 20)).String() - } specs := map[string]struct { src MsgAddCodeUploadParamsAddresses @@ -781,12 +774,6 @@ func TestMsgAddCodeUploadParamsAddressesValidation(t *testing.T) { Addresses: []string{goodAddress}, }, }, - "all good, uppercase": { - src: MsgAddCodeUploadParamsAddresses{ - Authority: goodAddress, - Addresses: []string{goodAddress2}, - }, - }, "bad authority": { src: MsgAddCodeUploadParamsAddresses{ Authority: badAddress, @@ -820,20 +807,6 @@ func TestMsgAddCodeUploadParamsAddressesValidation(t *testing.T) { }, expErr: true, }, - "duplicate addresses, different casing": { - src: MsgAddCodeUploadParamsAddresses{ - Authority: goodAddress, - Addresses: []string{goodAddress, goodAddress2}, - }, - expErr: true, - }, - "too many addresses": { - src: MsgAddCodeUploadParamsAddresses{ - Authority: goodAddress, - Addresses: tooManyAddresses, - }, - expErr: true, - }, } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { @@ -850,13 +823,6 @@ func TestMsgAddCodeUploadParamsAddressesValidation(t *testing.T) { func TestMsgRemoveCodeUploadParamsAddressesValidation(t *testing.T) { // proper address size goodAddress := sdk.AccAddress(make([]byte, 20)).String() - goodAddress2 := strings.ToUpper(goodAddress) - require.NotEqual(t, goodAddress, goodAddress2) // sanity check - - tooManyAddresses := make([]string, MaxAddressCount+1) - for i := range tooManyAddresses { - tooManyAddresses[i] = sdk.AccAddress(bytes.Repeat([]byte{byte(i)}, 20)).String() - } specs := map[string]struct { src MsgRemoveCodeUploadParamsAddresses @@ -868,12 +834,6 @@ func TestMsgRemoveCodeUploadParamsAddressesValidation(t *testing.T) { Addresses: []string{goodAddress}, }, }, - "all good, uppercase": { - src: MsgRemoveCodeUploadParamsAddresses{ - Authority: goodAddress, - Addresses: []string{goodAddress2}, - }, - }, "bad authority": { src: MsgRemoveCodeUploadParamsAddresses{ Authority: badAddress, @@ -907,20 +867,6 @@ func TestMsgRemoveCodeUploadParamsAddressesValidation(t *testing.T) { }, expErr: true, }, - "duplicate addresses, different casing": { - src: MsgRemoveCodeUploadParamsAddresses{ - Authority: goodAddress, - Addresses: []string{goodAddress, goodAddress2}, - }, - expErr: true, - }, - "too many addresses": { - src: MsgRemoveCodeUploadParamsAddresses{ - Authority: goodAddress, - Addresses: tooManyAddresses, - }, - expErr: true, - }, } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { diff --git a/x/wasm/types/validation.go b/x/wasm/types/validation.go index f10de3d..bd67e3b 100644 --- a/x/wasm/types/validation.go +++ b/x/wasm/types/validation.go @@ -9,9 +9,6 @@ import ( "github.com/distribution/reference" errorsmod "cosmossdk.io/errors" - - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) // MaxSaltSize is the longest salt that can be used when instantiating a contract @@ -26,9 +23,6 @@ var ( // MaxProposalWasmSize is the largest a gov proposal compiled contract code can be when storing code on chain MaxProposalWasmSize = 3 * 1024 * 1024 // extension point for chains to customize via compile flag. - - // MaxAddressCount is the maximum number of addresses allowed within a message - MaxAddressCount = 50 ) func validateWasmCode(s []byte, maxSize int) error { @@ -98,29 +92,3 @@ func ValidateVerificationInfo(source, builder string, codeHash []byte) error { } return nil } - -// validateBech32Addresses ensures the list is not empty, has no duplicates -// and does not exceed the max number of addresses -func validateBech32Addresses(addresses []string) error { - switch n := len(addresses); { - case n == 0: - return errorsmod.Wrap(ErrEmpty, "addresses") - case n > MaxAddressCount: - return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "total number of addresses is greater than %d", MaxAddressCount) - } - - index := map[string]struct{}{} - for _, addr := range addresses { - if _, err := sdk.AccAddressFromBech32(addr); err != nil { - return errorsmod.Wrapf(err, "address: %s", addr) - } - // Bech32 addresses are case-insensitive, i.e. the same address can have multiple representations, - // so we normalize here to avoid duplicates. - addr = strings.ToUpper(addr) - if _, found := index[addr]; found { - return errorsmod.Wrap(ErrDuplicate, "duplicate addresses") - } - index[addr] = struct{}{} - } - return nil -} diff --git a/x/wasm/types/wasmer_engine.go b/x/wasm/types/wasmer_engine.go index ce1a56f..f3829e9 100644 --- a/x/wasm/types/wasmer_engine.go +++ b/x/wasm/types/wasmer_engine.go @@ -7,11 +7,9 @@ import ( storetypes "cosmossdk.io/store/types" ) -// DefaultMaxQueryStackSize maximum size of the stack of recursive queries a contract can make +// DefaultMaxQueryStackSize maximum size of the stack of contract instances doing queries const DefaultMaxQueryStackSize uint32 = 10 -const DefaultMaxCallDepth uint32 = 500 - // WasmEngine defines the WASM contract runtime engine. type WasmEngine interface { // StoreCode will compile the Wasm code, and store the resulting compiled module @@ -235,36 +233,6 @@ type WasmEngine interface { deserCost wasmvmtypes.UFraction, ) (*wasmvmtypes.IBCBasicResult, uint64, error) - // IBCSourceCallback is available on IBC-callbacks-enabled contracts and is called when an - // IBC-callbacks-enabled IBC message previously sent by this contract is either acknowledged or - // times out. - IBCSourceCallback( - checksum wasmvm.Checksum, - env wasmvmtypes.Env, - msg wasmvmtypes.IBCSourceCallbackMsg, - store wasmvm.KVStore, - goapi wasmvm.GoAPI, - querier wasmvm.Querier, - gasMeter wasmvm.GasMeter, - gasLimit uint64, - deserCost wasmvmtypes.UFraction, - ) (*wasmvmtypes.IBCBasicResult, uint64, error) - - // IBCSourceCallback is available on IBC-callbacks-enabled contracts and is called when an - // IBC-callbacks-enabled IBC message previously sent by this contract is either acknowledged or - // times out. - IBCDestinationCallback( - checksum wasmvm.Checksum, - env wasmvmtypes.Env, - msg wasmvmtypes.IBCDestinationCallbackMsg, - store wasmvm.KVStore, - goapi wasmvm.GoAPI, - querier wasmvm.Querier, - gasMeter wasmvm.GasMeter, - gasLimit uint64, - deserCost wasmvmtypes.UFraction, - ) (*wasmvmtypes.IBCBasicResult, uint64, error) - // Pin pins a code to an in-memory cache, such that is // always loaded quickly when executed. // Pin is idempotent. @@ -278,9 +246,6 @@ type WasmEngine interface { // GetMetrics some internal metrics for monitoring purposes. GetMetrics() (*wasmvmtypes.Metrics, error) - - // GetPinnedMetrics some internal metrics about pinned contracts for monitoring purposes. - GetPinnedMetrics() (*wasmvmtypes.PinnedMetrics, error) } var _ wasmvm.KVStore = &StoreAdapter{}