Saltar al contenido principal

Ejemplos de uso

Esta sección contiene ejemplos de cómo puede usarse Token Transfer Processor en la lógica de tu aplicación

Requisitos previos

Tienes un módulo go existente en el directorio actual o crea un nuevo módulo localmente para este ejercicio de ejemplo.

go mod init example/ttp_processor

Incluye el SDK de Stellar Ingest en el módulo de tu aplicación Go que contiene el Procesador de Transferencias de Token.

go get github.com/stellar/go-stellar-sdk@latest
go mod tidy

Código auxiliar

Esta sección contiene algo de código auxiliar que se usará en todos los ejemplos.

package main

import (
"context"
"fmt"

"github.com/stellar/go-stellar-sdk/ingest/ledgerbackend"
"github.com/stellar/go-stellar-sdk/processors/token_transfer"
"github.com/stellar/go-stellar-sdk/support/log"
"github.com/stellar/go-stellar-sdk/xdr"

"google.golang.org/protobuf/encoding/protojson"
)

func panicIf(err error) {
if err != nil {
panic(err)
}
}

// fetchLedgerFromRPC retrieves a ledger using RPCLedgerBackend
func fetchLedgerFromRPC(ledgerSeq uint32) xdr.LedgerCloseMeta {
ctx := context.Background()

// Using a publicly hosted RPC instance
endpoint := "https://mainnet.sorobanrpc.com"

// Configure the RPC Ledger Backend
backend := ledgerbackend.NewRPCLedgerBackend(ledgerbackend.RPCLedgerBackendOptions{
RPCServerURL: endpoint,
})
defer backend.Close()

// Prepare an unbounded range starting from the latest ledger
if err := backend.PrepareRange(ctx, ledgerbackend.BoundedRange(ledgerSeq, ledgerSeq)); err != nil {
log.Fatalf("Failed to prepare range: %v", err)
}

ledger, err := backend.GetLedger(ctx, ledgerSeq)
panicIf(err)
return ledger
}

func printProtoEvent(event *token_transfer.TokenTransferEvent) {
jsonBytes, _ := protojson.MarshalOptions{
Multiline: true,
EmitDefaultValues: true,
Indent: " ",
}.Marshal(event)
fmt.Printf("### Event Type : %v\n", event.GetEventType())
fmt.Println(string(jsonBytes))
}