Update indexer template in codegen for block optimization changes (#464)

* Update indexer template for block optimization

* Trim address strings in graph-node host API
This commit is contained in:
Nabarun Gogoi 2023-11-10 12:14:38 +05:30 committed by GitHub
parent 32d5cd10d0
commit edf72c1dd6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 13 deletions

View File

@ -44,7 +44,10 @@ import {
Clients, Clients,
EthClient, EthClient,
UpstreamConfig, UpstreamConfig,
ResultMeta ResultMeta,
EthFullBlock,
EthFullTransaction,
ExtraEventData
} from '@cerc-io/util'; } from '@cerc-io/util';
{{#if (subgraphPath)}} {{#if (subgraphPath)}}
import { GraphWatcher } from '@cerc-io/graph-node'; import { GraphWatcher } from '@cerc-io/graph-node';
@ -464,13 +467,13 @@ export class Indexer implements IndexerInterface {
} }
{{/if}} {{/if}}
async triggerIndexingOnEvent (event: Event): Promise<void> { async triggerIndexingOnEvent (event: Event, extraData: ExtraEventData): Promise<void> {
const resultEvent = this.getResultEvent(event); const resultEvent = this.getResultEvent(event);
{{#if (subgraphPath)}} {{#if (subgraphPath)}}
console.time('time:indexer#processEvent-mapping_code'); console.time('time:indexer#processEvent-mapping_code');
// Call subgraph handler for event. // Call subgraph handler for event.
await this._graphWatcher.handleEvent(resultEvent); await this._graphWatcher.handleEvent(resultEvent, extraData);
console.timeEnd('time:indexer#processEvent-mapping_code'); console.timeEnd('time:indexer#processEvent-mapping_code');
{{/if}} {{/if}}
@ -478,9 +481,9 @@ export class Indexer implements IndexerInterface {
await handleEvent(this, resultEvent); await handleEvent(this, resultEvent);
} }
async processEvent (event: Event): Promise<void> { async processEvent (event: Event, extraData: ExtraEventData): Promise<void> {
// Trigger indexing of data based on the event. // Trigger indexing of data based on the event.
await this.triggerIndexingOnEvent(event); await this.triggerIndexingOnEvent(event, extraData);
} }
async processBlock (blockProgress: BlockProgress): Promise<void> { async processBlock (blockProgress: BlockProgress): Promise<void> {
@ -689,7 +692,12 @@ export class Indexer implements IndexerInterface {
return this._baseIndexer.fetchEventsAndSaveBlocks(blocks, this._eventSignaturesMap, this.parseEventNameAndArgs.bind(this)); return this._baseIndexer.fetchEventsAndSaveBlocks(blocks, this._eventSignaturesMap, this.parseEventNameAndArgs.bind(this));
} }
async fetchAndSaveFilteredEventsAndBlocks (startBlock: number, endBlock: number): Promise<{ blockProgress: BlockProgress, events: DeepPartial<Event>[] }[]> { async fetchAndSaveFilteredEventsAndBlocks (startBlock: number, endBlock: number): Promise<{
blockProgress: BlockProgress,
events: DeepPartial<Event>[],
ethFullBlock: EthFullBlock;
ethFullTransactions: EthFullTransaction[];
}[]> {
return this._baseIndexer.fetchAndSaveFilteredEventsAndBlocks(startBlock, endBlock, this._eventSignaturesMap, this.parseEventNameAndArgs.bind(this)); return this._baseIndexer.fetchAndSaveFilteredEventsAndBlocks(startBlock, endBlock, this._eventSignaturesMap, this.parseEventNameAndArgs.bind(this));
} }
@ -697,7 +705,11 @@ export class Indexer implements IndexerInterface {
return this._baseIndexer.fetchEventsForContracts(blockHash, blockNumber, addresses, this._eventSignaturesMap, this.parseEventNameAndArgs.bind(this)); return this._baseIndexer.fetchEventsForContracts(blockHash, blockNumber, addresses, this._eventSignaturesMap, this.parseEventNameAndArgs.bind(this));
} }
async saveBlockAndFetchEvents (block: DeepPartial<BlockProgress>): Promise<[BlockProgress, DeepPartial<Event>[]]> { async saveBlockAndFetchEvents (block: DeepPartial<BlockProgress>): Promise<[
BlockProgress,
DeepPartial<Event>[],
EthFullTransaction[]
]> {
return this._saveBlockAndFetchEvents(block); return this._saveBlockAndFetchEvents(block);
} }
@ -810,11 +822,15 @@ export class Indexer implements IndexerInterface {
blockNumber, blockNumber,
blockTimestamp, blockTimestamp,
parentHash parentHash
}: DeepPartial<BlockProgress>): Promise<[BlockProgress, DeepPartial<Event>[]]> { }: DeepPartial<BlockProgress>): Promise<[
BlockProgress,
DeepPartial<Event>[],
EthFullTransaction[]
]> {
assert(blockHash); assert(blockHash);
assert(blockNumber); assert(blockNumber);
const dbEvents = await this._baseIndexer.fetchEvents(blockHash, blockNumber, this._eventSignaturesMap, this.parseEventNameAndArgs.bind(this)); const { events: dbEvents, transactions } = await this._baseIndexer.fetchEvents(blockHash, blockNumber, this._eventSignaturesMap, this.parseEventNameAndArgs.bind(this));
const dbTx = await this._db.createTransactionRunner(); const dbTx = await this._db.createTransactionRunner();
try { try {
@ -831,7 +847,7 @@ export class Indexer implements IndexerInterface {
await dbTx.commitTransaction(); await dbTx.commitTransaction();
console.timeEnd(`time:indexer#_saveBlockAndFetchEvents-db-save-${blockNumber}`); console.timeEnd(`time:indexer#_saveBlockAndFetchEvents-db-save-${blockNumber}`);
return [blockProgress, []]; return [blockProgress, [], transactions];
} catch (error) { } catch (error) {
await dbTx.rollbackTransaction(); await dbTx.rollbackTransaction();
throw error; throw error;

View File

@ -158,8 +158,7 @@ export const instantiate = async (
const functionParamsPtr = await smartContractCall.functionParams; const functionParamsPtr = await smartContractCall.functionParams;
let functionParams = __getArray(functionParamsPtr); let functionParams = __getArray(functionParamsPtr);
console.log('ethereum.call params'); console.log('ethereum.call functionSignature:', functionSignature);
console.log('functionSignature:', functionSignature);
const abi = abis[contractName]; const abi = abis[contractName];
const contractAddressStringPtr = await contractAddress.toHexString(); const contractAddressStringPtr = await contractAddress.toHexString();
@ -284,7 +283,7 @@ export const instantiate = async (
conversion: { conversion: {
'typeConversion.stringToH160': async (s: number) => { 'typeConversion.stringToH160': async (s: number) => {
const string = __getString(s); const string = __getString(s);
const address = utils.getAddress(string); const address = utils.getAddress(string.trim());
const byteArray = utils.arrayify(address); const byteArray = utils.arrayify(address);
const uint8ArrayId = await getIdOfType(TypeId.Uint8Array); const uint8ArrayId = await getIdOfType(TypeId.Uint8Array);