From fd7f6bc914ca867793f7262717006d87f377826a Mon Sep 17 00:00:00 2001 From: Kartik Bhat Date: Fri, 19 Apr 2024 09:43:05 -0400 Subject: [PATCH] Cosmos Gas Multiplier Params (#1565) * Cosmos Gas Multiplier Params * Update ante dep decorators to remove unnecessary dep * bump sei-cosmos * Bump sei-wasmd * Update sei-cosmos to v0.2.83 --------- Co-authored-by: Uday Patil --- app/ante.go | 7 +- app/antedecorators/depdecorators/gas.go | 24 --- app/antedecorators/gas.go | 74 +------- app/antedecorators/gas_test.go | 225 +++--------------------- go.mod | 4 +- go.sum | 8 +- 6 files changed, 42 insertions(+), 300 deletions(-) delete mode 100644 app/antedecorators/depdecorators/gas.go diff --git a/app/ante.go b/app/ante.go index 84df9f88f..c0b5fc99b 100644 --- a/app/ante.go +++ b/app/ante.go @@ -60,6 +60,9 @@ func NewAnteHandlerAndDepGenerator(options HandlerOptions) (sdk.AnteHandler, sdk if options.AccessControlKeeper == nil { return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "accesscontrol keeper is required for ante builder") } + if options.ParamsKeeper == nil { + return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "params keeper is required for ante builder") + } if options.TracingInfo == nil { return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "tracing info is required for ante builder") } @@ -75,9 +78,9 @@ func NewAnteHandlerAndDepGenerator(options HandlerOptions) (sdk.AnteHandler, sdk sequentialVerifyDecorator := ante.NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler) anteDecorators := []sdk.AnteFullDecorator{ - sdk.CustomDepWrappedAnteDecorator(ante.NewSetUpContextDecorator(antedecorators.GetGasMeterSetter(*options.AccessControlKeeper)), depdecorators.GasMeterSetterDecorator{}), // outermost AnteDecorator. SetUpContext must be called first + sdk.DefaultWrappedAnteDecorator(ante.NewSetUpContextDecorator(antedecorators.GetGasMeterSetter(options.ParamsKeeper.(paramskeeper.Keeper)))), // outermost AnteDecorator. SetUpContext must be called first antedecorators.NewGaslessDecorator([]sdk.AnteFullDecorator{ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.ParamsKeeper.(paramskeeper.Keeper), options.TxFeeChecker)}, *options.OracleKeeper), - sdk.DefaultWrappedAnteDecorator(wasmkeeper.NewLimitSimulationGasDecorator(options.WasmConfig.SimulationGasLimit)), // after setup context to enforce limits early + sdk.DefaultWrappedAnteDecorator(wasmkeeper.NewLimitSimulationGasDecorator(options.WasmConfig.SimulationGasLimit, antedecorators.GetGasMeterSetter(options.ParamsKeeper.(paramskeeper.Keeper)))), // after setup context to enforce limits early sdk.DefaultWrappedAnteDecorator(ante.NewRejectExtensionOptionsDecorator()), oracle.NewSpammingPreventionDecorator(*options.OracleKeeper), oracle.NewOracleVoteAloneDecorator(), diff --git a/app/antedecorators/depdecorators/gas.go b/app/antedecorators/depdecorators/gas.go deleted file mode 100644 index 2bfd7e74b..000000000 --- a/app/antedecorators/depdecorators/gas.go +++ /dev/null @@ -1,24 +0,0 @@ -package depdecorators - -import ( - wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" - sdk "github.com/cosmos/cosmos-sdk/types" - sdkacltypes "github.com/cosmos/cosmos-sdk/types/accesscontrol" -) - -type GasMeterSetterDecorator struct { -} - -func (d GasMeterSetterDecorator) AnteDeps(txDeps []sdkacltypes.AccessOperation, tx sdk.Tx, txIndex int, next sdk.AnteDepGenerator) (newTxDeps []sdkacltypes.AccessOperation, err error) { - for _, msg := range tx.GetMsgs() { - if _, ok := msg.(*wasmtypes.MsgExecuteContract); ok { - // if we have a wasm execute message, we need to declare the dependency to read accesscontrol for giving gas discount - txDeps = append(txDeps, sdkacltypes.AccessOperation{ - AccessType: sdkacltypes.AccessType_READ, - ResourceType: sdkacltypes.ResourceType_KV_ACCESSCONTROL_WASM_DEPENDENCY_MAPPING, - IdentifierTemplate: "*", - }) - } - } - return next(txDeps, tx, txIndex) -} diff --git a/app/antedecorators/gas.go b/app/antedecorators/gas.go index 63549d9f1..944449c1a 100644 --- a/app/antedecorators/gas.go +++ b/app/antedecorators/gas.go @@ -1,82 +1,24 @@ package antedecorators import ( - wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" - sdkacltypes "github.com/cosmos/cosmos-sdk/types/accesscontrol" - aclkeeper "github.com/cosmos/cosmos-sdk/x/accesscontrol/keeper" - acltypes "github.com/cosmos/cosmos-sdk/x/accesscontrol/types" + paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper" ) -const ( - GasMultiplierNumerator uint64 = 1 - DefaultGasMultiplierDenominator uint64 = 1 - WasmCorrectDependencyDiscountDenominator uint64 = 2 -) - -func GetGasMeterSetter(aclkeeper aclkeeper.Keeper) func(bool, sdk.Context, uint64, sdk.Tx) sdk.Context { +func GetGasMeterSetter(pk paramskeeper.Keeper) func(bool, sdk.Context, uint64, sdk.Tx) sdk.Context { return func(simulate bool, ctx sdk.Context, gasLimit uint64, tx sdk.Tx) sdk.Context { - if simulate || ctx.BlockHeight() == 0 { + if ctx.BlockHeight() == 0 { return ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) } - denominator := uint64(1) - updatedGasDenominator := false - for _, msg := range tx.GetMsgs() { - candidateDenominator := getMessageMultiplierDenominator(ctx, msg, aclkeeper) - if !updatedGasDenominator || candidateDenominator < denominator { - updatedGasDenominator = true - denominator = candidateDenominator - } - } - return ctx.WithGasMeter(types.NewMultiplierGasMeter(gasLimit, DefaultGasMultiplierDenominator, denominator)) - } -} + cosmosGasParams := pk.GetCosmosGasParams(ctx) -func getMessageMultiplierDenominator(ctx sdk.Context, msg sdk.Msg, aclKeeper aclkeeper.Keeper) uint64 { - // TODO: reason through whether it's reasonable to require non-* identifier for all operations - // under the context of inter-contract changes - // only give gas discount if none of the dependency (except COMMIT) has id "*" - if wasmExecuteMsg, ok := msg.(*wasmtypes.MsgExecuteContract); ok { - msgInfo, err := acltypes.NewExecuteMessageInfo(wasmExecuteMsg.Msg) - if err != nil { - return DefaultGasMultiplierDenominator - } - if messageContainsNoWildcardDependencies( - ctx, - aclKeeper, - wasmExecuteMsg.Contract, - msgInfo, - wasmExecuteMsg.Sender, - ) { - return WasmCorrectDependencyDiscountDenominator + // In simulation, still use multiplier but with infinite gas limit + if simulate { + return ctx.WithGasMeter(types.NewInfiniteMultiplierGasMeter(cosmosGasParams.CosmosGasMultiplierNumerator, cosmosGasParams.CosmosGasMultiplierDenominator)) } - } - return DefaultGasMultiplierDenominator -} -// TODO: add tracing to measure latency -func messageContainsNoWildcardDependencies( - ctx sdk.Context, - aclKeeper aclkeeper.Keeper, - contractAddrStr string, - msgInfo *acltypes.WasmMessageInfo, - sender string, -) bool { - addr, err := sdk.AccAddressFromBech32(contractAddrStr) - if err != nil { - return false - } - accessOps, err := aclKeeper.GetWasmDependencyAccessOps(ctx, addr, sender, msgInfo, make(aclkeeper.ContractReferenceLookupMap)) - if err != nil { - return false + return ctx.WithGasMeter(types.NewMultiplierGasMeter(gasLimit, cosmosGasParams.CosmosGasMultiplierNumerator, cosmosGasParams.CosmosGasMultiplierDenominator)) } - for _, op := range accessOps { - if op.AccessType != sdkacltypes.AccessType_COMMIT && op.IdentifierTemplate == "*" { - return false - } - } - - return true } diff --git a/app/antedecorators/gas_test.go b/app/antedecorators/gas_test.go index 6a32e4801..51cb3ada8 100644 --- a/app/antedecorators/gas_test.go +++ b/app/antedecorators/gas_test.go @@ -7,6 +7,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/accesscontrol" acltypes "github.com/cosmos/cosmos-sdk/x/accesscontrol/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" "github.com/sei-protocol/sei-chain/app" "github.com/sei-protocol/sei-chain/app/antedecorators" "github.com/stretchr/testify/require" @@ -17,15 +18,15 @@ func TestMultiplierGasSetter(t *testing.T) { testApp := app.Setup(false) contractAddr, err := sdk.AccAddressFromBech32("sei1y3pxq5dp900czh0mkudhjdqjq5m8cpmmps8yjw") require.NoError(t, err) - otherContractAddr, err := sdk.AccAddressFromBech32("sei14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sh9m79m") - require.NoError(t, err) ctx := testApp.NewContext(false, types.Header{}).WithBlockHeight(2) + testApp.ParamsKeeper.SetCosmosGasParams(ctx, *paramtypes.DefaultCosmosGasParams()) + testApp.ParamsKeeper.SetFeesParams(ctx, paramtypes.DefaultGenesis().GetFeesParams()) testMsg := wasmtypes.MsgExecuteContract{ Contract: "sei1y3pxq5dp900czh0mkudhjdqjq5m8cpmmps8yjw", Msg: []byte("{\"xyz\":{}}"), } testTx := app.NewTestTx([]sdk.Msg{&testMsg}) - // discounted mapping + testApp.AccessControlKeeper.SetWasmDependencyMapping(ctx, accesscontrol.WasmDependencyMapping{ ContractAddress: contractAddr.String(), BaseAccessOps: []*accesscontrol.WasmAccessOperation{ @@ -41,212 +42,32 @@ func TestMultiplierGasSetter(t *testing.T) { }, }, }) - // other contract not discounted - testApp.AccessControlKeeper.SetWasmDependencyMapping(ctx, accesscontrol.WasmDependencyMapping{ - ContractAddress: otherContractAddr.String(), - BaseAccessOps: []*accesscontrol.WasmAccessOperation{ - { - Operation: &accesscontrol.AccessOperation{ - AccessType: accesscontrol.AccessType_READ, - ResourceType: accesscontrol.ResourceType_KV, - IdentifierTemplate: "*", - }, - }, - { - Operation: acltypes.CommitAccessOp(), - }, - }, - }) - gasMeterSetter := antedecorators.GetGasMeterSetter(testApp.AccessControlKeeper) + // Test with 1/2 cosmos gas multiplier + testApp.ParamsKeeper.SetCosmosGasParams(ctx, paramtypes.CosmosGasParams{CosmosGasMultiplierNumerator: 1, CosmosGasMultiplierDenominator: 2}) + gasMeterSetter := antedecorators.GetGasMeterSetter(testApp.ParamsKeeper) ctxWithGasMeter := gasMeterSetter(false, ctx, 1000, testTx) ctxWithGasMeter.GasMeter().ConsumeGas(2, "") require.Equal(t, uint64(1), ctxWithGasMeter.GasMeter().GasConsumed()) - otherTestMsg := wasmtypes.MsgExecuteContract{ - Contract: "sei14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sh9m79m", - Msg: []byte("{\"xyz\":{}}"), - } - testTx2 := app.NewTestTx([]sdk.Msg{&testMsg, &otherTestMsg}) - ctxWithGasMeter = gasMeterSetter(false, ctx, 1000, testTx2) - ctxWithGasMeter.GasMeter().ConsumeGas(2, "") - // should still not give discount because of other contract being non-discounted - require.Equal(t, uint64(2), ctxWithGasMeter.GasMeter().GasConsumed()) - - // not discounted mapping - testApp.AccessControlKeeper.SetWasmDependencyMapping(ctx, accesscontrol.WasmDependencyMapping{ - ContractAddress: contractAddr.String(), - BaseAccessOps: []*accesscontrol.WasmAccessOperation{ - { - Operation: &accesscontrol.AccessOperation{ - AccessType: accesscontrol.AccessType_READ, - ResourceType: accesscontrol.ResourceType_KV, - IdentifierTemplate: "*", - }, - }, - { - Operation: acltypes.CommitAccessOp(), - }, - }, - }) + // Test with 1/4 cosmos gas multiplier + testApp.ParamsKeeper.SetCosmosGasParams(ctx, paramtypes.CosmosGasParams{CosmosGasMultiplierNumerator: 1, CosmosGasMultiplierDenominator: 4}) ctxWithGasMeter = gasMeterSetter(false, ctx, 1000, testTx) - ctxWithGasMeter.GasMeter().ConsumeGas(2, "") - require.Equal(t, uint64(2), ctxWithGasMeter.GasMeter().GasConsumed()) -} + ctxWithGasMeter.GasMeter().ConsumeGas(100, "") + require.Equal(t, uint64(25), ctxWithGasMeter.GasMeter().GasConsumed()) -func TestMultiplierGasSetterWithWasmReference(t *testing.T) { - testApp := app.Setup(false) - contractAddr, err := sdk.AccAddressFromBech32("sei1y3pxq5dp900czh0mkudhjdqjq5m8cpmmps8yjw") - referredContractAddr, err := sdk.AccAddressFromBech32("sei14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sh9m79m") - require.NoError(t, err) - ctx := testApp.NewContext(false, types.Header{}).WithBlockHeight(2) - testMsg := wasmtypes.MsgExecuteContract{ - Contract: "sei1y3pxq5dp900czh0mkudhjdqjq5m8cpmmps8yjw", - Msg: []byte("{\"xyz\":{}}"), - } - testTx := app.NewTestTx([]sdk.Msg{&testMsg}) - // discounted mapping - testApp.AccessControlKeeper.SetWasmDependencyMapping(ctx, accesscontrol.WasmDependencyMapping{ - ContractAddress: contractAddr.String(), - BaseAccessOps: []*accesscontrol.WasmAccessOperation{ - { - Operation: &accesscontrol.AccessOperation{ - AccessType: accesscontrol.AccessType_READ, - ResourceType: accesscontrol.ResourceType_KV, - IdentifierTemplate: "something", - }, - }, - { - Operation: acltypes.CommitAccessOp(), - }, - }, - BaseContractReferences: []*accesscontrol.WasmContractReference{ - { - ContractAddress: referredContractAddr.String(), - MessageType: accesscontrol.WasmMessageSubtype_EXECUTE, - MessageName: "abc", - }, - }, - }) - testApp.AccessControlKeeper.SetWasmDependencyMapping(ctx, accesscontrol.WasmDependencyMapping{ - ContractAddress: referredContractAddr.String(), - BaseAccessOps: []*accesscontrol.WasmAccessOperation{ - { - Operation: acltypes.CommitAccessOp(), - }, - }, - ExecuteAccessOps: []*accesscontrol.WasmAccessOperations{ - { - MessageName: "abc", - WasmOperations: []*accesscontrol.WasmAccessOperation{ - { - Operation: &accesscontrol.AccessOperation{ - AccessType: accesscontrol.AccessType_WRITE, - ResourceType: accesscontrol.ResourceType_KV, - IdentifierTemplate: "something else", - }, - }, - }, - }, - }, - }) - gasMeterSetter := antedecorators.GetGasMeterSetter(testApp.AccessControlKeeper) - ctxWithGasMeter := gasMeterSetter(false, ctx, 1000, testTx) - ctxWithGasMeter.GasMeter().ConsumeGas(2, "") - require.Equal(t, uint64(1), ctxWithGasMeter.GasMeter().GasConsumed()) - // not discounted mapping - testApp.AccessControlKeeper.SetWasmDependencyMapping(ctx, accesscontrol.WasmDependencyMapping{ - ContractAddress: referredContractAddr.String(), - BaseAccessOps: []*accesscontrol.WasmAccessOperation{ - { - Operation: acltypes.CommitAccessOp(), - }, - }, - ExecuteAccessOps: []*accesscontrol.WasmAccessOperations{ - { - MessageName: "abc", - WasmOperations: []*accesscontrol.WasmAccessOperation{ - { - Operation: &accesscontrol.AccessOperation{ - AccessType: accesscontrol.AccessType_WRITE, - ResourceType: accesscontrol.ResourceType_KV, - IdentifierTemplate: "*", - }, - }, - }, - }, - }, - }) - ctxWithGasMeter = gasMeterSetter(false, ctx, 1000, testTx) - ctxWithGasMeter.GasMeter().ConsumeGas(2, "") - require.Equal(t, uint64(2), ctxWithGasMeter.GasMeter().GasConsumed()) -} + // Test over gas limit even with 1/4 gas multiplier + testApp.ParamsKeeper.SetCosmosGasParams(ctx, paramtypes.CosmosGasParams{CosmosGasMultiplierNumerator: 1, CosmosGasMultiplierDenominator: 4}) + ctxWithGasMeter = gasMeterSetter(false, ctx, 20, testTx) + require.Panics(t, func() { ctxWithGasMeter.GasMeter().ConsumeGas(100, "") }) + require.Equal(t, true, ctxWithGasMeter.GasMeter().IsOutOfGas()) -func TestMultiplierGasSetterWithWasmReferenceCycle(t *testing.T) { - testApp := app.Setup(false) - contractAddr, err := sdk.AccAddressFromBech32("sei1y3pxq5dp900czh0mkudhjdqjq5m8cpmmps8yjw") - referredContractAddr, err := sdk.AccAddressFromBech32("sei14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sh9m79m") - require.NoError(t, err) - ctx := testApp.NewContext(false, types.Header{}).WithBlockHeight(2) - testMsg := wasmtypes.MsgExecuteContract{ - Contract: "sei1y3pxq5dp900czh0mkudhjdqjq5m8cpmmps8yjw", - Msg: []byte("{\"xyz\":{}}"), - } - testTx := app.NewTestTx([]sdk.Msg{&testMsg}) + // Simulation mode has infinite gas meter with multiplier + testApp.ParamsKeeper.SetCosmosGasParams(ctx, paramtypes.CosmosGasParams{CosmosGasMultiplierNumerator: 1, CosmosGasMultiplierDenominator: 4}) + // Gas limit is effectively ignored in simulation + ctxWithGasMeter = gasMeterSetter(true, ctx, 20, testTx) + require.NotPanics(t, func() { ctxWithGasMeter.GasMeter().ConsumeGas(100, "") }) + require.Equal(t, uint64(25), ctxWithGasMeter.GasMeter().GasConsumed()) + require.Equal(t, false, ctxWithGasMeter.GasMeter().IsOutOfGas()) - testApp.AccessControlKeeper.SetWasmDependencyMapping(ctx, accesscontrol.WasmDependencyMapping{ - ContractAddress: contractAddr.String(), - BaseAccessOps: []*accesscontrol.WasmAccessOperation{ - { - Operation: &accesscontrol.AccessOperation{ - AccessType: accesscontrol.AccessType_READ, - ResourceType: accesscontrol.ResourceType_KV, - IdentifierTemplate: "something", - }, - }, - { - Operation: acltypes.CommitAccessOp(), - }, - }, - BaseContractReferences: []*accesscontrol.WasmContractReference{ - { - ContractAddress: referredContractAddr.String(), - MessageType: accesscontrol.WasmMessageSubtype_EXECUTE, - MessageName: "abc", - }, - }, - }) - testApp.AccessControlKeeper.SetWasmDependencyMapping(ctx, accesscontrol.WasmDependencyMapping{ - ContractAddress: referredContractAddr.String(), - BaseAccessOps: []*accesscontrol.WasmAccessOperation{ - { - Operation: acltypes.CommitAccessOp(), - }, - }, - ExecuteAccessOps: []*accesscontrol.WasmAccessOperations{ - { - MessageName: "abc", - WasmOperations: []*accesscontrol.WasmAccessOperation{ - { - Operation: &accesscontrol.AccessOperation{ - AccessType: accesscontrol.AccessType_WRITE, - ResourceType: accesscontrol.ResourceType_KV, - IdentifierTemplate: "something else", - }, - }, - }, - }, - }, - BaseContractReferences: []*accesscontrol.WasmContractReference{ - { - ContractAddress: contractAddr.String(), - MessageType: accesscontrol.WasmMessageSubtype_EXECUTE, - MessageName: "xyz", - }, - }, - }) - gasMeterSetter := antedecorators.GetGasMeterSetter(testApp.AccessControlKeeper) - ctxWithGasMeter := gasMeterSetter(false, ctx, 1000, testTx) - ctxWithGasMeter.GasMeter().ConsumeGas(2, "") - require.Equal(t, uint64(2), ctxWithGasMeter.GasMeter().GasConsumed()) } diff --git a/go.mod b/go.mod index f4385e43e..bdc44b833 100644 --- a/go.mod +++ b/go.mod @@ -325,9 +325,9 @@ require ( ) replace ( - github.com/CosmWasm/wasmd => github.com/sei-protocol/sei-wasmd v0.1.0 + github.com/CosmWasm/wasmd => github.com/sei-protocol/sei-wasmd v0.1.1 github.com/confio/ics23/go => github.com/cosmos/cosmos-sdk/ics23/go v0.8.0 - github.com/cosmos/cosmos-sdk => github.com/sei-protocol/sei-cosmos v0.2.79 + github.com/cosmos/cosmos-sdk => github.com/sei-protocol/sei-cosmos v0.2.83 github.com/cosmos/iavl => github.com/sei-protocol/sei-iavl v0.1.9 github.com/cosmos/ibc-go/v3 => github.com/sei-protocol/sei-ibc-go/v3 v3.3.0 github.com/ethereum/go-ethereum => github.com/sei-protocol/go-ethereum v1.13.5-sei-8 diff --git a/go.sum b/go.sum index b70294d6d..239ea78d3 100644 --- a/go.sum +++ b/go.sum @@ -1347,8 +1347,8 @@ github.com/sei-protocol/go-ethereum v1.13.5-sei-8 h1:z6rUvSgLXtXQBdF1dOe8A1iDFOR github.com/sei-protocol/go-ethereum v1.13.5-sei-8/go.mod h1:kcRZmuzRn1lVejiFNTz4l4W7imnpq1bDAnuKS/RyhbQ= github.com/sei-protocol/goutils v0.0.2 h1:Bfa7Sv+4CVLNM20QcpvGb81B8C5HkQC/kW1CQpIbXDA= github.com/sei-protocol/goutils v0.0.2/go.mod h1:iYE2DuJfEnM+APPehr2gOUXfuLuPsVxorcDO+Tzq9q8= -github.com/sei-protocol/sei-cosmos v0.2.79 h1:7dhNRzytkadDXLTifvlNOVFqwRQFulSRqScKMQiKs5E= -github.com/sei-protocol/sei-cosmos v0.2.79/go.mod h1:BNRPUvKOpyLNqUzwZ7e2JEES+qOcTwuiCvPk++WJtgs= +github.com/sei-protocol/sei-cosmos v0.2.83 h1:jVmib2QHyqdXC2nRPzYf1yLeWM0/dvPPCblbqhrvCHU= +github.com/sei-protocol/sei-cosmos v0.2.83/go.mod h1:PENwVKzZLhCVbeF3YNJBqITG0BxQkvqHcCyIUgwBURE= github.com/sei-protocol/sei-db v0.0.35 h1:BNHv0gtKE4J5kq1Mhxt9dpop3lI4W2I5WurgWYIYa4E= github.com/sei-protocol/sei-db v0.0.35/go.mod h1:F/ZKZA8HJPcUzSZPA8yt6pfwlGriJ4RDR4eHKSGLStI= github.com/sei-protocol/sei-iavl v0.1.9 h1:y4mVYftxLNRs6533zl7N0/Ch+CzRQc04JDfHolIxgBE= @@ -1359,8 +1359,8 @@ github.com/sei-protocol/sei-tendermint v0.2.40 h1:uG7QsUhG/PLRnKoCVHnFaeQoRf1wlY github.com/sei-protocol/sei-tendermint v0.2.40/go.mod h1:4LSlJdhl3nf3OmohliwRNUFLOB1XWlrmSodrIP7fLh4= github.com/sei-protocol/sei-tm-db v0.0.5 h1:3WONKdSXEqdZZeLuWYfK5hP37TJpfaUa13vAyAlvaQY= github.com/sei-protocol/sei-tm-db v0.0.5/go.mod h1:Cpa6rGyczgthq7/0pI31jys2Fw0Nfrc+/jKdP1prVqY= -github.com/sei-protocol/sei-wasmd v0.1.0 h1:YCJ8SzJYMUR6hYOtgfjETFmSX1qx6cfLCmRAav2KMIs= -github.com/sei-protocol/sei-wasmd v0.1.0/go.mod h1:CNF8PPkDFU0I/Lzw2+DbaNQhyxQj309ljOq7Waxj3fk= +github.com/sei-protocol/sei-wasmd v0.1.1 h1:szcBq0ECW5uP3MldoSzTLoIloIoDghOFRBum0K/7MLU= +github.com/sei-protocol/sei-wasmd v0.1.1/go.mod h1:CNF8PPkDFU0I/Lzw2+DbaNQhyxQj309ljOq7Waxj3fk= github.com/sei-protocol/tm-db v0.0.4 h1:7Y4EU62Xzzg6wKAHEotm7SXQR0aPLcGhKHkh3qd0tnk= github.com/sei-protocol/tm-db v0.0.4/go.mod h1:PWsIWOTwdwC7Ow/GUvx8HgUJTO691pBuorIQD8JvwAs= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=