Saltar al contenido principal

Recuperar eventos de transferencia de tokens de un ledger

Este ejemplo obtiene un ledger específico de Stellar y usa el Procesador de Transferencia de Tokens para extraer todos los eventos de movimiento de tokens de él. El código procesa cada evento, los categoriza por tipo (transferencias, creaciones, quemas, recuperaciones, tarifas) e imprime tanto los detalles individuales de cada evento como estadísticas resumidas. Esto demuestra el uso básico de EventsFromLedger() para analizar toda la actividad de activos dentro de un solo ledger.

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)
}