diff --git a/packages/target-ethers-v5-test/test/Events.test.ts b/packages/target-ethers-v5-test/test/Events.test.ts index e1e878f06..23202a115 100644 --- a/packages/target-ethers-v5-test/test/Events.test.ts +++ b/packages/target-ethers-v5-test/test/Events.test.ts @@ -99,13 +99,23 @@ describe('Events', () => { it('queryFilter overloaded event', async () => { await contract.emit_event3_overloaded() - const filter = contract.filters.Event3() - const results = await contract.queryFilter(filter) - results.map((r) => { - typedAssert(r.args.value1, true) - typedAssert(r.args.value2, BigNumber.from(2)) - typedAssert(r.args[0], true) - typedAssert(r.args[1], BigNumber.from(2)) - }) + { + const filterA = contract.filters['Event3(bool,uint256)']() + const results = await contract.queryFilter(filterA) + results.map((r) => { + typedAssert(r.args.value1, true) + typedAssert(r.args.value2, BigNumber.from(2)) + typedAssert(r.args[0], true) + typedAssert(r.args[1], BigNumber.from(2)) + }) + } + { + const filterB = contract.filters['Event3(uint256)']() + const results = await contract.queryFilter(filterB) + results.map((r) => { + typedAssert(r.args.value1, BigNumber.from(1)) + typedAssert(r.args[0], BigNumber.from(1)) + }) + } }) }) diff --git a/packages/target-ethers-v5/src/codegen/index.ts b/packages/target-ethers-v5/src/codegen/index.ts index 2be0e5aa0..8b67df400 100644 --- a/packages/target-ethers-v5/src/codegen/index.ts +++ b/packages/target-ethers-v5/src/codegen/index.ts @@ -122,10 +122,7 @@ export function codegenContractTypings(contract: Contract, codegenConfig: Codege }; filters: { - ${values(contract.events) - .map((v) => v[0]) - .map(generateEventFilter) - .join('\n')} + ${values(contract.events).map(generateEventFilters).join('\n')} }; estimateGas: { @@ -306,14 +303,31 @@ function generateParamNames(params: Array): return params.map((param, index) => param.name || `arg${index}`).join(', ') } -function generateEventFilter(event: EventDeclaration) { +function generateEventFilters(events: EventDeclaration[]) { + if (events.length == 1) { + return generateEventFilter(events[0], true) + } else { + return events.map((e) => generateEventFilter(e, false)).join('\n') + } +} + +function generateEventFilter(event: EventDeclaration, includeNameFilter: boolean) { const components = event.inputs.map((input, i) => ({ name: input.name ?? `arg${i.toString()}`, type: input.type })) const arrayOutput = generateOutputComplexTypeAsArray(components) const objectOutput = generateOutputComplexTypesAsObject(components) || '{}' - return ` - ${event.name}(${generateEventTypes(event.inputs)}): TypedEventFilter<${arrayOutput}, ${objectOutput}>; -` + let filter = ` + '${generateEventSignature(event)}'(${generateEventTypes( + event.inputs, + )}): TypedEventFilter<${arrayOutput}, ${objectOutput}>; + ` + + if (includeNameFilter) { + filter += ` + ${event.name}(${generateEventTypes(event.inputs)}): TypedEventFilter<${arrayOutput}, ${objectOutput}>; + ` + } + return filter } function generateEventTypeExport(event: EventDeclaration) {