Event Trigger

Event Context

For event triggered typescript functions, use the Web3FunctionEventContext instead of the regular Web3FunctionContext on your onRun handler. The context will then include a log property containing your full event log that you can parse and process.

Event Triggered Typescript Function example

import { Interface } from "@ethersproject/abi";
import { Web3Function, Web3FunctionEventContext } from "@gelatonetwork/web3-functions-sdk";

const NFT_ABI = [
  "event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)",

Web3Function.onRun(async (context: Web3FunctionEventContext) => {
  // Get event log from Web3FunctionEventContext
  const { log } = context;
  // Parse your event from ABI
  const nft = new Interface(NFT_ABI);
  const event = nft.parseLog(log);

  // Handle event data
  const { from, to, tokenId } = event.args;
  console.log(`Transfer of NFT #${tokenId} from ${from} to ${to} detected`);
  return { canExec: false, message: `Event processed ${log.transactionHash}` };

Testing locally

To test your event triggered typescript function, you can add a log.json file in your web3 function directory:

Copy in the log.json file the raw data of the event you want to test:

  "blockNumber": 48758053,
  "blockHash": "0x6794a56583329794f184d50862019ecf7b6d8ba6b3210f68ca4b91a8fa81817d",
  "transactionIndex": 29,
  "removed": false,
  "address": "0xb74de3F91e04d0920ff26Ac28956272E8d67404D",
  "data": "0x",
  "topics": [
  "transactionHash": "0x2c500a55f5c24d587e73805975d91395634a971dca5939f43d34d774d0f7147b",
  "logIndex": 343

The data in log.json will be injected in your event context in local runs via CLI:

npx w3f test event/index.ts --logs
Web3Function running logs:
> Transfer of NFT #4249 from 0x0000000000000000000000000000000000000000 to 0xeeC2ba9B9F0202c63bba29Ea9A4Ce5c23f9865FD detected

Web3Function Result:
 ✓ Return value: {"canExec":false,"message":"Event processed 0x2c500a55f5c24d587e73805975d91395634a971

Last updated