kleros/kleros-v2

View on GitHub
kleros-sdk/src/dataMappings/actions/eventAction.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { parseAbiItem } from "viem";
import { AbiEventMapping } from "src/dataMappings/utils/actionTypes";
import { createResultObject } from "src/dataMappings/utils/createResultObject";
import { configureSDK, getPublicClient } from "src/sdk";

export const eventAction = async (mapping: AbiEventMapping, alchemyApiKey: string) => {
  configureSDK({ apiKey: alchemyApiKey });
  const publicClient = getPublicClient();

  const { abi: source, address, eventFilter, seek, populate } = mapping;
  const parsedAbi = typeof source === "string" ? parseAbiItem(source) : source;

  const filter = await publicClient.createEventFilter({
    address,
    event: parsedAbi,
    args: eventFilter.args,
    fromBlock: eventFilter.fromBlock,
    toBlock: eventFilter.toBlock,
  });

  const contractEvent = await publicClient.getFilterLogs({ filter: filter as any });
  const eventData = contractEvent[0].args;

  return createResultObject(eventData, seek, populate);
};