From fb448bb189257f54206d602e928c40e23e58c381 Mon Sep 17 00:00:00 2001 From: freeelancer Date: Sat, 2 Mar 2024 09:22:31 +0800 Subject: [PATCH] added posttx tests --- x/smartaccount/ante/pretransaction.go | 40 +++-- .../ante/tests/{ante_test.go => auth_test.go} | 0 x/smartaccount/post/expected_keepers.go | 4 + x/smartaccount/post/posttransaction.go | 60 +++++++ x/smartaccount/post/posttransaction_test.go | 162 ++++++++++++++++++ x/smartaccount/post/smartaccount_posttx.go | 45 ----- .../test_data/limit_send_only_hooks.wasm | Bin 208920 -> 208975 bytes x/smartaccount/types/wasm.go | 6 +- 8 files changed, 256 insertions(+), 61 deletions(-) rename x/smartaccount/ante/tests/{ante_test.go => auth_test.go} (100%) create mode 100644 x/smartaccount/post/posttransaction.go create mode 100644 x/smartaccount/post/posttransaction_test.go delete mode 100644 x/smartaccount/post/smartaccount_posttx.go diff --git a/x/smartaccount/ante/pretransaction.go b/x/smartaccount/ante/pretransaction.go index 4fbb9c5a..7947a635 100644 --- a/x/smartaccount/ante/pretransaction.go +++ b/x/smartaccount/ante/pretransaction.go @@ -3,14 +3,13 @@ package ante import ( "encoding/json" - sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrortypes "github.com/cosmos/cosmos-sdk/types/errors" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" tx2 "github.com/cosmos/cosmos-sdk/types/tx" authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" wasmvmtypes "github.com/CosmWasm/wasmvm/types" - smartaccounttypes "github.com/terra-money/core/v2/x/smartaccount/types" + "github.com/terra-money/core/v2/x/smartaccount/types" ) // SmartAccountCheckDecorator does authentication for smart accounts @@ -28,7 +27,7 @@ func NewPreTransactionHookDecorator(sak SmartAccountKeeper, wk WasmKeeper) PreTr // AnteHandle checks if the tx provides sufficient fee to cover the required fee from the fee market. func (pth PreTransactionHookDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error) { - setting, ok := ctx.Value(smartaccounttypes.ModuleName).(smartaccounttypes.Setting) + setting, ok := ctx.Value(types.ModuleName).(types.Setting) if !ok { return next(ctx, tx, simulate) } @@ -54,10 +53,10 @@ func (pth PreTransactionHookDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, si } // TODO: to refactor -func BuildPreTransactionHookMsg(tx sdk.Tx) ([]byte, error) { +func BuildPrePostTransactionHookMsg(tx sdk.Tx, isPreTx bool) ([]byte, error) { sigTx, ok := tx.(authsigning.SigVerifiableTx) if !ok { - return nil, sdkerrors.Wrap(sdkerrortypes.ErrInvalidType, "expected SigVerifiableTx") + return nil, sdkerrors.ErrInvalidType.Wrap("expected SigVerifiableTx") } // Signer here is the account that the state transition is affecting @@ -65,14 +64,14 @@ func BuildPreTransactionHookMsg(tx sdk.Tx) ([]byte, error) { signers := sigTx.GetSigners() // Current only supports one signer (TODO review in the future) if len(signers) != 1 { - return nil, sdkerrors.Wrap(sdkerrortypes.ErrorInvalidSigner, "only one signer is supported") + return nil, sdkerrors.ErrorInvalidSigner.Wrap("only one signer is supported") } // Sender here is the account that signed the transaction // Could be different from the account above (confusingly named signer) signatures, _ := sigTx.GetSignaturesV2() if len(signatures) == 0 { - return nil, sdkerrors.Wrap(sdkerrortypes.ErrNoSignatures, "no signatures found") + return nil, sdkerrors.ErrNoSignatures.Wrap("no signatures found") } senderAddr, err := sdk.AccAddressFromHexUnsafe(signatures[0].PubKey.Address().String()) if err != nil { @@ -94,11 +93,26 @@ func BuildPreTransactionHookMsg(tx sdk.Tx) ([]byte, error) { Stargate: &stargateMsg, }) } - preTx := smartaccounttypes.PreTransaction{ - Sender: senderAddr.String(), - Account: signers[0].String(), - Messages: stargateMsgs, + var msg types.SudoMsg + if isPreTx { + preTx := types.PreTransaction{ + Sender: senderAddr.String(), + Account: signers[0].String(), + Messages: stargateMsgs, + } + msg = types.SudoMsg{PreTransaction: &preTx} + } else { + postTx := types.PostTransaction{ + Sender: senderAddr.String(), + Account: signers[0].String(), + Messages: stargateMsgs, + } + msg = types.SudoMsg{PostTransaction: &postTx} } - msg := smartaccounttypes.SudoMsg{PreTransaction: &preTx} + return json.Marshal(msg) } + +func BuildPreTransactionHookMsg(tx sdk.Tx) ([]byte, error) { + return BuildPrePostTransactionHookMsg(tx, true) +} diff --git a/x/smartaccount/ante/tests/ante_test.go b/x/smartaccount/ante/tests/auth_test.go similarity index 100% rename from x/smartaccount/ante/tests/ante_test.go rename to x/smartaccount/ante/tests/auth_test.go diff --git a/x/smartaccount/post/expected_keepers.go b/x/smartaccount/post/expected_keepers.go index 47d55fd5..3a346f91 100644 --- a/x/smartaccount/post/expected_keepers.go +++ b/x/smartaccount/post/expected_keepers.go @@ -9,3 +9,7 @@ import ( type SmartAccountKeeper interface { GetSetting(ctx sdk.Context, ownerAddr string) (*smartaccounttypes.Setting, error) } + +type WasmKeeper interface { + Sudo(ctx sdk.Context, contractAddress sdk.AccAddress, msg []byte) ([]byte, error) +} diff --git a/x/smartaccount/post/posttransaction.go b/x/smartaccount/post/posttransaction.go new file mode 100644 index 00000000..2e601724 --- /dev/null +++ b/x/smartaccount/post/posttransaction.go @@ -0,0 +1,60 @@ +package post + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/terra-money/core/v2/x/smartaccount/ante" + "github.com/terra-money/core/v2/x/smartaccount/types" +) + +// PostTransactionHookDecorator does authentication for smart accounts +type PostTransactionHookDecorator struct { + smartaccountKeeper SmartAccountKeeper + wasmKeeper WasmKeeper +} + +func NewPostTransactionHookDecorator(sak SmartAccountKeeper, wk WasmKeeper) PostTransactionHookDecorator { + return PostTransactionHookDecorator{ + smartaccountKeeper: sak, + wasmKeeper: wk, + } +} + +// FeeSharePostHandler if the smartaccount module is enabled +// takes the total fees paid for each transaction and +// split these fees equally between all the contacts +// involved in the transaction based on the module params. +func (pth PostTransactionHookDecorator) PostHandle( + ctx sdk.Context, + tx sdk.Tx, + simulate bool, + success bool, + next sdk.PostHandler, +) (newCtx sdk.Context, err error) { + setting, ok := ctx.Value(types.ModuleName).(types.Setting) + if !ok { + return next(ctx, tx, simulate, success) + } + + if setting.PostTransaction != nil && len(setting.PostTransaction) > 0 { + for _, postTx := range setting.PostTransaction { + contractAddr, err := sdk.AccAddressFromBech32(postTx) + if err != nil { + return ctx, err + } + data, err := BuildPostTransactionHookMsg(tx) + if err != nil { + return ctx, err + } + _, err = pth.wasmKeeper.Sudo(ctx, contractAddr, data) + if err != nil { + return ctx, err + } + } + } + return next(ctx, tx, simulate, success) +} + +func BuildPostTransactionHookMsg(tx sdk.Tx) ([]byte, error) { + return ante.BuildPrePostTransactionHookMsg(tx, false) +} diff --git a/x/smartaccount/post/posttransaction_test.go b/x/smartaccount/post/posttransaction_test.go new file mode 100644 index 00000000..6e4899e1 --- /dev/null +++ b/x/smartaccount/post/posttransaction_test.go @@ -0,0 +1,162 @@ +package post_test + +import ( + "testing" + + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/tx" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/tx/signing" + authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" + "github.com/cosmos/cosmos-sdk/x/bank/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/stretchr/testify/require" + "github.com/stretchr/testify/suite" + "github.com/terra-money/core/v2/x/smartaccount/post" + "github.com/terra-money/core/v2/x/smartaccount/test_helpers" + smartaccounttypes "github.com/terra-money/core/v2/x/smartaccount/types" +) + +type PostTxTestSuite struct { + test_helpers.SmartAccountTestSuite + + PostTxDecorator post.PostTransactionHookDecorator + WasmKeeper *wasmkeeper.PermissionedKeeper +} + +func TestAnteSuite(t *testing.T) { + suite.Run(t, new(PostTxTestSuite)) +} + +func (s *PostTxTestSuite) Setup() { + s.SmartAccountTestSuite.SetupTests() + s.WasmKeeper = wasmkeeper.NewDefaultPermissionKeeper(s.App.Keepers.WasmKeeper) + s.PostTxDecorator = post.NewPostTransactionHookDecorator(s.SmartAccountKeeper, s.WasmKeeper) + s.Ctx = s.Ctx.WithChainID("test") +} + +func (s *PostTxTestSuite) TestPostTransactionHookWithoutSmartAccount() { + s.Setup() + txBuilder := s.BuildDefaultMsgTx(0, &types.MsgSend{ + FromAddress: s.TestAccs[0].String(), + ToAddress: s.TestAccs[1].String(), + Amount: sdk.NewCoins(sdk.NewInt64Coin("uluna", 100000000)), + }) + _, err := s.PostTxDecorator.PostHandle(s.Ctx, txBuilder.GetTx(), false, true, sdk.ChainPostDecorators(sdk.Terminator{})) + require.NoError(s.T(), err) +} + +func (s *PostTxTestSuite) TestPostTransactionHookWithEmptySmartAccount() { + s.Setup() + s.Ctx = s.Ctx.WithValue(smartaccounttypes.ModuleName, smartaccounttypes.Setting{}) + txBuilder := s.BuildDefaultMsgTx(0, &types.MsgSend{ + FromAddress: s.TestAccs[0].String(), + ToAddress: s.TestAccs[1].String(), + Amount: sdk.NewCoins(sdk.NewInt64Coin("uluna", 100000000)), + }) + _, err := s.PostTxDecorator.PostHandle(s.Ctx, txBuilder.GetTx(), false, true, sdk.ChainPostDecorators(sdk.Terminator{})) + require.NoError(s.T(), err) +} + +func (s *PostTxTestSuite) TestInvalidContractAddress() { + s.Setup() + s.Ctx = s.Ctx.WithValue(smartaccounttypes.ModuleName, smartaccounttypes.Setting{ + PostTransaction: []string{s.TestAccs[0].String()}, + }) + txBuilder := s.BuildDefaultMsgTx(0, &types.MsgSend{ + FromAddress: s.TestAccs[0].String(), + ToAddress: s.TestAccs[1].String(), + Amount: sdk.NewCoins(sdk.NewInt64Coin("uluna", 100000000)), + }) + _, err := s.PostTxDecorator.PostHandle(s.Ctx, txBuilder.GetTx(), false, true, sdk.ChainPostDecorators(sdk.Terminator{})) + require.ErrorContainsf(s.T(), err, "no such contract", "error message: %s", err) +} + +func (s *PostTxTestSuite) TestSendCoinsWithLimitSendHook() { + s.Setup() + + acc := s.TestAccs[0] + codeId, _, err := s.WasmKeeper.Create(s.Ctx, acc, test_helpers.LimitSendOnlyHookWasm, nil) + require.NoError(s.T(), err) + contractAddr, _, err := s.WasmKeeper.Instantiate(s.Ctx, codeId, acc, acc, []byte("{}"), "limit send", sdk.NewCoins()) + require.NoError(s.T(), err) + + s.Ctx = s.Ctx.WithValue(smartaccounttypes.ModuleName, smartaccounttypes.Setting{ + PostTransaction: []string{contractAddr.String()}, + }) + txBuilder := s.BuildDefaultMsgTx(0, &types.MsgSend{ + FromAddress: acc.String(), + ToAddress: acc.String(), + Amount: sdk.NewCoins(sdk.NewInt64Coin("uluna", 100000000)), + }) + _, err = s.PostTxDecorator.PostHandle(s.Ctx, txBuilder.GetTx(), false, true, sdk.ChainPostDecorators(sdk.Terminator{})) + require.NoError(s.T(), err) +} + +func (s *PostTxTestSuite) TestStakingWithLimitSendHook() { + s.Setup() + + acc := s.TestAccs[0] + codeId, _, err := s.WasmKeeper.Create(s.Ctx, acc, test_helpers.LimitSendOnlyHookWasm, nil) + require.NoError(s.T(), err) + contractAddr, _, err := s.WasmKeeper.Instantiate(s.Ctx, codeId, acc, acc, []byte("{}"), "limit send", sdk.NewCoins()) + require.NoError(s.T(), err) + + s.Ctx = s.Ctx.WithValue(smartaccounttypes.ModuleName, smartaccounttypes.Setting{ + PostTransaction: []string{contractAddr.String()}, + }) + txBuilder := s.BuildDefaultMsgTx(0, &stakingtypes.MsgDelegate{ + DelegatorAddress: acc.String(), + ValidatorAddress: acc.String(), + Amount: sdk.NewInt64Coin("uluna", 100000000), + }) + _, err = s.PostTxDecorator.PostHandle(s.Ctx, txBuilder.GetTx(), false, true, sdk.ChainPostDecorators(sdk.Terminator{})) + require.ErrorContainsf(s.T(), err, "Unauthorized message type", "error message: %s", err) +} + +func (s *PostTxTestSuite) BuildDefaultMsgTx(accountIndex int, msgs ...sdk.Msg) client.TxBuilder { + pk := s.TestAccPrivs[accountIndex] + sender := s.TestAccs[accountIndex] + acc := s.App.Keepers.AccountKeeper.GetAccount(s.Ctx, msgs[0].GetSigners()[0]) + txBuilder := s.EncodingConfig.TxConfig.NewTxBuilder() + err := txBuilder.SetMsgs( + msgs..., + ) + require.NoError(s.T(), err) + + signer := authsigning.SignerData{ + Address: sender.String(), + ChainID: "test", + AccountNumber: acc.GetAccountNumber(), + Sequence: acc.GetSequence(), + PubKey: pk.PubKey(), + } + + emptySig := signing.SignatureV2{ + PubKey: signer.PubKey, + Data: &signing.SingleSignatureData{ + SignMode: s.EncodingConfig.TxConfig.SignModeHandler().DefaultMode(), + Signature: nil, + }, + Sequence: signer.Sequence, + } + + err = txBuilder.SetSignatures(emptySig) + require.NoError(s.T(), err) + + sigV2, err := tx.SignWithPrivKey( + s.EncodingConfig.TxConfig.SignModeHandler().DefaultMode(), + signer, + txBuilder, + pk, + s.EncodingConfig.TxConfig, + acc.GetSequence(), + ) + require.NoError(s.T(), err) + + err = txBuilder.SetSignatures(sigV2) + require.NoError(s.T(), err) + + return txBuilder +} diff --git a/x/smartaccount/post/smartaccount_posttx.go b/x/smartaccount/post/smartaccount_posttx.go deleted file mode 100644 index 5f75034d..00000000 --- a/x/smartaccount/post/smartaccount_posttx.go +++ /dev/null @@ -1,45 +0,0 @@ -package post - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" -) - -// SmartAccountCheckDecorator does authentication for smart accounts -type SmartAccountPostTxDecorator struct { - smartaccountKeeper SmartAccountKeeper -} - -func NewSmartAccountPostTxDecorator(sak SmartAccountKeeper) SmartAccountPostTxDecorator { - return SmartAccountPostTxDecorator{ - smartaccountKeeper: sak, - } -} - -// FeeSharePostHandler if the smartaccount module is enabled -// takes the total fees paid for each transaction and -// split these fees equally between all the contacts -// involved in the transaction based on the module params. -func (sad SmartAccountPostTxDecorator) PostHandle( - ctx sdk.Context, - tx sdk.Tx, - simulate bool, - success bool, - next sdk.PostHandler, -) (newCtx sdk.Context, err error) { - - setting, err := sad.smartaccountKeeper.GetSetting(ctx, tx.GetMsgs()[0].GetSigners()[0].String()) - if sdkerrors.ErrKeyNotFound.Is(err) { - return next(ctx, tx, simulate, success) - } else if err != nil { - return ctx, err - } - - if setting.PostTransaction != nil && len(setting.PostTransaction) > 0 { - for _, postTx := range setting.PostTransaction { - _ = postTx - // TODO: add code that calls post-transaction on contracts - } - } - return next(ctx, tx, simulate, success) -} diff --git a/x/smartaccount/test_helpers/test_data/limit_send_only_hooks.wasm b/x/smartaccount/test_helpers/test_data/limit_send_only_hooks.wasm index 08d10780c822cb70e14153962eda1e7008b37488..b58d39622447fed35b3ed4d3a6b900650609a7c8 100644 GIT binary patch delta 47852 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 diff --git a/x/smartaccount/types/wasm.go b/x/smartaccount/types/wasm.go index df7713cd..804078b5 100644 --- a/x/smartaccount/types/wasm.go +++ b/x/smartaccount/types/wasm.go @@ -30,7 +30,7 @@ type PreTransaction struct { } type PostTransaction struct { - Sender string `json:"sender"` - Account string `json:"account"` - Msgs []types.CosmosMsg `json:"msgs"` + Sender string `json:"sender"` + Account string `json:"account"` + Messages []types.CosmosMsg `json:"msgs"` }