-
Notifications
You must be signed in to change notification settings - Fork 1
/
evmxgo.go
127 lines (111 loc) · 4.11 KB
/
evmxgo.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package types
import (
"reflect"
log "github.com/assetcloud/chain/common/log/log15"
"github.com/assetcloud/chain/types"
)
/*
* 交易相关类型定义
* 交易action通常有对应的log结构,用于交易回执日志记录
* 每一种action和log需要用id数值和name名称加以区分
*/
// action类型id和name,这些常量可以自定义修改
const (
TyUnknowAction = iota + 100
TyTransferAction
TyWithdrawAction
TyTransferToExecAction
TyMintAction
TyBurnAction
NameTransferAction = "Transfer"
NameWithdrawAction = "Withdraw"
NameTransferToExecAction = "TransferToExec"
NameMintAction = "Mint"
NameBurnAction = "Burn"
NameMintMapAction = "MintMap"
NameBurnMapAction = "BurnMap"
)
// log类型id值
const (
TyUnknownLog = iota + 100
TyTransferLog
TyWithdrawLog
TyTransferToExecLog
TyMintLog
TyBurnLog
)
var (
//EvmxgoX 执行器名称定义
EvmxgoX = "evmxgo"
//定义actionMap
actionMap = map[string]int32{
NameTransferAction: TyTransferAction,
NameWithdrawAction: TyWithdrawAction,
NameTransferToExecAction: TyTransferToExecAction,
NameMintAction: TyMintAction,
NameBurnAction: TyBurnAction,
}
//定义log的id和具体log类型及名称,填入具体自定义log类型
logMap = map[int64]*types.LogInfo{
//LogID: {Ty: reflect.TypeOf(LogStruct), Name: LogName},
}
tlog = log.New("module", "evmxgo.types")
)
// init defines a register function
func init() {
types.AllowUserExec = append(types.AllowUserExec, []byte(EvmxgoX))
//注册合约启用高度
types.RegFork(EvmxgoX, InitFork)
types.RegExec(EvmxgoX, InitExecutor)
}
// InitFork defines register fork
func InitFork(cfg *types.ChainConfig) {
cfg.RegisterDappFork(EvmxgoX, "Enable", 0)
}
// InitExecutor defines register executor
func InitExecutor(cfg *types.ChainConfig) {
types.RegistorExecutor(EvmxgoX, NewType(cfg))
}
type evmxgoType struct {
types.ExecTypeBase
}
func NewType(cfg *types.ChainConfig) *evmxgoType {
c := &evmxgoType{}
c.SetChild(c)
c.SetConfig(cfg)
return c
}
// GetPayload 获取合约action结构
func (e *evmxgoType) GetPayload() types.Message {
return &EvmxgoAction{}
}
// GetTypeMap 获取合约action的id和name信息
func (e *evmxgoType) GetTypeMap() map[string]int32 {
return map[string]int32{
"Transfer": ActionTransfer,
"Withdraw": ActionWithdraw,
"TransferToExec": EvmxgoActionTransferToExec,
"Mint": EvmxgoActionMint,
"Burn": EvmxgoActionBurn,
NameMintMapAction: EvmxgoActionMintMap,
NameBurnMapAction: EvmxgoActionBurnMap,
}
}
// GetLogMap 获取合约log相关信息
func (e *evmxgoType) GetLogMap() map[int64]*types.LogInfo {
return map[int64]*types.LogInfo{
TyLogEvmxgoTransfer: {Ty: reflect.TypeOf(types.ReceiptAccountTransfer{}), Name: "LogTokenTransfer"},
TyLogEvmxgoDeposit: {Ty: reflect.TypeOf(types.ReceiptAccountTransfer{}), Name: "LogTokenDeposit"},
TyLogEvmxgoExecTransfer: {Ty: reflect.TypeOf(types.ReceiptExecAccountTransfer{}), Name: "LogTokenExecTransfer"},
TyLogEvmxgoExecWithdraw: {Ty: reflect.TypeOf(types.ReceiptExecAccountTransfer{}), Name: "LogTokenExecWithdraw"},
TyLogEvmxgoExecDeposit: {Ty: reflect.TypeOf(types.ReceiptExecAccountTransfer{}), Name: "LogTokenExecDeposit"},
TyLogEvmxgoExecFrozen: {Ty: reflect.TypeOf(types.ReceiptExecAccountTransfer{}), Name: "LogTokenExecFrozen"},
TyLogEvmxgoExecActive: {Ty: reflect.TypeOf(types.ReceiptExecAccountTransfer{}), Name: "LogTokenExecActive"},
TyLogEvmxgoGenesisTransfer: {Ty: reflect.TypeOf(types.ReceiptAccountTransfer{}), Name: "LogTokenGenesisTransfer"},
TyLogEvmxgoGenesisDeposit: {Ty: reflect.TypeOf(types.ReceiptExecAccountTransfer{}), Name: "LogTokenGenesisDeposit"},
TyLogEvmxgoMint: {Ty: reflect.TypeOf(ReceiptEvmxgoAmount{}), Name: "LogMintToken"},
TyLogEvmxgoBurn: {Ty: reflect.TypeOf(ReceiptEvmxgoAmount{}), Name: "LogBurnToken"},
TyLogEvmxgoMintMap: {Ty: reflect.TypeOf(ReceiptEvmxgoAmount{}), Name: "LogMintMapToken"},
TyLogEvmxgoBurnMap: {Ty: reflect.TypeOf(ReceiptEvmxgoAmount{}), Name: "LogBurnMapToken"},
}
}