forked from hashgraph/hedera-sdk-go
/
ethereum_transaction_data.go
115 lines (92 loc) · 2.33 KB
/
ethereum_transaction_data.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
package hedera
import (
"encoding/json"
"github.com/pkg/errors"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/rlp"
)
type EthereumTransactionData struct {
eip1559 *types.DynamicFeeTx
legacy *types.LegacyTx
}
func EthereumTransactionDataFromBytes(b []byte) (*EthereumTransactionData, error) {
var transactionData EthereumTransactionData
if b[0] == 2 {
byt := b
byt = append(byt[:0], byt[0+1:]...)
err := rlp.DecodeBytes(byt, &transactionData.eip1559)
if err != nil {
return nil, err
}
return &transactionData, nil
}
err := rlp.DecodeBytes(b, &transactionData.legacy)
if err != nil {
return nil, err
}
return &transactionData, nil
}
func (ethereumTxData *EthereumTransactionData) ToBytes() ([]byte, error) {
var byt []byte
var err error
if ethereumTxData.eip1559 != nil {
byt, err = rlp.EncodeToBytes(ethereumTxData.eip1559)
if err != nil {
return []byte{}, err
}
byt = append([]byte{2}, byt...)
return byt, nil
}
byt, err = rlp.EncodeToBytes(ethereumTxData.legacy)
if err != nil {
return []byte{}, err
}
return byt, nil
}
func (ethereumTxData *EthereumTransactionData) _GetData() []byte {
if ethereumTxData.eip1559 != nil {
return ethereumTxData.eip1559.Data
}
return ethereumTxData.legacy.Data
}
func (ethereumTxData *EthereumTransactionData) _SetData(data []byte) *EthereumTransactionData {
if ethereumTxData.eip1559 != nil {
ethereumTxData.eip1559.Data = data
return ethereumTxData
}
ethereumTxData.legacy.Data = data
return ethereumTxData
}
func (ethereumTxData *EthereumTransactionData) ToJson() ([]byte, error) {
var byt []byte
var err error
if ethereumTxData.eip1559 != nil {
byt, err = json.Marshal(ethereumTxData.eip1559)
if err != nil {
return []byte{}, err
}
return byt, nil
}
byt, err = json.Marshal(ethereumTxData.legacy)
if err != nil {
return []byte{}, err
}
return byt, nil
}
func EthereumTransactionDataFromJson(b []byte) (*EthereumTransactionData, error) {
var eip1559 types.DynamicFeeTx
var leg types.LegacyTx
err := json.Unmarshal(b, &eip1559)
if err != nil {
err = json.Unmarshal(b, &leg)
if err != nil {
return nil, errors.New("Json bytes are neither eip1559 or legacy format")
}
return &EthereumTransactionData{
legacy: &leg,
}, nil
}
return &EthereumTransactionData{
eip1559: &eip1559,
}, nil
}