> ## Documentation Index
> Fetch the complete documentation index at: https://developers.stellar.org/llms.txt
> Use this file to discover all available pages before exploring further.

# 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.

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
go mod init example/ttp_processor
```

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

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
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.

```go theme={"theme":{"light":"github-light","dark":"github-dark"}}
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))
}
```
