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

//filename: go.mod

require (
// This currently points to a RC release of Protocol-23.
// Please update it to use the latest stable version once P23 is released to pubnet.
github.com/stellar/go horizonclient-v23.0.0-rc
)

Opcionalmente, puedes ejecutar go mod tidy en tu base de código para obtener la última versión del paquete ingest.

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/ingest/ledgerbackend"
"github.com/stellar/go/processors/token_transfer"
"github.com/stellar/go/support/log"
"github.com/stellar/go/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))
}