/
bor_fee_log.go
110 lines (92 loc) · 2.04 KB
/
bor_fee_log.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
package core
import (
"github.com/holiman/uint256"
libcommon "github.com/ledgerwatch/erigon-lib/common"
"github.com/ledgerwatch/erigon/core/types"
"github.com/ledgerwatch/erigon/core/vm/evmtypes"
)
var transferLogSig = libcommon.HexToHash("0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4")
var transferFeeLogSig = libcommon.HexToHash("0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63")
var feeAddress = libcommon.HexToAddress("0x0000000000000000000000000000000000001010")
var zero = uint256.NewInt(0)
// AddTransferLog adds transfer log into state
func AddTransferLog(
state evmtypes.IntraBlockState,
sender,
recipient libcommon.Address,
amount,
input1,
input2,
output1,
output2 *uint256.Int,
) {
addTransferLog(
state,
transferLogSig,
sender,
recipient,
amount,
input1,
input2,
output1,
output2,
)
}
// AddFeeTransferLog adds transfer log into state
// Deprecating transfer log and will be removed in future fork. PLEASE DO NOT USE this transfer log going forward. Parameters won't get updated as expected going forward with EIP1559
func AddFeeTransferLog(
state evmtypes.IntraBlockState,
sender,
recipient libcommon.Address,
amount,
input1,
input2,
output1,
output2 *uint256.Int,
) {
addTransferLog(
state,
transferFeeLogSig,
sender,
recipient,
amount,
input1,
input2,
output1,
output2,
)
}
// addTransferLog adds transfer log into state
func addTransferLog(
state evmtypes.IntraBlockState,
eventSig libcommon.Hash,
sender,
recipient libcommon.Address,
amount,
input1,
input2,
output1,
output2 *uint256.Int,
) {
// ignore if amount is 0
if amount.Cmp(zero) <= 0 {
return
}
data := make([]byte, 32*5)
amount.WriteToSlice(data)
input1.WriteToSlice(data[32:])
input2.WriteToSlice(data[64:])
output1.WriteToSlice(data[96:])
output2.WriteToSlice(data[128:])
// add transfer log
state.AddLog(&types.Log{
Address: feeAddress,
Topics: []libcommon.Hash{
eventSig,
feeAddress.Hash(),
sender.Hash(),
recipient.Hash(),
},
Data: data,
})
}