Skip to main content

    Usage Examples

    Event Filtering

    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", indexed: false }
      ]
    })
    
    // Get logs for Transfer events
    const logs = await provider.getLogs({
      address: tokenAddress,
      topics: [transferEvent.getSelector()],
      fromBlock: 'latest'
    })
    

    Multiple Event Types

    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" }
      ]
    })
    
    const approvalEvent = new Event({
      type: "event",
      name: "Approval",
      inputs: [
        { type: "address", name: "owner", indexed: true },
        { type: "address", name: "spender", indexed: true },
        { type: "uint256", name: "value" }
      ]
    })
    
    // Filter for either event type
    const logs = await provider.getLogs({
      address: tokenAddress,
      topics: [[
        transferEvent.getSelector(),
        approvalEvent.getSelector()
      ]]
    })
    

    Event Registry

    import { Event } from 'tevm'
    
    const events = [
      new Event({
        type: "event",
        name: "Transfer",
        inputs: [
          { type: "address", name: "from", indexed: true },
          { type: "address", name: "to", indexed: true },
          { type: "uint256", name: "value" }
        ]
      }),
      new Event({
        type: "event",
        name: "Approval",
        inputs: [
          { type: "address", name: "owner", indexed: true },
          { type: "address", name: "spender", indexed: true },
          { type: "uint256", name: "value" }
        ]
      })
    ]
    
    // Create selector → event mapping
    const registry = new Map(
      events.map(e => [e.getSelector(), e])
    )
    
    // Look up event by selector
    function findEvent(log) {
      const selector = log.topics[0]
      return registry.get(selector)
    }
    

    See Also