@@ -11,6 +11,8 @@ import (
1111 "strings"
1212 "sync/atomic"
1313
14+ "github.com/33cn/chain33/common/address"
15+
1416 "github.com/33cn/chain33/account"
1517 "github.com/ethereum/go-ethereum/params"
1618
@@ -48,19 +50,20 @@ func (evm *EVMExecutor) innerExec(msg *common.Message, txHash []byte, sigType in
4850 cfg := evm .GetAPI ().GetConfig ()
4951 // 获取当前区块的上下文信息构造EVM上下文
5052 context := evm .NewEVMContext (msg , txHash )
53+ execAddr := evm .getEvmExecAddress ()
5154 // 创建EVM运行时对象
5255 env := runtime .NewEVM (context , evm .mStateDB , * evm .vmCfg , cfg )
53- isCreate := strings .Compare (msg .To ().String (), EvmAddress ) == 0 && len (msg .Data ()) > 0
54- isTransferOnly := strings .Compare (msg .To ().String (), EvmAddress ) == 0 && 0 == len (msg .Data ())
56+ isCreate := strings .Compare (msg .To ().String (), execAddr ) == 0 && len (msg .Data ()) > 0
57+ isTransferOnly := strings .Compare (msg .To ().String (), execAddr ) == 0 && 0 == len (msg .Data ())
5558 //coins转账,para数据作为备注交易
56- isTransferNote := strings .Compare (msg .To ().String (), EvmAddress ) != 0 && ! env .StateDB .Exist (msg .To ().String ()) && len (msg .Para ()) > 0 && msg .Value () != 0
59+ isTransferNote := strings .Compare (msg .To ().String (), execAddr ) != 0 && ! env .StateDB .Exist (msg .To ().String ()) && len (msg .Para ()) > 0 && msg .Value () != 0
5760
5861 //加上固有消费的gas
5962 gas , err := intrinsicGas (msg , isCreate , true )
6063 if err != nil {
6164 return nil , err
6265 }
63- log .Info ("innerExec" , "isCreate" , isCreate , "isTransferOnly" , isTransferOnly , "isTransferNote:" , isTransferNote , "evmaddr" , EvmAddress , "msg.From:" , msg .From (), "msg.To" , msg .To ().String (),
66+ log .Info ("innerExec" , "isCreate" , isCreate , "isTransferOnly" , isTransferOnly , "isTransferNote:" , isTransferNote , "evmaddr" , execAddr , "msg.From:" , msg .From (), "msg.To" , msg .To ().String (),
6467 "data size:" , len (msg .Data ()), "para size:" , len (msg .Para ()), "readOnly:" , readOnly , "intrinsicGas:" , gas , "value:" , msg .Value ())
6568 if msg .GasLimit () < gas {
6669 return nil , fmt .Errorf ("%w: have %d, want %d" , model .ErrIntrinsicGas , msg .GasLimit (), gas )
@@ -356,6 +359,17 @@ func (evm *EVMExecutor) GetTxFee(tx *types.Transaction, index int) int64 {
356359 return fee
357360}
358361
362+ // 获取evm 执行器地址
363+ func (evm * EVMExecutor ) getEvmExecAddress () string {
364+
365+ isFork := evm .GetAPI ().GetConfig ().IsDappFork (evm .GetHeight (), "evm" , evmtypes .ForkEVMAddressInit )
366+ if isFork && address .IsEthAddress (evmExecAddress ) {
367+ return evmExecFormatAddress
368+ }
369+
370+ return evmExecAddress
371+ }
372+
359373func getDataHashKey (addr common.Address ) []byte {
360374 return []byte (fmt .Sprintf ("mavl-%v-data-hash:%v" , evmtypes .ExecutorName , addr ))
361375}
0 commit comments