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

# Retrieve token transfer events from a ledger

> This example fetches a specific Stellar ledger and uses the Token Transfer Processor to extract all token movement events from it.

This example fetches a specific Stellar ledger and uses the Token Transfer Processor to extract all token movement events from it. The code processes each event, categorizes them by type (transfers, mints, burns, clawbacks, fees), and prints both the individual event details and summary statistics. This demonstrates the basic usage of EventsFromLedger() to analyze all asset activity within a single ledger.

```go theme={"theme":{"light":"github-light","dark":"github-dark"}}
package main

import (
	"fmt"
	"strings"

	"github.com/stellar/go-stellar-sdk/network"
	"github.com/stellar/go-stellar-sdk/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)
}
```
