From b415ee6565838089f1509a1e9de86fa2dffb8cce Mon Sep 17 00:00:00 2001 From: Joel Smith Date: Wed, 20 Dec 2023 17:18:04 -0600 Subject: [PATCH 1/6] Refactor Errors to Helper --- app/helpers/contracts.go | 37 ++++++++++++++++++++++++++++++++++ app/helpers/global_errors.go | 20 ++++++++++++++++++ x/clock/abci.go | 35 +++----------------------------- x/clock/keeper/clock.go | 13 ++++++------ x/clock/keeper/querier.go | 3 ++- x/clock/types/errors.go | 17 +++------------- x/clock/types/msgs.go | 4 +++- x/cw-hooks/keeper/contracts.go | 6 +++++- x/feepay/keeper/feepay.go | 15 +++++++------- x/feepay/keeper/msg_server.go | 3 ++- x/feepay/keeper/querier.go | 11 +++++----- x/feepay/types/errors.go | 21 ++++++------------- 12 files changed, 102 insertions(+), 83 deletions(-) create mode 100644 app/helpers/contracts.go create mode 100644 app/helpers/global_errors.go diff --git a/app/helpers/contracts.go b/app/helpers/contracts.go new file mode 100644 index 000000000..3eb8bec87 --- /dev/null +++ b/app/helpers/contracts.go @@ -0,0 +1,37 @@ +package helpers + +import ( + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + storetypes "github.com/cosmos/cosmos-sdk/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// Execute contract, recover from panic +func ExecuteContract(k wasmtypes.ContractOpsKeeper, childCtx sdk.Context, contractAddr sdk.AccAddress, msgBz []byte, err *error) { + // Recover from panic, return error + defer func() { + if recoveryError := recover(); recoveryError != nil { + // Determine error associated with panic + if isOutofGas, msg := IsOutOfGasError(recoveryError); isOutofGas { + *err = ErrOutOfGas.Wrapf("%s", msg) + } else { + *err = ErrContractExecutionPanic.Wrapf("%s", recoveryError) + } + } + }() + + // Execute contract with sudo + _, *err = k.Sudo(childCtx, contractAddr, msgBz) +} + +// Check if error is out of gas error +func IsOutOfGasError(err any) (bool, string) { + switch e := err.(type) { + case storetypes.ErrorOutOfGas: + return true, e.Descriptor + case storetypes.ErrorGasOverflow: + return true, e.Descriptor + default: + return false, "" + } +} diff --git a/app/helpers/global_errors.go b/app/helpers/global_errors.go new file mode 100644 index 000000000..7390793f8 --- /dev/null +++ b/app/helpers/global_errors.go @@ -0,0 +1,20 @@ +package helpers + +import ( + errorsmod "cosmossdk.io/errors" + + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +const codespace = "global-errors" + +var ( + ErrInvalidAddress = sdkerrors.ErrInvalidAddress + ErrContractNotRegistered = errorsmod.Register(codespace, 1, "contract not registered") + ErrContractAlreadyRegistered = errorsmod.Register(codespace, 2, "contract already registered") + ErrContractNotAdmin = errorsmod.Register(codespace, 3, "sender is not the contract admin") + ErrContractNotCreator = errorsmod.Register(codespace, 4, "sender is not the contract creator") + ErrInvalidCWContract = errorsmod.Register(codespace, 5, "invalid CosmWasm contract") + ErrOutOfGas = errorsmod.Register(codespace, 6, "contract execution ran out of gas") + ErrContractExecutionPanic = errorsmod.Register(codespace, 7, "contract execution panicked") +) diff --git a/x/clock/abci.go b/x/clock/abci.go index 6679b5e5a..e5121c2bf 100644 --- a/x/clock/abci.go +++ b/x/clock/abci.go @@ -5,12 +5,13 @@ import ( "github.com/cometbft/cometbft/libs/log" - storetypes "github.com/cosmos/cosmos-sdk/store/types" "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/CosmosContracts/juno/v19/x/clock/keeper" "github.com/CosmosContracts/juno/v19/x/clock/types" + + helpers "github.com/CosmosContracts/juno/v19/app/helpers" ) var endBlockSudoMessage = []byte(types.EndBlockSudoMessage) @@ -51,7 +52,7 @@ func EndBlocker(ctx sdk.Context, k keeper.Keeper) { childCtx := ctx.WithGasMeter(sdk.NewGasMeter(p.ContractGasLimit)) // Execute contract - executeContract(k, childCtx, contractAddr, &err) + helpers.ExecuteContract(k.GetContractKeeper(), childCtx, contractAddr, endBlockSudoMessage, &err) if handleError(ctx, k, logger, errorExecs, &errorExists, err, idx, contract.ContractAddress) { continue } @@ -90,33 +91,3 @@ func handleError( return err != nil } - -// Execute contract, recover from panic -func executeContract(k keeper.Keeper, childCtx sdk.Context, contractAddr sdk.AccAddress, err *error) { - // Recover from panic, return error - defer func() { - if recoveryError := recover(); recoveryError != nil { - // Determine error associated with panic - if isOutofGas, msg := isOutOfGasError(recoveryError); isOutofGas { - *err = types.ErrOutOfGas.Wrapf("%s", msg) - } else { - *err = types.ErrContractExecutionPanic.Wrapf("%s", recoveryError) - } - } - }() - - // Execute contract with sudo - _, *err = k.GetContractKeeper().Sudo(childCtx, contractAddr, endBlockSudoMessage) -} - -// Check if error is out of gas error -func isOutOfGasError(err any) (bool, string) { - switch e := err.(type) { - case storetypes.ErrorOutOfGas: - return true, e.Descriptor - case storetypes.ErrorGasOverflow: - return true, e.Descriptor - default: - return false, "" - } -} diff --git a/x/clock/keeper/clock.go b/x/clock/keeper/clock.go index 0519ad08d..d646b231c 100644 --- a/x/clock/keeper/clock.go +++ b/x/clock/keeper/clock.go @@ -5,6 +5,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" + globalerrors "github.com/CosmosContracts/juno/v19/app/helpers" "github.com/CosmosContracts/juno/v19/x/clock/types" ) @@ -42,7 +43,7 @@ func (k Keeper) IsClockContract(ctx sdk.Context, contractAddress string) bool { func (k Keeper) GetClockContract(ctx sdk.Context, contractAddress string) (*types.ClockContract, error) { // Check if the contract is registered if !k.IsClockContract(ctx, contractAddress) { - return nil, types.ErrContractNotRegistered + return nil, globalerrors.ErrContractNotRegistered } // Get the KV store @@ -134,7 +135,7 @@ func (k Keeper) RemoveContract(ctx sdk.Context, contractAddress string) { func (k Keeper) RegisterContract(ctx sdk.Context, senderAddress string, contractAddress string) error { // Check if the contract is already registered if k.IsClockContract(ctx, contractAddress) { - return types.ErrContractAlreadyRegistered + return globalerrors.ErrContractAlreadyRegistered } // Ensure the sender is the contract admin or creator @@ -153,7 +154,7 @@ func (k Keeper) RegisterContract(ctx sdk.Context, senderAddress string, contract func (k Keeper) UnregisterContract(ctx sdk.Context, senderAddress string, contractAddress string) error { // Check if the contract is registered in either store if !k.IsClockContract(ctx, contractAddress) { - return types.ErrContractNotRegistered + return globalerrors.ErrContractNotRegistered } // Ensure the sender is the contract admin or creator @@ -208,7 +209,7 @@ func (k Keeper) IsContractManager(ctx sdk.Context, senderAddress string, contrac // Ensure the contract is a cosm wasm contract if ok := k.wasmKeeper.HasContractInfo(ctx, contractAddr); !ok { - return false, types.ErrInvalidCWContract + return false, globalerrors.ErrInvalidCWContract } // Get the contract info @@ -221,9 +222,9 @@ func (k Keeper) IsContractManager(ctx sdk.Context, senderAddress string, contrac // Check if the sender is the admin or creator if adminExists && !isSenderAdmin { - return false, types.ErrContractNotAdmin + return false, globalerrors.ErrContractNotAdmin } else if !adminExists && !isSenderCreator { - return false, types.ErrContractNotCreator + return false, globalerrors.ErrContractNotCreator } return true, nil diff --git a/x/clock/keeper/querier.go b/x/clock/keeper/querier.go index 48b4bc642..83f1414f9 100644 --- a/x/clock/keeper/querier.go +++ b/x/clock/keeper/querier.go @@ -5,6 +5,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" + globalerrors "github.com/CosmosContracts/juno/v19/app/helpers" "github.com/CosmosContracts/juno/v19/x/clock/types" ) @@ -38,7 +39,7 @@ func (q Querier) ClockContract(stdCtx context.Context, req *types.QueryClockCont // Ensure the contract address is valid if _, err := sdk.AccAddressFromBech32(req.ContractAddress); err != nil { - return nil, types.ErrInvalidAddress + return nil, globalerrors.ErrInvalidAddress } contract, err := q.keeper.GetClockContract(ctx, req.ContractAddress) diff --git a/x/clock/types/errors.go b/x/clock/types/errors.go index ea3adc307..3886ccb7d 100644 --- a/x/clock/types/errors.go +++ b/x/clock/types/errors.go @@ -2,21 +2,10 @@ package types import ( errorsmod "cosmossdk.io/errors" - - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) var ( - ErrInvalidAddress = sdkerrors.ErrInvalidAddress - ErrContractNotRegistered = errorsmod.Register(ModuleName, 1, "contract not registered") - ErrContractAlreadyRegistered = errorsmod.Register(ModuleName, 2, "contract already registered") - ErrContractRegisterNotAdmin = errorsmod.Register(ModuleName, 3, "this address is not the contract admin, cannot register") - ErrContractNotAdmin = errorsmod.Register(ModuleName, 4, "sender is not the contract admin") - ErrContractNotCreator = errorsmod.Register(ModuleName, 5, "sender is not the contract creator") - ErrContractJailed = errorsmod.Register(ModuleName, 6, "contract is jailed") - ErrContractNotJailed = errorsmod.Register(ModuleName, 7, "contract is not jailed") - ErrContractAlreadyJailed = errorsmod.Register(ModuleName, 8, "contract is already jailed") - ErrInvalidCWContract = errorsmod.Register(ModuleName, 9, "invalid CosmWasm contract") - ErrOutOfGas = errorsmod.Register(ModuleName, 10, "contract execution ran out of gas") - ErrContractExecutionPanic = errorsmod.Register(ModuleName, 11, "contract execution panicked") + ErrContractJailed = errorsmod.Register(ModuleName, 6, "contract is jailed") + ErrContractNotJailed = errorsmod.Register(ModuleName, 7, "contract is not jailed") + ErrContractAlreadyJailed = errorsmod.Register(ModuleName, 8, "contract is already jailed") ) diff --git a/x/clock/types/msgs.go b/x/clock/types/msgs.go index b94c60a44..4f8569ecf 100644 --- a/x/clock/types/msgs.go +++ b/x/clock/types/msgs.go @@ -4,6 +4,8 @@ import ( "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" + + globalerrors "github.com/CosmosContracts/juno/v19/app/helpers" ) const ( @@ -133,7 +135,7 @@ func (msg *MsgUpdateParams) ValidateBasic() error { func validateAddresses(addresses ...string) error { for _, address := range addresses { if _, err := sdk.AccAddressFromBech32(address); err != nil { - return errors.Wrapf(ErrInvalidAddress, "invalid address: %s", address) + return errors.Wrapf(globalerrors.ErrInvalidAddress, "invalid address: %s", address) } } diff --git a/x/cw-hooks/keeper/contracts.go b/x/cw-hooks/keeper/contracts.go index b86188680..3f53a69ae 100644 --- a/x/cw-hooks/keeper/contracts.go +++ b/x/cw-hooks/keeper/contracts.go @@ -1,6 +1,7 @@ package keeper import ( + helpers "github.com/CosmosContracts/juno/v19/app/helpers" "github.com/cosmos/cosmos-sdk/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -63,7 +64,10 @@ func (k Keeper) ExecuteMessageOnContracts(ctx sdk.Context, keyPrefix []byte, msg for _, c := range k.GetAllContracts(ctx, keyPrefix) { gasLimitCtx := ctx.WithGasMeter(sdk.NewGasMeter(p.ContractGasLimit)) addr := sdk.AccAddress(c.Bytes()) - if _, err := k.GetContractKeeper().Sudo(gasLimitCtx, addr, msgBz); err != nil { + + var err error + helpers.ExecuteContract(k.GetContractKeeper(), gasLimitCtx, addr, msgBz, &err) + if err != nil { k.Logger(ctx).Error("ExecuteMessageOnContracts err", err, "contract", addr.String()) return err } diff --git a/x/feepay/keeper/feepay.go b/x/feepay/keeper/feepay.go index 609d8a7a9..e4feed9f1 100644 --- a/x/feepay/keeper/feepay.go +++ b/x/feepay/keeper/feepay.go @@ -9,6 +9,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" + globalerrors "github.com/CosmosContracts/juno/v19/app/helpers" "github.com/CosmosContracts/juno/v19/x/feepay/types" ) @@ -22,7 +23,7 @@ func (k Keeper) IsContractRegistered(ctx sdk.Context, contractAddr string) bool func (k Keeper) GetContract(ctx sdk.Context, contractAddress string) (*types.FeePayContract, error) { // Return nil, contract not registered if !k.IsContractRegistered(ctx, contractAddress) { - return nil, types.ErrContractNotRegistered + return nil, globalerrors.ErrContractNotRegistered } store := prefix.NewStore(ctx.KVStore(k.storeKey), StoreKeyContracts) @@ -92,7 +93,7 @@ func (k Keeper) GetAllContracts(ctx sdk.Context) []types.FeePayContract { func (k Keeper) RegisterContract(ctx sdk.Context, rfp *types.MsgRegisterFeePayContract) error { // Return false because the contract was already registered if k.IsContractRegistered(ctx, rfp.FeePayContract.ContractAddress) { - return types.ErrContractAlreadyRegistered + return globalerrors.ErrContractAlreadyRegistered } // Check if sender is the owner of the cw contract @@ -102,7 +103,7 @@ func (k Keeper) RegisterContract(ctx sdk.Context, rfp *types.MsgRegisterFeePayCo } if ok := k.wasmKeeper.HasContractInfo(ctx, contractAddr); !ok { - return types.ErrInvalidCWContract + return globalerrors.ErrInvalidCWContract } // Get the contract owner @@ -141,7 +142,7 @@ func (k Keeper) UnregisterContract(ctx sdk.Context, rfp *types.MsgUnregisterFeeP // Ensure CW contract is valid if ok := k.wasmKeeper.HasContractInfo(ctx, contractAddr); !ok { - return types.ErrInvalidCWContract + return globalerrors.ErrInvalidCWContract } // Get the contract info @@ -278,7 +279,7 @@ func (k Keeper) UpdateContractWalletLimit(ctx sdk.Context, fpc *types.FeePayCont } if ok := k.wasmKeeper.HasContractInfo(ctx, contractAddr); !ok { - return types.ErrInvalidCWContract + return globalerrors.ErrInvalidCWContract } // Get the contract info & ensure sender is the manager @@ -316,9 +317,9 @@ func (k Keeper) IsContractManager(senderAddress string, contractInfo *wasmtypes. isSenderCreator := contractInfo.Creator == senderAddress if adminExists && !isSenderAdmin { - return false, types.ErrContractNotAdmin + return false, globalerrors.ErrContractNotAdmin } else if !adminExists && !isSenderCreator { - return false, types.ErrContractNotCreator + return false, globalerrors.ErrContractNotCreator } return true, nil diff --git a/x/feepay/keeper/msg_server.go b/x/feepay/keeper/msg_server.go index 2fa864a4b..87598cf2b 100644 --- a/x/feepay/keeper/msg_server.go +++ b/x/feepay/keeper/msg_server.go @@ -8,6 +8,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + globalerrors "github.com/CosmosContracts/juno/v19/app/helpers" "github.com/CosmosContracts/juno/v19/x/feepay/types" ) @@ -39,7 +40,7 @@ func (k Keeper) FundFeePayContract(goCtx context.Context, msg *types.MsgFundFeeP // Validate sender address senderAddr, err := sdk.AccAddressFromBech32(msg.SenderAddress) if err != nil { - return nil, errorsmod.Wrapf(types.ErrInvalidAddress, "invalid sender address: %s", msg.SenderAddress) + return nil, errorsmod.Wrapf(globalerrors.ErrInvalidAddress, "invalid sender address: %s", msg.SenderAddress) } return &types.MsgFundFeePayContractResponse{}, k.FundContract(ctx, contract, senderAddr, msg.Amount) diff --git a/x/feepay/keeper/querier.go b/x/feepay/keeper/querier.go index bdf60c875..ff5d1b66e 100644 --- a/x/feepay/keeper/querier.go +++ b/x/feepay/keeper/querier.go @@ -5,6 +5,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" + globalerrors "github.com/CosmosContracts/juno/v19/app/helpers" "github.com/CosmosContracts/juno/v19/x/feepay/types" ) @@ -24,7 +25,7 @@ func NewQuerier(k Keeper) Querier { func (q Querier) FeePayContract(ctx context.Context, req *types.QueryFeePayContract) (*types.QueryFeePayContractResponse, error) { // Check if contract address are valid if _, err := sdk.AccAddressFromBech32(req.ContractAddress); err != nil { - return nil, types.ErrInvalidAddress + return nil, globalerrors.ErrInvalidAddress } sdkCtx := sdk.UnwrapSDKContext(ctx) @@ -55,11 +56,11 @@ func (q Querier) FeePayContracts(ctx context.Context, req *types.QueryFeePayCont func (q Querier) FeePayContractUses(ctx context.Context, req *types.QueryFeePayContractUses) (*types.QueryFeePayContractUsesResponse, error) { // Check if wallet & contract address are valid if _, err := sdk.AccAddressFromBech32(req.ContractAddress); err != nil { - return nil, types.ErrInvalidAddress + return nil, globalerrors.ErrInvalidAddress } if _, err := sdk.AccAddressFromBech32(req.WalletAddress); err != nil { - return nil, types.ErrInvalidAddress + return nil, globalerrors.ErrInvalidAddress } sdkCtx := sdk.UnwrapSDKContext(ctx) @@ -84,11 +85,11 @@ func (q Querier) FeePayContractUses(ctx context.Context, req *types.QueryFeePayC func (q Querier) FeePayWalletIsEligible(ctx context.Context, req *types.QueryFeePayWalletIsEligible) (*types.QueryFeePayWalletIsEligibleResponse, error) { // Check if wallet & contract address are valid if _, err := sdk.AccAddressFromBech32(req.ContractAddress); err != nil { - return nil, types.ErrInvalidAddress + return nil, globalerrors.ErrInvalidAddress } if _, err := sdk.AccAddressFromBech32(req.WalletAddress); err != nil { - return nil, types.ErrInvalidAddress + return nil, globalerrors.ErrInvalidAddress } sdkCtx := sdk.UnwrapSDKContext(ctx) diff --git a/x/feepay/types/errors.go b/x/feepay/types/errors.go index 7c25f8f34..d323afb9d 100644 --- a/x/feepay/types/errors.go +++ b/x/feepay/types/errors.go @@ -2,22 +2,13 @@ package types import ( errorsmod "cosmossdk.io/errors" - - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) var ( - ErrInvalidAddress = sdkerrors.ErrInvalidAddress - ErrContractNotRegistered = errorsmod.Register(ModuleName, 1, "contract not registered") - ErrContractAlreadyRegistered = errorsmod.Register(ModuleName, 2, "contract already registered") - ErrContractRegisterNotAdmin = errorsmod.Register(ModuleName, 3, "this address is not the contract admin, cannot register") - ErrContractNotEnoughFunds = errorsmod.Register(ModuleName, 4, "contract does not have enough funds") - ErrWalletExceededUsageLimit = errorsmod.Register(ModuleName, 5, "wallet exceeded usage limit") - ErrContractNotAdmin = errorsmod.Register(ModuleName, 6, "sender is not the contract admin") - ErrContractNotCreator = errorsmod.Register(ModuleName, 7, "sender is not the contract creator") - ErrInvalidWalletLimit = errorsmod.Register(ModuleName, 8, "invalid wallet limit; must be between 0 and 1,000,000") - ErrInvalidJunoFundAmount = errorsmod.Register(ModuleName, 9, "fee pay contracts only accept juno funds") - ErrInvalidCWContract = errorsmod.Register(ModuleName, 10, "invalid CosmWasm contract") - ErrFeePayDisabled = errorsmod.Register(ModuleName, 11, "the FeePay module is disabled") - ErrDeductFees = errorsmod.Register(ModuleName, 12, "error deducting fees") + ErrContractNotEnoughFunds = errorsmod.Register(ModuleName, 1, "contract does not have enough funds") + ErrWalletExceededUsageLimit = errorsmod.Register(ModuleName, 2, "wallet exceeded usage limit") + ErrInvalidWalletLimit = errorsmod.Register(ModuleName, 3, "invalid wallet limit; must be between 0 and 1,000,000") + ErrInvalidJunoFundAmount = errorsmod.Register(ModuleName, 4, "fee pay contracts only accept juno funds") + ErrFeePayDisabled = errorsmod.Register(ModuleName, 5, "the FeePay module is disabled") + ErrDeductFees = errorsmod.Register(ModuleName, 6, "error deducting fees") ) From 1c21a20143aeb713856d81d88e37d55c76ca26c1 Mon Sep 17 00:00:00 2001 From: Joel Smith Date: Wed, 20 Dec 2023 17:26:11 -0600 Subject: [PATCH 2/6] Rename Global Erorrs --- app/helpers/global_errors.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/global_errors.go b/app/helpers/global_errors.go index 7390793f8..385ddb54e 100644 --- a/app/helpers/global_errors.go +++ b/app/helpers/global_errors.go @@ -6,7 +6,7 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) -const codespace = "global-errors" +const codespace = "juno-global" var ( ErrInvalidAddress = sdkerrors.ErrInvalidAddress From cfc5e72aef1200c8d90112399adadb3967c79da3 Mon Sep 17 00:00:00 2001 From: Joel Smith Date: Wed, 20 Dec 2023 18:35:02 -0600 Subject: [PATCH 3/6] Test High Gas --- .../juno_staking_hooks_high_gas_example.wasm | Bin 0 -> 193011 bytes interchaintest/module_cwhooks_test.go | 19 ++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 interchaintest/contracts/juno_staking_hooks_high_gas_example.wasm diff --git a/interchaintest/contracts/juno_staking_hooks_high_gas_example.wasm b/interchaintest/contracts/juno_staking_hooks_high_gas_example.wasm new file mode 100644 index 0000000000000000000000000000000000000000..4c5d90df8a7e236ef66b5b1bda923343ab072b1a GIT binary patch literal 193011 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 b?@J06d>xA+C8N#*rvyQ+VIUX|ciJjTUKvPRb3Z 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 literal 0 HcmV?d00001 diff --git a/interchaintest/module_cwhooks_test.go b/interchaintest/module_cwhooks_test.go index 5ed0284be..2bba0b94e 100644 --- a/interchaintest/module_cwhooks_test.go +++ b/interchaintest/module_cwhooks_test.go @@ -57,6 +57,25 @@ func TestJunoCwHooks(t *testing.T) { require.Equal(t, user.FormattedAddress(), res.Data.DelegatorAddress) require.Equal(t, fmt.Sprintf("%d.000000000000000000", stakeAmt), res.Data.Shares) + // HIGH GAS TEST + // Setup a high gas contract + _, contractAddr = helpers.SetupContract(t, ctx, juno, user.KeyName(), "contracts/juno_staking_hooks_high_gas_example.wasm", `{}`) + + // Register staking contract + helpers.RegisterCwHooksStaking(t, ctx, juno, user, contractAddr) + sc = helpers.GetCwHooksStakingContracts(t, ctx, juno) + require.Equal(t, 2, len(sc)) + + // Perform a Staking Action + stakeAmt = 1_000_000 + helpers.StakeTokens(t, ctx, juno, user, valoper, fmt.Sprintf("%d%s", stakeAmt, juno.Config().Denom)) + + // Query the smart contract, should panic and not update value + res = helpers.GetCwStakingHookLastDelegationChange(t, ctx, juno, contractAddr, user.FormattedAddress()) + require.Equal(t, "", res.Data.ValidatorAddress) + require.Equal(t, "", res.Data.DelegatorAddress) + require.Equal(t, "", res.Data.Shares) + t.Cleanup(func() { _ = ic.Close() }) From 7b909c82b586d17fdb107aa0d271c22ff06d719f Mon Sep 17 00:00:00 2001 From: Joel Smith Date: Wed, 20 Dec 2023 18:57:54 -0600 Subject: [PATCH 4/6] Lint --- app/helpers/contracts.go | 1 + x/clock/abci.go | 3 +-- x/cw-hooks/keeper/contracts.go | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/helpers/contracts.go b/app/helpers/contracts.go index 3eb8bec87..d4023e694 100644 --- a/app/helpers/contracts.go +++ b/app/helpers/contracts.go @@ -2,6 +2,7 @@ package helpers import ( wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" ) diff --git a/x/clock/abci.go b/x/clock/abci.go index e5121c2bf..ca15e1489 100644 --- a/x/clock/abci.go +++ b/x/clock/abci.go @@ -8,10 +8,9 @@ import ( "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" + helpers "github.com/CosmosContracts/juno/v19/app/helpers" "github.com/CosmosContracts/juno/v19/x/clock/keeper" "github.com/CosmosContracts/juno/v19/x/clock/types" - - helpers "github.com/CosmosContracts/juno/v19/app/helpers" ) var endBlockSudoMessage = []byte(types.EndBlockSudoMessage) diff --git a/x/cw-hooks/keeper/contracts.go b/x/cw-hooks/keeper/contracts.go index 3f53a69ae..421365f88 100644 --- a/x/cw-hooks/keeper/contracts.go +++ b/x/cw-hooks/keeper/contracts.go @@ -1,9 +1,10 @@ package keeper import ( - helpers "github.com/CosmosContracts/juno/v19/app/helpers" "github.com/cosmos/cosmos-sdk/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" + + helpers "github.com/CosmosContracts/juno/v19/app/helpers" ) func (k Keeper) SetContract(ctx sdk.Context, keyPrefix []byte, contractAddr sdk.AccAddress) { From 17c94c243837a74ad6d035e8094ebd5ed162e2bd Mon Sep 17 00:00:00 2001 From: Joel Smith Date: Thu, 21 Dec 2023 18:13:45 -0600 Subject: [PATCH 5/6] Fix Clock Error Codes --- x/clock/types/errors.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/x/clock/types/errors.go b/x/clock/types/errors.go index 3886ccb7d..d8d05404b 100644 --- a/x/clock/types/errors.go +++ b/x/clock/types/errors.go @@ -5,7 +5,7 @@ import ( ) var ( - ErrContractJailed = errorsmod.Register(ModuleName, 6, "contract is jailed") - ErrContractNotJailed = errorsmod.Register(ModuleName, 7, "contract is not jailed") - ErrContractAlreadyJailed = errorsmod.Register(ModuleName, 8, "contract is already jailed") + ErrContractJailed = errorsmod.Register(ModuleName, 1, "contract is jailed") + ErrContractNotJailed = errorsmod.Register(ModuleName, 2, "contract is not jailed") + ErrContractAlreadyJailed = errorsmod.Register(ModuleName, 3, "contract is already jailed") ) From 3a0bb93303772936362c93e3979d900a39cda68a Mon Sep 17 00:00:00 2001 From: Joel Smith Date: Thu, 21 Dec 2023 18:24:12 -0600 Subject: [PATCH 6/6] Add Missing Contract References --- interchaintest/contracts/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/interchaintest/contracts/README.md b/interchaintest/contracts/README.md index 47014aee6..65d80cf18 100644 --- a/interchaintest/contracts/README.md +++ b/interchaintest/contracts/README.md @@ -8,7 +8,11 @@ A list of the contracts here which are pre-compiled in other repos. > ibchooks_counter.wasm -> > cw_testburn.wasm -> > clock_example.wasm -> +> clock_example_high_gas.wasm -> +> clock_example_migrate.wasm -> +> clock_example_no_sudo.wasm -> > juno_staking_hooks_example.wasm -> +> juno_staking_hooks_high_gas_example.wasm -> > cw721_base - https://github.com/CosmWasm/cw-nfts/releases/download/v0.17.0/cw721_base.wasm > cw721-receiver - https://github.com/CosmWasm/cw-nfts/pull/144 \ No newline at end of file