-
Notifications
You must be signed in to change notification settings - Fork 63
/
transactions.go
172 lines (142 loc) · 3.87 KB
/
transactions.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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
package core
import (
"math/big"
"github.com/tonkeeper/tongo/boc"
"github.com/tonkeeper/tongo/abi"
"github.com/tonkeeper/tongo/tlb"
"github.com/tonkeeper/tongo"
)
type TransactionID struct {
Hash tongo.Bits256
Lt uint64
Account tongo.AccountID
}
// TransactionType stands for transaction kind from [4.2.4] from the TON whitepaper.
type TransactionType string
const (
OrdinaryTx TransactionType = "TransOrd"
TickTockTx TransactionType = "TransTickTock"
SplitPrepareTx TransactionType = "TransSplitPrepare"
SplitInstallTx TransactionType = "TransSplitInstall"
MergePrepareTx TransactionType = "TransMergePrepare"
MergeInstallTx TransactionType = "TransMergeInstall"
StorageTx TransactionType = "TransStorage"
)
type StateUpdate struct {
OldHash tongo.Bits256
NewHash tongo.Bits256
}
type TxComputeSkipReason = tlb.ComputeSkipReason
type TxAccStatusChange = tlb.AccStatusChange
type TxComputePhase struct {
Skipped bool
SkipReason TxComputeSkipReason
Success bool
GasFees uint64
GasUsed big.Int
VmSteps uint32
ExitCode int32
}
type TxStoragePhase struct {
StorageFeesCollected uint64
StorageFeesDue *uint64
StatusChange TxAccStatusChange
}
type TxCreditPhase struct {
DueFeesCollected uint64
CreditGrams uint64
}
type TxActionPhase struct {
Success bool
ResultCode int32
TotalActions uint16
SkippedActions uint16
FwdFees uint64
TotalFees uint64
}
type TxBouncePhase struct {
Type BouncePhaseType
}
type BouncePhaseType string
const (
BounceNegFunds BouncePhaseType = "TrPhaseBounceNegfunds"
BounceNoFunds BouncePhaseType = "TrPhaseBounceNofunds "
BounceOk BouncePhaseType = "TrPhaseBounceOk"
)
type Transaction struct {
TransactionID
Type TransactionType
Success bool
Utime int64
InMsg *Message
OutMsgs []Message
BlockID tongo.BlockID
OrigStatus tlb.AccountStatus
EndStatus tlb.AccountStatus
PrevTransHash tongo.Bits256
PrevTransLt uint64
StateHashUpdate tlb.HashUpdate
ComputePhase *TxComputePhase
StoragePhase *TxStoragePhase
CreditPhase *TxCreditPhase
ActionPhase *TxActionPhase
BouncePhase *TxBouncePhase
Aborted bool
Destroyed bool
// StorageFee collected during the Storage Phase.
StorageFee int64
// TotalFee is the original total_fee of a transaction directly from the blockchain.
TotalFee int64
}
type MessageID struct {
CreatedLt uint64
Source *tongo.AccountID
Destination *tongo.AccountID
}
func (m MessageID) IsExternal() bool {
return m.Source == nil
}
func (m Message) IsEmission() bool {
return m.Source != nil && m.Source.IsZero() && m.Source.Workchain == -1 && m.Bounced == false
}
type MsgType string
const (
IntMsg MsgType = "IntMsg"
ExtInMsg MsgType = "ExtInMsg"
ExtOutMsg MsgType = "ExtOutMsg"
)
type Message struct {
MessageID
MsgType MsgType
SourceExtern *ExternalAddress
DestinationExtern *ExternalAddress
IhrDisabled bool
Bounce bool
Bounced bool
Value int64
FwdFee int64
IhrFee int64
ImportFee int64
Init []byte
InitInterfaces []abi.ContractInterface
Body []byte
CreatedAt uint32
// OpCode is the first 32 bits of a message body indicating a possible operation.
OpCode *uint32
DecodedBody *DecodedMessageBody
}
// DecodedMessageBody contains a message body decoded by tongo.abi package.
type DecodedMessageBody struct {
Operation string
Value any
}
// ExternalAddress represents either the source or destination address of
// external inbound(ExtInMsg) or external outbound(ExtOutMsg) message correspondingly.
type ExternalAddress = boc.BitString
func externalAddressFromTlb(address tlb.MsgAddress) *ExternalAddress {
if address.SumType != "AddrExtern" {
return nil
}
external := address.AddrExtern.ExternalAddress
return &external
}