089afe41a8
* Allow evm to call native modules through logs Closes #416 comment add txHash parameter review suggestions add hooks test * Update x/evm/keeper/hooks.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * Update x/evm/keeper/hooks_test.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * Update x/evm/keeper/keeper.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * Update x/evm/keeper/keeper.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * Update x/evm/keeper/keeper.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * use table tests * update adr comment * update adr * changelog * Update CHANGELOG.md Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>
77 lines
1.7 KiB
Go
77 lines
1.7 KiB
Go
package keeper_test
|
|
|
|
import (
|
|
"errors"
|
|
"math/big"
|
|
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
"github.com/ethereum/go-ethereum/common"
|
|
ethtypes "github.com/ethereum/go-ethereum/core/types"
|
|
|
|
"github.com/tharsis/ethermint/x/evm/keeper"
|
|
"github.com/tharsis/ethermint/x/evm/types"
|
|
)
|
|
|
|
// LogRecordHook records all the logs
|
|
type LogRecordHook struct {
|
|
Logs []*ethtypes.Log
|
|
}
|
|
|
|
func (dh *LogRecordHook) PostTxProcessing(ctx sdk.Context, txHash common.Hash, logs []*ethtypes.Log) error {
|
|
dh.Logs = logs
|
|
return nil
|
|
}
|
|
|
|
// FailureHook always fail
|
|
type FailureHook struct{}
|
|
|
|
func (dh FailureHook) PostTxProcessing(ctx sdk.Context, txHash common.Hash, logs []*ethtypes.Log) error {
|
|
return errors.New("post tx processing failed")
|
|
}
|
|
|
|
func (suite *KeeperTestSuite) TestEvmHooks() {
|
|
testCases := []struct {
|
|
msg string
|
|
setupHook func() types.EvmHooks
|
|
expFunc func(hook types.EvmHooks, result error)
|
|
}{
|
|
{
|
|
"log collect hook",
|
|
func() types.EvmHooks {
|
|
return &LogRecordHook{}
|
|
},
|
|
func(hook types.EvmHooks, result error) {
|
|
suite.Require().NoError(result)
|
|
suite.Require().Equal(1, len((hook.(*LogRecordHook).Logs)))
|
|
},
|
|
},
|
|
{
|
|
"always fail hook",
|
|
func() types.EvmHooks {
|
|
return &FailureHook{}
|
|
},
|
|
func(hook types.EvmHooks, result error) {
|
|
suite.Require().Error(result)
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
suite.SetupTest()
|
|
hook := tc.setupHook()
|
|
suite.app.EvmKeeper.SetHooks(keeper.NewMultiEvmHooks(hook))
|
|
|
|
k := suite.app.EvmKeeper
|
|
txHash := common.BigToHash(big.NewInt(1))
|
|
k.SetTxHashTransient(txHash)
|
|
k.AddLog(ðtypes.Log{
|
|
Topics: []common.Hash{},
|
|
Address: suite.address,
|
|
})
|
|
logs := k.GetTxLogs(txHash)
|
|
result := k.PostTxProcessing(txHash, logs)
|
|
|
|
tc.expFunc(hook, result)
|
|
}
|
|
}
|