Skip to content

Commit 36e8875

Browse files
bysomeonevipwzw
authored andcommitted
[[FIX]] init evm exec address with format
1 parent a2f1d80 commit 36e8875

File tree

4 files changed

+30
-12
lines changed

4 files changed

+30
-12
lines changed

plugin/dapp/evm/executor/evm.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,8 @@ import (
99
"fmt"
1010
"math/big"
1111
"os"
12-
"sort"
13-
1412
"reflect"
13+
"sort"
1514

1615
log "github.com/33cn/chain33/common/log/log15"
1716

@@ -26,9 +25,10 @@ import (
2625

2726
var (
2827
evmDebugInited = false
29-
// EvmAddress 本合约地址
30-
EvmAddress = ""
31-
driverName = evmtypes.ExecutorName
28+
// 执行器地址, 格式由evm配置的地址驱动指定
29+
evmExecAddress = ""
30+
evmExecFormatAddress = ""
31+
driverName = evmtypes.ExecutorName
3232
)
3333

3434
type subConfig struct {
@@ -67,7 +67,8 @@ func Init(name string, cfg *types.Chain33Config, sub []byte) {
6767
driverName = name
6868
drivers.Register(cfg, driverName, newEVMDriver, enableHeight)
6969
// 格式化为配置地址格式
70-
EvmAddress = common.StringToAddress(address.ExecAddress(cfg.ExecName(name))).String()
70+
evmExecAddress = common.StringToAddress(address.ExecAddress(cfg.ExecName(name))).String()
71+
evmExecFormatAddress = address.ToLower(evmExecAddress)
7172
// 初始化硬分叉数据
7273
state.InitForkData()
7374
InitExecType()

plugin/dapp/evm/executor/exec.go

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
359373
func getDataHashKey(addr common.Address) []byte {
360374
return []byte(fmt.Sprintf("mavl-%v-data-hash:%v", evmtypes.ExecutorName, addr))
361375
}

plugin/dapp/evm/executor/query.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,12 @@ func (evm *EVMExecutor) Query_EstimateGas(req *evmtypes.EstimateEVMGasReq) (type
8282
var lo uint64 = 21000
8383
var hi uint64 = evmtypes.MaxGasLimit
8484
var cap = hi
85+
execAddr := evm.getEvmExecAddress()
8586
// 创建EVM运行时对象
8687
env := runtime.NewEVM(evm.NewEVMContext(msg, tx.Hash()), evm.mStateDB, *evm.vmCfg, evm.GetAPI().GetConfig())
87-
isTransferOnly := strings.Compare(msg.To().String(), EvmAddress) == 0 && 0 == len(msg.Data())
88+
isTransferOnly := strings.Compare(msg.To().String(), execAddr) == 0 && 0 == len(msg.Data())
8889
//coins转账,para数据作为备注交易
89-
isTransferNote := strings.Compare(msg.To().String(), EvmAddress) != 0 && !env.StateDB.Exist(msg.To().String()) && len(msg.Para()) > 0 && msg.Value() != 0
90+
isTransferNote := strings.Compare(msg.To().String(), execAddr) != 0 && !env.StateDB.Exist(msg.To().String()) && len(msg.Para()) > 0 && msg.Value() != 0
9091
//如果是普通转账或者带有备注的Coins 转账 则直接返回
9192
if isTransferOnly || isTransferNote {
9293
result := &evmtypes.EstimateEVMGasResp{}

plugin/dapp/evm/types/types.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ const (
4848
ForkEVMTxGroup = "ForkEVMTxGroup"
4949
// ForkEVMMixAddress evm同时兼容base58及16进制地址混合调用处理
5050
ForkEVMMixAddress = "ForkEVMMixAddress"
51+
// ForkEVMAddressInit 初始化以太坊格式地址
52+
ForkEVMAddressInit = "ForkEVMAddressInit"
5153
)
5254

5355
var (

0 commit comments

Comments
 (0)