// // Copyright 2021 Vulcanize, Inc. // import assert from 'assert'; import { ResultEvent, // eslint-disable-next-line @typescript-eslint/no-unused-vars updateStateForMappingType, // eslint-disable-next-line @typescript-eslint/no-unused-vars updateStateForElementaryType } from '@cerc-io/util'; import { Indexer } from './indexer'; /** * Hook function to store an initial state. * @param indexer Indexer instance. * @param blockHash Hash of the concerned block. * @param contractAddress Address of the concerned contract. * @returns Data block to be stored. */ export async function createInitialState (indexer: Indexer, contractAddress: string, blockHash: string): Promise { assert(indexer); assert(blockHash); assert(contractAddress); // Store an empty State. const stateData: any = { state: {} }; // Use updateStateForElementaryType to update initial state with an elementary property. // Eg. const stateData = updateStateForElementaryType(stateData, '_totalBalance', result.value.toString()); // Use updateStateForMappingType to update initial state with a nested property. // Eg. const stateData = updateStateForMappingType(stateData, '_allowances', [owner, spender], allowance.value.toString()); // Return initial state data to be saved. return stateData; } /** * Hook function to create state diff. * @param indexer Indexer instance that contains methods to fetch the contract variable values. * @param blockHash Block hash of the concerned block. */ export async function createStateDiff (indexer: Indexer, blockHash: string): Promise { assert(indexer); assert(blockHash); // Use indexer.createDiff() method to save custom state diff(s). } /** * Hook function to create state checkpoint * @param indexer Indexer instance. * @param contractAddress Address of the concerned contract. * @param blockHash Block hash of the concerned block. * @returns Whether to disable default checkpoint. If false, the state from this hook is updated with that from default checkpoint. */ export async function createStateCheckpoint (indexer: Indexer, contractAddress: string, blockHash: string): Promise { assert(indexer); assert(blockHash); assert(contractAddress); // Use indexer.createStateCheckpoint() method to create a custom checkpoint. // Return false to update the state created by this hook by auto-generated checkpoint state. // Return true to disable update of the state created by this hook by auto-generated checkpoint state. return false; } /** * Event hook function. * @param indexer Indexer instance that contains methods to fetch and update the contract values in the database. * @param eventData ResultEvent object containing event information. */ export async function handleEvent (indexer: Indexer, eventData: ResultEvent): Promise { assert(indexer); assert(eventData); // Use indexer methods to index data. // Pass `diff` parameter to indexer methods as true to save an auto-generated state from the indexed data. }