Examples

Basic Programs

Simple Addition

// Add two numbers (5 + 3)
let program = vec![
    OpCode::Push1 as u8, 5,  // Push 5 onto stack
    OpCode::Push1 as u8, 3,  // Push 3 onto stack
    OpCode::Add as u8,       // Add them together
    OpCode::Log as u8,       // Log result
    OpCode::Halt as u8       // Stop execution
];

This basic example demonstrates:

  • → Stack manipulation
  • → Arithmetic operations
  • → Program termination

Token Operations

Token Transfer

// Transfer SPL tokens
let program = vec![
    // Load accounts
    OpCode::Push1 as u8, 1,  // Token program
    OpCode::Push1 as u8, 2,  // Source account
    OpCode::Push1 as u8, 3,  // Destination account
    OpCode::Push1 as u8, 4,  // Authority
    
    // Amount (50 tokens)
    OpCode::Push8 as u8, 
    50, 0, 0, 0, 0, 0, 0, 0,
    
    // Execute transfer
    OpCode::SPLOp as u8,
    SPLOperation::Transfer as u8,
    
    OpCode::Halt as u8
];

This example shows:

  • → SPL token integration
  • → Account management
  • → Multi-byte operations

Smart Contracts

On-Chain Vault

// Simple vault program
let program = vec![
    // Initialize vault
    OpCode::Push1 as u8, 0x01,  // Vault account
    OpCode::Push1 as u8, 0x00,  // Load init flag
    OpCode::Load as u8,
    OpCode::JumpI as u8,        // Skip if initialized
    
    // Set initialization flag
    OpCode::Push1 as u8, 0x01,
    OpCode::Push1 as u8, 0x00,
    OpCode::Store as u8,
    
    // Handle deposit/withdraw
    OpCode::Push1 as u8, 0x02,  // Action type
    OpCode::JumpI as u8,        // Branch on action
    
    OpCode::Halt as u8
];

This contract demonstrates:

  • → State management
  • → Control flow
  • → Memory operations

Advanced Usage

Oracle Integration

// Price feed oracle
let program = vec![
    // Get latest price
    OpCode::Push1 as u8, 1,     // Oracle account
    OpCode::Load as u8,         // Load price data
    
    // Validate timestamp
    OpCode::Push8 as u8,        // Current time
    0, 0, 0, 0, 0, 0, 0, 0,    // (filled at runtime)
    OpCode::Sub as u8,
    
    // Check staleness
    OpCode::Push8 as u8,        // Max age
    60, 0, 0, 0, 0, 0, 0, 0,   // 60 seconds
    OpCode::GT as u8,
    OpCode::JumpI as u8,        // Revert if stale
    
    // Use price data
    OpCode::MulDiv as u8,       // Price calculations
    
    OpCode::Halt as u8
];

This advanced example shows:

  • → External data integration
  • → Time-based validation
  • → Complex calculations