diff --git a/src/index.ts b/src/index.ts index a3a4ec04..7e84aea7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -537,11 +537,19 @@ async function catchupAndWatchChain( }); }); } else { - const handler = args.event.contractName.startsWith("AlloV1") - ? handleAlloV1Event - : handleAlloV2Event; + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const module = await import( + `./indexe/handlers/${args.event.contractName}/${args.event.name}` + ); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const changesets = module.default(args); + + // const handler = args.event.contractName.startsWith("AlloV1") + // ? handleAlloV1Event + // : handleAlloV2Event; - const changesets = await handler(args); + // const changesets = await handler(args); for (const changeset of changesets) { await db.applyChange(changeset); diff --git a/src/indexer/allo/handlers/AlloV1/ProjectRegistry/V2/ProjectCreated.ts b/src/indexer/allo/handlers/AlloV1/ProjectRegistry/V2/ProjectCreated.ts new file mode 100644 index 00000000..65bfb539 --- /dev/null +++ b/src/indexer/allo/handlers/AlloV1/ProjectRegistry/V2/ProjectCreated.ts @@ -0,0 +1,57 @@ +import { EventHandlerArgs } from "chainsauce"; +import { Indexer } from "@/indexer/indexer.js"; +import { Changeset } from "@/database/index.js"; +import { fullProjectId } from "@/indexer/allo/v1/project.js"; +import { parseAddress } from "@/address.js"; + +export default async function ( + args: EventHandlerArgs +): Promise { + const { + chainId, + event, + context: { rpcClient }, + } = args; + + const projectId = fullProjectId( + chainId, + Number(event.params.projectID), + event.address + ); + + const tx = await rpcClient.getTransaction({ + hash: event.transactionHash, + }); + + const createdBy = tx.from; + + return [ + { + type: "InsertProject", + project: { + tags: ["allo-v1"], + chainId, + registryAddress: parseAddress(event.address), + id: projectId, + name: "", + projectNumber: Number(event.params.projectID), + metadataCid: null, + metadata: null, + createdByAddress: parseAddress(createdBy), + createdAtBlock: event.blockNumber, + updatedAtBlock: event.blockNumber, + projectType: "canonical", + }, + }, + { + type: "InsertProjectRole", + projectRole: { + chainId, + projectId, + address: parseAddress(event.params.owner), + role: "owner", + createdAtBlock: event.blockNumber, + }, + }, + ]; +} diff --git a/src/indexer/allo/v1/handleEvent.ts b/src/indexer/allo/v1/handleEvent.ts index 994dc3e5..4199165e 100644 --- a/src/indexer/allo/v1/handleEvent.ts +++ b/src/indexer/allo/v1/handleEvent.ts @@ -67,50 +67,6 @@ export async function handleEvent( switch (event.name) { // -- PROJECTS - case "ProjectCreated": { - const projectId = fullProjectId( - chainId, - Number(event.params.projectID), - event.address - ); - - const tx = await rpcClient.getTransaction({ - hash: event.transactionHash, - }); - - const createdBy = tx.from; - - return [ - { - type: "InsertProject", - project: { - tags: ["allo-v1"], - chainId, - registryAddress: parseAddress(event.address), - id: projectId, - name: "", - projectNumber: Number(event.params.projectID), - metadataCid: null, - metadata: null, - createdByAddress: parseAddress(createdBy), - createdAtBlock: event.blockNumber, - updatedAtBlock: event.blockNumber, - projectType: "canonical", - }, - }, - { - type: "InsertProjectRole", - projectRole: { - chainId, - projectId, - address: parseAddress(event.params.owner), - role: "owner", - createdAtBlock: event.blockNumber, - }, - }, - ]; - } - case "MetadataUpdated": { const projectId = fullProjectId( chainId, diff --git a/src/indexer/allo/v1/project.ts b/src/indexer/allo/v1/project.ts new file mode 100644 index 00000000..0e3f4a32 --- /dev/null +++ b/src/indexer/allo/v1/project.ts @@ -0,0 +1,12 @@ +import { ethers } from "ethers"; + +export function fullProjectId( + projectChainId: number, + projectId: number, + projectRegistryAddress: string +) { + return ethers.utils.solidityKeccak256( + ["uint256", "address", "uint256"], + [projectChainId, projectRegistryAddress, projectId] + ); +} diff --git a/tsconfig.json b/tsconfig.json index 05e208a3..362d8a18 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,7 +14,10 @@ "rootDir": "./", "resolveJsonModule": true, "declaration": false, - "sourceMap": true + "sourceMap": true, + "paths": { + "@/*": ["src/*"], + } }, "exclude": ["node_modules", "dist"] }