Skip to main content

    Usage Examples

    Parse Transfer Events

    import { Event } from 'tevm'
    
    const transferEvent = new Event({
      type: "event",
      name: "Transfer",
      inputs: [
        { type: "address", name: "from", indexed: true },
        { type: "address", name: "to", indexed: true },
        { type: "uint256", name: "value" }
      ]
    })
    
    // Get logs from blockchain
    const logs = await provider.getLogs({
      address: tokenAddress,
      topics: [transferEvent.getSelector()]
    })
    
    // Decode each log
    const transfers = logs.map(log =>
      transferEvent.decodeLog(log.data, log.topics)
    )
    
    console.log(transfers)
    // [
    //   { from: "0x...", to: "0x...", value: 1000n },
    //   { from: "0x...", to: "0x...", value: 2000n }
    // ]
    

    Complex Event Types

    import { Event } from 'tevm'
    
    const swapEvent = new Event({
      type: "event",
      name: "Swap",
      inputs: [
        { type: "address", name: "sender", indexed: true },
        { type: "uint256", name: "amount0In" },
        { type: "uint256", name: "amount1In" },
        { type: "uint256", name: "amount0Out" },
        { type: "uint256", name: "amount1Out" },
        { type: "address", name: "to", indexed: true }
      ]
    })
    
    const decoded = swapEvent.decodeLog(log.data, log.topics)
    console.log({
      sender: decoded.sender,
      amount0In: decoded.amount0In,
      amount1In: decoded.amount1In,
      amount0Out: decoded.amount0Out,
      amount1Out: decoded.amount1Out,
      to: decoded.to
    })
    

    See Also