Skip to main content

Fuel Development

Index Fuel blockchain data including transactions, receipts, and smart contract interactions on the Fuel network.

Getting Started

1

Install Dependencies

npm install @subsquid/fuel-processor @subsquid/typeorm-store
2

Configure Processor

import \{ FuelBatchProcessor \} from '@subsquid/fuel-processor'

const processor = new FuelBatchProcessor()
  .setGateway('https://v2.archive.subsquid.io/network/fuel-mainnet')
  .setRpcEndpoint('https://mainnet.fuel.network/v1/graphql')
3

Add Data Sources

Configure what data to index from the Fuel blockchain

Key Features

UTXO Model

Handle Fuel’s UTXO-based transaction model

Sway Contracts

Index Sway smart contract interactions

Receipts

Process transaction receipts and logs

Predicates

Monitor predicate executions and validations

Basic Processor Setup

import \{ FuelBatchProcessor \} from '@subsquid/fuel-processor'
import \{ TypeormDatabase \} from '@subsquid/typeorm-store'

const processor = new FuelBatchProcessor()
  .setGateway('https://v2.archive.subsquid.io/network/fuel-mainnet')
  .setRpcEndpoint('https://mainnet.fuel.network/v1/graphql')
  .addReceipt({
    type: ['TRANSFER', 'LOG_DATA', 'CALL']
  })
  .setFields({
    receipt: {
      receiptType: true,
      data: true,
      amount: true,
      assetId: true
    },
    transaction: {
      id: true,
      gasUsed: true,
      status: true
    },
    block: {
      height: true,
      timestamp: true
    }
  })

const db = new TypeormDatabase()

processor.run(db, async (ctx) => {
  for (let block of ctx.blocks) {
    for (let receipt of block.receipts) {
      // Process Fuel receipts
console.log(`Receipt type: "$\{receipt.receiptType\}`)"
    }
  }
})

Receipt Types

Fuel uses receipts to represent various operations:

Transfer Receipts

processor.addReceipt({
  type: ['TRANSFER'],
  assetId: ['0x...'] // Specific asset ID
})

Log Data Receipts

processor.addReceipt({
  type: ['LOG_DATA'],
  contractId: ['0x...'] // Specific contract
})

Call Receipts

processor.addReceipt({
  type: ['CALL'],
  contractId: ['0x...']
})

Data Structures

Receipt Structure

interface Receipt {
  receiptType: 'TRANSFER' | 'LOG_DATA' | 'CALL' | 'RETURN' | 'REVERT'
  data?: string
  amount?: bigint
  assetId?: string
  contractId?: string
  to?: string
  from?: string
}

Transaction Structure

interface Transaction {
  id: string
  gasUsed: bigint
  gasPrice: bigint
  status: 'SUCCESS' | 'FAILURE'
  receipts: Receipt[]
}

Common Use Cases

Asset Transfers

// Index native asset transfers
processor.addReceipt({
  type: ['TRANSFER'],
  assetId: ['0x0000000000000000000000000000000000000000000000000000000000000000'] // ETH
})

Contract Interactions

// Monitor specific contract calls
processor.addReceipt({
  type: ['CALL', 'LOG_DATA'],
  contractId: ['0x...']
})

Token Operations

// Track custom token transfers
processor.addReceipt({
  type: ['TRANSFER'],
  assetId: ['0x...'] // Custom token asset ID
})

Performance Optimization

Receipt Filtering

Filter by specific receipt types and contracts

Asset Targeting

Focus on specific assets or contracts

Batch Processing

Process receipts in optimized batches

Efficient Storage

Optimize data models for Fuel’s UTXO structure

Network Information

Mainnet

  • Gateway: https://v2.archive.subsquid.io/network/fuel-mainnet
  • RPC: https://mainnet.fuel.network/v1/graphql
  • Block Time: ~1 second
  • Finality: Near-instant

Testnet

  • Gateway: https://v2.archive.subsquid.io/network/fuel-testnet
  • RPC: https://testnet.fuel.network/v1/graphql

Fuel-Specific Considerations

UTXO Model

  • Transactions consume inputs and produce outputs
  • No account-based state like Ethereum
  • Each transaction is atomic

Asset Management

  • Native multi-asset support
  • Each asset has a unique asset ID
  • ETH is represented as asset ID 0x00...00

Gas Model

  • Gas is paid in the base asset (ETH)
  • Predictable gas costs
  • No gas price auctions

Examples

Best Practices

  • Understand Fuel’s UTXO model for proper data modeling
  • Use receipt filtering to reduce data processing overhead
  • Handle different receipt types appropriately
  • Monitor gas usage patterns for optimization
  • Implement proper error handling for failed transactions

Next Steps