Skip to content

Commit b2219fd

Browse files
Add Transfers to TzKT API
1 parent 4f0da6f commit b2219fd

File tree

5 files changed

+82
-6
lines changed

5 files changed

+82
-6
lines changed

tzkt/api/data.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,3 +340,26 @@ func (props *AdditionalProperties) UnmarshalJSON(data []byte) error {
340340
props.Value = &JSONSchema{}
341341
return json.Unmarshal(data, props.Value)
342342
}
343+
344+
// Transfer -
345+
type Transfer struct {
346+
ID uint64 `json:"id"`
347+
Level uint64 `json:"level"`
348+
Timestamp time.Time `json:"timestamp"`
349+
Token Token `json:"token"`
350+
From *Address `json:"from,omitempty"`
351+
To *Address `json:"to,omitempty"`
352+
Amount string `json:"amount"`
353+
TransactionID *uint64 `json:"transactionId,omitempty"`
354+
OriginationID *uint64 `json:"originationId,omitempty"`
355+
MigrationID *uint64 `json:"migrationId,omitempty"`
356+
}
357+
358+
// Token -
359+
type Token struct {
360+
ID uint64 `json:"id"`
361+
Contract Address `json:"contract"`
362+
TokenID string `json:"tokenId"`
363+
Standard string `json:"standard"`
364+
Metadata stdJSON.RawMessage `json:"metadata,omitempty"`
365+
}

tzkt/api/tokens.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package api
2+
3+
import "context"
4+
5+
// GetTokenTransfers -
6+
func (tzkt *API) GetTokenTransfers(ctx context.Context, filters map[string]string) (transfers []Transfer, err error) {
7+
err = tzkt.json(ctx, "/v1/tokens/transfers", filters, &transfers)
8+
return
9+
}

tzkt/events/consts.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ package events
22

33
// Methods
44
const (
5-
MethodHead = "SubscribeToHead"
6-
MethodBlocks = "SubscribeToBlocks"
7-
MethodOperations = "SubscribeToOperations"
8-
MethodBigMap = "SubscribeToBigMaps"
9-
MethodAccounts = "SubscribeToAccounts"
5+
MethodHead = "SubscribeToHead"
6+
MethodBlocks = "SubscribeToBlocks"
7+
MethodOperations = "SubscribeToOperations"
8+
MethodBigMap = "SubscribeToBigMaps"
9+
MethodAccounts = "SubscribeToAccounts"
10+
MethodTokenTransfers = "SubscribeToTokenTransfers"
1011
)
1112

1213
// Channels
@@ -16,6 +17,7 @@ const (
1617
ChannelOperations = "operations"
1718
ChannelBigMap = "bigmaps"
1819
ChannelAccounts = "accounts"
20+
ChannelTransfers = "transfers"
1921
)
2022

2123
// operation kinds

tzkt/events/message.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,3 +269,26 @@ type QuoteShort struct {
269269
KRW decimal.Decimal `json:"krw,omitempty"`
270270
ETH decimal.Decimal `json:"eth,omitempty"`
271271
}
272+
273+
// Transfer -
274+
type Transfer struct {
275+
ID uint64 `json:"id"`
276+
Level uint64 `json:"level"`
277+
Timestamp time.Time `json:"timestamp"`
278+
Token Token `json:"token"`
279+
From *Alias `json:"from,omitempty"`
280+
To *Alias `json:"to,omitempty"`
281+
Amount string `json:"amount"`
282+
TransactionID *uint64 `json:"transactionId,omitempty"`
283+
OriginationID *uint64 `json:"originationId,omitempty"`
284+
MigrationID *uint64 `json:"migrationId,omitempty"`
285+
}
286+
287+
// Token -
288+
type Token struct {
289+
ID uint64 `json:"id"`
290+
Contract Alias `json:"contract"`
291+
TokenID string `json:"tokenId"`
292+
Standard string `json:"standard"`
293+
Metadata stdJSON.RawMessage `json:"metadata,omitempty"`
294+
}

tzkt/events/tzkt.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ func (tzkt *TzKT) SubscribeToBigMaps(ptr *int64, contract, path string, tags ...
111111
return tzkt.subscribe(MethodBigMap, args)
112112
}
113113

114-
// SubscribeToBigMaps - subscribe to accounts channel. Sends touched accounts (affected by any operation in any way)..
114+
// SubscribeToAccounts - subscribe to accounts channel. Sends touched accounts (affected by any operation in any way)..
115115
func (tzkt *TzKT) SubscribeToAccounts(addresses ...string) error {
116116
args := make(map[string]interface{})
117117
if len(addresses) > 0 {
@@ -120,6 +120,21 @@ func (tzkt *TzKT) SubscribeToAccounts(addresses ...string) error {
120120
return tzkt.subscribe(MethodAccounts, args)
121121
}
122122

123+
// SubscribeToTokenTransfers - subscribe to transfers channel. Sends token transfers.
124+
func (tzkt *TzKT) SubscribeToTokenTransfers(account, contract, tokenID string) error {
125+
args := make(map[string]interface{})
126+
if account != "" {
127+
args["account"] = account
128+
}
129+
if contract != "" {
130+
args["contract"] = contract
131+
}
132+
if tokenID != "" {
133+
args["tokenID"] = tokenID
134+
}
135+
return tzkt.subscribe(MethodTokenTransfers, args)
136+
}
137+
123138
func (tzkt *TzKT) subscribe(channel string, args ...interface{}) error {
124139
tzkt.invokationID += 1
125140
msg := signalr.NewInvocation(fmt.Sprintf("%d", tzkt.invokationID), channel, args...)
@@ -214,6 +229,10 @@ func parseData(channel string, data []byte) (interface{}, error) {
214229
return head, err
215230
case ChannelOperations:
216231
return parseOperations(data)
232+
case ChannelTransfers:
233+
var transfer []Transfer
234+
err := json.Unmarshal(data, &transfer)
235+
return transfer, err
217236
default:
218237
return nil, errors.Errorf("unknown channel: %s", channel)
219238
}

0 commit comments

Comments
 (0)