Skip to main content

Example Usages

This section contains examples of how Token Transfer Processor can be used in your application logic

Prerequisites

You have an existing go module in current directory or create a new module locally for this example exercise.

go mod init example/ttp_processor

Include the Stellar Ingest SDK into your go application module which contains the Token Transfer Processor.

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

Helper Code

This section contains some helper code that will be used in all the examples.

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