diff --git a/packages/payloadset/packages/evm/packages/token-interface/packages/diviner/src/Diviner.ts b/packages/payloadset/packages/evm/packages/token-interface/packages/diviner/src/Diviner.ts index 5785d4379..262de1419 100644 --- a/packages/payloadset/packages/evm/packages/token-interface/packages/diviner/src/Diviner.ts +++ b/packages/payloadset/packages/evm/packages/token-interface/packages/diviner/src/Diviner.ts @@ -27,6 +27,9 @@ export type EvmTokenInterfaceDivinerParams = DivinerParams = T extends string ? { [K in T]: readonly JsonFragment[] } : never type TokenInterfaceDictionary = DistributiveMappedType +/** + * A diviner that checks if a contract implements a token interface + */ export class EvmTokenInterfaceDiviner extends AbstractDiviner< TParams, EvmContract, @@ -49,6 +52,9 @@ export class EvmTokenInterfaceDiviner { await this.started('throw') try { - const observations = await Promise.all( + const allResults = await Promise.all( + // Iterate over each contract passed in inPayloads.filter(isEvmContract).map(({ address, code, chainId }) => { + // Ensure we have the contract code const byteCode = assertEx(code, 'Missing code') - const results: EvmTokenInterfaceImplemented[] = [] - + // Iterate over each token interface Object.entries(this.tokenInterfaces).forEach(([tokenInterface, abi]) => { + // Check if the contract implements the interface abi const contractInterface = new Interface(abi) contractInterface.forEachFunction(({ selector }) => { const result: EvmTokenInterfaceImplemented = { @@ -91,7 +99,7 @@ export class EvmTokenInterfaceDiviner