Retrieve token transfer events from a ledger
This example fetches a specific Stellar ledger and uses the Token Transfer Processor to extract all token movement events from it. The code processes each event, categorizes them by type (transfers, mints, burns, clawbacks, fees), and prints both the individual event details and summary statistics. This demonstrates the basic usage of EventsFromLedger() to analyze all asset activity within a single ledger.
- Go
package main
import (
"fmt"
"strings"
"github.com/stellar/go/network"
"github.com/stellar/go/processors/token_transfer"
)
func main() {
ledgerSeq := uint32(58155263)
ledger := fetchLedgerFromRPC(ledgerSeq)
ttp := token_transfer.NewEventsProcessor(network.PublicNetworkPassphrase)
// Process events from a single ledger
events, err := ttp.EventsFromLedger(ledger)
panicIf(err)
// Statistics counters
var transferCount, mintCount, burnCount, clawbackCount, feeCount, refundCount int
// Process events to analyze token transfers
for _, event := range events {
switch {
case event.GetTransfer() != nil:
transfer := event.GetTransfer()
fmt.Printf("Transfer: %s -> %s, Amount: %s, Asset: %s\n",
transfer.From, transfer.To, transfer.Amount, transfer.Asset)
transferCount++
case event.GetMint() != nil:
mint := event.GetMint()
fmt.Printf("Mint: %s, Amount: %s, Asset: %s\n",
mint.To, mint.Amount, mint.Asset)
mintCount++
case event.GetBurn() != nil:
burn := event.GetBurn()
fmt.Printf("Burn: %s, Amount: %s, Asset: %s\n",
burn.From, burn.Amount, burn.Asset)
burnCount++
case event.GetClawback() != nil:
clawback := event.GetClawback()
fmt.Printf("Clawback: %s, Amount: %s, Asset: %s\n",
clawback.From, clawback.Amount, clawback.Asset)
clawbackCount++
case event.GetFee() != nil:
fee := event.GetFee()
if strings.HasPrefix(fee.Amount, "-") {
fmt.Printf("Fee Refund: %s, Amount: %s, Asset: %s\n",
fee.From, fee.Amount, fee.Asset)
refundCount++
} else {
fmt.Printf("Fee: %s, Amount: %s, Asset: %s\n",
fee.From, fee.Amount, fee.Asset)
feeCount++
}
}
}
// Print statistics
fmt.Printf("\n--- Ledger %d Statistics ---\n", ledgerSeq)
fmt.Printf("Total Events: %d\n", len(events))
fmt.Printf("Transfers: %d\n", transferCount)
fmt.Printf("Mints: %d\n", mintCount)
fmt.Printf("Burns: %d\n", burnCount)
fmt.Printf("Clawbacks: %d\n", clawbackCount)
fmt.Printf("Fees: %d\n", feeCount)
fmt.Printf("Refunds: %d\n", refundCount)
}