@@ -3,8 +3,8 @@ package token_transfer
3
3
import (
4
4
"github.com/stellar/go/amount"
5
5
"github.com/stellar/go/ingest"
6
- "github.com/stellar/go/ingest/address"
7
- "github.com/stellar/go/ingest/asset"
6
+ addressProto "github.com/stellar/go/ingest/address"
7
+ assetProto "github.com/stellar/go/ingest/asset"
8
8
"github.com/stellar/go/support/errors"
9
9
"github.com/stellar/go/xdr"
10
10
"io"
@@ -120,19 +120,19 @@ func generateFeeEvent(tx ingest.LedgerTransaction) ([]*TokenTransferEvent, error
120
120
postBalance := change .Post .Data .MustAccount ().Balance
121
121
accId := change .Pre .Data .MustAccount ().AccountId
122
122
amt := amount .String (postBalance - preBalance )
123
- event := NewFeeEvent (tx .Ledger .LedgerSequence (), tx .Ledger .ClosedAt (), tx .Hash .HexString (), addressFromAccountId (accId ), amt , asset .NewNativeAsset ())
123
+ event := NewFeeEvent (tx .Ledger .LedgerSequence (), tx .Ledger .ClosedAt (), tx .Hash .HexString (), protoAddressFromAccountId (accId ), amt , assetProto .NewNativeAsset ())
124
124
events = append (events , event )
125
125
}
126
126
return events , nil
127
127
}
128
128
129
129
// Function stubs
130
130
func accountCreateEvents (tx ingest.LedgerTransaction , opIndex uint32 , op xdr.Operation ) ([]* TokenTransferEvent , error ) {
131
- srcAcc := sourceAccount (tx , op )
131
+ srcAcc := operationSourceAccount (tx , op )
132
132
createAccountOp := op .Body .MustCreateAccountOp ()
133
133
destAcc , amt := createAccountOp .Destination , amount .String (createAccountOp .StartingBalance )
134
134
meta := NewEventMeta (tx , & opIndex , nil )
135
- event := NewTransferEvent (meta , addressFromAccount (srcAcc ), addressFromAccountId (destAcc ), amt , asset .NewNativeAsset ())
135
+ event := NewTransferEvent (meta , protoAddressFromAccount (srcAcc ), protoAddressFromAccountId (destAcc ), amt , assetProto .NewNativeAsset ())
136
136
return []* TokenTransferEvent {event }, nil // Just one event will be generated
137
137
}
138
138
@@ -142,41 +142,47 @@ func mergeAccountEvents(tx ingest.LedgerTransaction, opIndex uint32, op xdr.Oper
142
142
if res .SourceAccountBalance == nil {
143
143
return nil , nil
144
144
}
145
- srcAcc := sourceAccount (tx , op )
145
+ srcAcc := operationSourceAccount (tx , op )
146
146
destAcc := op .Body .MustDestination ()
147
147
amt := amount .String (* res .SourceAccountBalance )
148
148
meta := NewEventMeta (tx , & opIndex , nil )
149
- event := NewTransferEvent (meta , addressFromAccount (srcAcc ), addressFromAccount (destAcc ), amt , asset .NewNativeAsset ())
149
+ event := NewTransferEvent (meta , protoAddressFromAccount (srcAcc ), protoAddressFromAccount (destAcc ), amt , assetProto .NewNativeAsset ())
150
150
return []* TokenTransferEvent {event }, nil // Just one event will be generated
151
151
}
152
152
153
+ // Depending on the asset - if src or dest account == issuer of asset, then mint/burn event, else transfer event
154
+ func mintOrBurnOrTransferEvent (asset xdr.Asset , srcAcc xdr.MuxedAccount , destAcc xdr.MuxedAccount , amt string , meta * EventMeta ) * TokenTransferEvent {
155
+ protoAsset := assetProto .NewIssuedAsset (asset .GetCode (), asset .GetIssuer ())
156
+ var event * TokenTransferEvent
157
+ sAddress := protoAddressFromAccount (srcAcc )
158
+ dAddress := protoAddressFromAccount (destAcc )
159
+ assetIssuerAccountId , _ := asset .GetIssuerAccountId ()
160
+ if assetIssuerAccountId .Equals (srcAcc .ToAccountId ()) {
161
+ // Mint event
162
+ event = NewMintEvent (meta , dAddress , amt , protoAsset )
163
+ } else if assetIssuerAccountId .Equals (destAcc .ToAccountId ()) {
164
+ // Burn event
165
+ event = NewBurnEvent (meta , sAddress , amt , protoAsset )
166
+ } else {
167
+ // Regular transfer
168
+ event = NewTransferEvent (meta , sAddress , dAddress , amt , protoAsset )
169
+ }
170
+ return event
171
+ }
172
+
153
173
func paymentEvents (tx ingest.LedgerTransaction , opIndex uint32 , op xdr.Operation ) ([]* TokenTransferEvent , error ) {
154
174
paymentOp := op .Body .MustPaymentOp ()
155
- srcAcc := sourceAccount (tx , op )
175
+ srcAcc := operationSourceAccount (tx , op )
156
176
destAcc := paymentOp .Destination
157
- sAddress := addressFromAccount (srcAcc )
158
- dAddress := addressFromAccount (destAcc )
159
177
amt := amount .String (paymentOp .Amount )
160
- var as * asset.Asset
161
178
meta := NewEventMeta (tx , & opIndex , nil )
179
+
162
180
var event * TokenTransferEvent
163
181
if paymentOp .Asset .IsNative () {
164
- as = asset .NewNativeAsset ()
165
- // If native asset, it is always a regular transfer
166
- event = NewTransferEvent (meta , sAddress , dAddress , amt , asset .NewNativeAsset ())
182
+ // If native assetProto, it is always a regular transfer
183
+ event = NewTransferEvent (meta , protoAddressFromAccount (srcAcc ), protoAddressFromAccount (destAcc ), amt , assetProto .NewNativeAsset ())
167
184
} else {
168
- as = asset .NewIssuedAsset (paymentOp .Asset .GetCode (), paymentOp .Asset .GetIssuer ())
169
- assetIssuerAccountId , _ := paymentOp .Asset .GetIssuerAccountId ()
170
- if assetIssuerAccountId .Equals (srcAcc .ToAccountId ()) {
171
- // Mint event
172
- event = NewMintEvent (meta , dAddress , amt , as )
173
- } else if assetIssuerAccountId .Equals (destAcc .ToAccountId ()) {
174
- // Burn event
175
- event = NewBurnEvent (meta , sAddress , amt , as )
176
- } else {
177
- // Regular transfer
178
- event = NewTransferEvent (meta , sAddress , dAddress , amt , as )
179
- }
185
+ event = mintOrBurnOrTransferEvent (paymentOp .Asset , srcAcc , destAcc , amt , meta )
180
186
}
181
187
return []* TokenTransferEvent {event }, nil
182
188
}
@@ -234,7 +240,7 @@ func pathPaymentStrictReceiveEvents(tx ingest.LedgerTransaction, opIndex uint32,
234
240
}
235
241
236
242
// Helper functions
237
- func sourceAccount (tx ingest.LedgerTransaction , op xdr.Operation ) xdr.MuxedAccount {
243
+ func operationSourceAccount (tx ingest.LedgerTransaction , op xdr.Operation ) xdr.MuxedAccount {
238
244
acc := op .SourceAccount
239
245
if acc != nil {
240
246
return * acc
@@ -243,35 +249,35 @@ func sourceAccount(tx ingest.LedgerTransaction, op xdr.Operation) xdr.MuxedAccou
243
249
return res
244
250
}
245
251
246
- func addressFromAccount (account xdr.MuxedAccount ) * address .Address {
247
- addr := & address .Address {}
252
+ func protoAddressFromAccount (account xdr.MuxedAccount ) * addressProto .Address {
253
+ addr := & addressProto .Address {}
248
254
switch account .Type {
249
255
case xdr .CryptoKeyTypeKeyTypeEd25519 :
250
- addr .AddressType = address .AddressType_ADDRESS_TYPE_ACCOUNT
256
+ addr .AddressType = addressProto .AddressType_ADDRESS_TYPE_ACCOUNT
251
257
case xdr .CryptoKeyTypeKeyTypeMuxedEd25519 :
252
- addr .AddressType = address .AddressType_ADDRESS_TYPE_MUXED_ACCOUNT
258
+ addr .AddressType = addressProto .AddressType_ADDRESS_TYPE_MUXED_ACCOUNT
253
259
}
254
260
addr .StrKey = account .Address ()
255
261
return addr
256
262
}
257
263
258
- func addressFromAccountId (account xdr.AccountId ) * address .Address {
259
- return & address .Address {
260
- AddressType : address .AddressType_ADDRESS_TYPE_ACCOUNT ,
264
+ func protoAddressFromAccountId (account xdr.AccountId ) * addressProto .Address {
265
+ return & addressProto .Address {
266
+ AddressType : addressProto .AddressType_ADDRESS_TYPE_ACCOUNT ,
261
267
StrKey : account .Address (),
262
268
}
263
269
}
264
270
265
- func addressFromLpHash (lpHash xdr.PoolId ) * address .Address {
266
- return & address .Address {
267
- AddressType : address .AddressType_ADDRESS_TYPE_LIQUIDITY_POOL ,
271
+ func protoAddressFromLpHash (lpHash xdr.PoolId ) * addressProto .Address {
272
+ return & addressProto .Address {
273
+ AddressType : addressProto .AddressType_ADDRESS_TYPE_LIQUIDITY_POOL ,
268
274
StrKey : xdr .Hash (lpHash ).HexString (), // replace with strkey
269
275
}
270
276
}
271
277
272
- func addressFromClaimableBalanceId (cb xdr.ClaimableBalanceId ) * address .Address {
273
- return & address .Address {
274
- AddressType : address .AddressType_ADDRESS_TYPE_LIQUIDITY_POOL ,
278
+ func protoAddressFromClaimableBalanceId (cb xdr.ClaimableBalanceId ) * addressProto .Address {
279
+ return & addressProto .Address {
280
+ AddressType : addressProto .AddressType_ADDRESS_TYPE_LIQUIDITY_POOL ,
275
281
StrKey : cb .MustV0 ().HexString (), //replace with strkey
276
282
}
277
283
}
0 commit comments