Skip to content

Commit 83d4116

Browse files
authored
feat: ledger tx id on offer-based transfers (#347)
1 parent 428e725 commit 83d4116

2 files changed

Lines changed: 27 additions & 3 deletions

File tree

pkg/indexer/engine/decoder.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@ func NewOfferDecoder(
182182
// TransferOffer CreateArguments: {operator, provider, transfer{...}}.
183183
// Receiver/sender/amount/instrumentId all live inside the nested transfer record.
184184
transfer.Status = indexer.TransferStatusPending
185+
transfer.TxID = tx.UpdateID
185186
transfer.ToPartyID = ev.NestedPartyField("transfer", "receiver")
186187
transfer.FromPartyID = ev.NestedPartyField("transfer", "sender")
187188
transfer.Amount = ev.NestedNumericField("transfer", "amount")

pkg/indexer/engine/decoder_test.go

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
package engine
44

55
import (
6+
"maps"
67
"testing"
78
"time"
89

@@ -45,9 +46,7 @@ func makeTransferEvent(contractID string, fromParty, toParty streaming.FieldValu
4546
"timestamp": streaming.MakeTimestampField(time.Unix(1_700_000_000, 0)),
4647
"meta": streaming.MakeNoneField(),
4748
}
48-
for k, v := range extra {
49-
fields[k] = v
50-
}
49+
maps.Copy(fields, extra)
5150
return streaming.NewLedgerEvent(contractID, "pkg-id", tokenTransferEventModule, tokenTransferEventEntity, true, fields)
5251
}
5352

@@ -115,6 +114,30 @@ func TestOfferDecoder_ArchiveChoiceMapsTerminalStatus(t *testing.T) {
115114
}
116115
}
117116

117+
func TestOfferDecoder_CreateCarriesLedgerTxID(t *testing.T) {
118+
dec := NewOfferDecoder("pkg-id", NewNopMetrics(), zap.NewNop())
119+
120+
ev := streaming.NewLedgerEvent("offer-1", "pkg-id", transferOfferModule, transferOfferEntity, true,
121+
map[string]streaming.FieldValue{
122+
"transfer": streaming.MakeRecordField(map[string]streaming.FieldValue{
123+
"sender": streaming.MakePartyField(testSender),
124+
"receiver": streaming.MakePartyField(testRecipient),
125+
"amount": streaming.MakeNumericField(testAmount),
126+
"instrumentId": streaming.MakeRecordField(map[string]streaming.FieldValue{
127+
"admin": streaming.MakePartyField(testInstrumentAdmin),
128+
"id": streaming.MakeTextField(testInstrumentID),
129+
}),
130+
}),
131+
})
132+
133+
tr, ok := dec(makeTx(1), ev)
134+
require.True(t, ok)
135+
assert.Equal(t, indexer.TransferStatusPending, tr.Status)
136+
assert.Equal(t, "update-1", tr.TxID)
137+
assert.Equal(t, testSender, tr.FromPartyID)
138+
assert.Equal(t, testRecipient, tr.ToPartyID)
139+
}
140+
118141
func TestHoldingDecoder_LockField(t *testing.T) {
119142
dec := NewHoldingDecoder("pkg-id", zap.NewNop())
120143

0 commit comments

Comments
 (0)