From f85ffbc8cff3a9fcb0bf6ebd04e1d48a0bd9100c Mon Sep 17 00:00:00 2001 From: Edward Grech Date: Fri, 26 Feb 2021 01:23:24 +0100 Subject: [PATCH 1/2] [ethers-v5] event NoArgsEvent() => compilation error @typechain/ethers-v5-test | types/Events.d.ts(242,20): error TS2314: Generic type 'TypedEventFilter' requires 2 type argument(s). --- contracts/Events.sol | 2 ++ packages/target-ethers-v4-test/types/Events.d.ts | 4 ++++ .../types/factories/Events__factory.ts | 6 ++++++ packages/target-ethers-v5-test/types/Events.d.ts | 4 ++++ .../types/factories/Events__factory.ts | 6 ++++++ .../types/truffle-contracts/Events.d.ts | 7 ++++++- .../types/truffle-contracts/Events.d.ts | 7 ++++++- packages/target-web3-v1-test/types/Events.d.ts | 14 ++++++++++++++ 8 files changed, 48 insertions(+), 2 deletions(-) diff --git a/contracts/Events.sol b/contracts/Events.sol index 1da89281a..d3e1c3450 100644 --- a/contracts/Events.sol +++ b/contracts/Events.sol @@ -31,4 +31,6 @@ contract Events { function emit_event3_overloaded() public { emit Event3(1); } + + event NoArgsEvent(); } diff --git a/packages/target-ethers-v4-test/types/Events.d.ts b/packages/target-ethers-v4-test/types/Events.d.ts index 5136ae47d..60a53a35a 100644 --- a/packages/target-ethers-v4-test/types/Events.d.ts +++ b/packages/target-ethers-v4-test/types/Events.d.ts @@ -40,6 +40,8 @@ interface EventsInterface extends Interface { Event3: TypedEventDescription<{ encodeTopics([value1, value2]: [boolean | null, null]): string[]; }>; + + NoArgsEvent: TypedEventDescription<{ encodeTopics([]: []): string[] }>; }; } @@ -130,6 +132,8 @@ export class Events extends Contract { Event2(undefined: null): EventFilter; Event3(value1: boolean | null, value2: null): EventFilter; + + NoArgsEvent(): EventFilter; }; estimate: { diff --git a/packages/target-ethers-v4-test/types/factories/Events__factory.ts b/packages/target-ethers-v4-test/types/factories/Events__factory.ts index 385eab604..68db730b0 100644 --- a/packages/target-ethers-v4-test/types/factories/Events__factory.ts +++ b/packages/target-ethers-v4-test/types/factories/Events__factory.ts @@ -91,6 +91,12 @@ const _abi = [ name: "Event3", type: "event", }, + { + anonymous: false, + inputs: [], + name: "NoArgsEvent", + type: "event", + }, { inputs: [], name: "emit_anon1", diff --git a/packages/target-ethers-v5-test/types/Events.d.ts b/packages/target-ethers-v5-test/types/Events.d.ts index e798eead3..d47963d66 100644 --- a/packages/target-ethers-v5-test/types/Events.d.ts +++ b/packages/target-ethers-v5-test/types/Events.d.ts @@ -74,12 +74,14 @@ interface EventsInterface extends ethers.utils.Interface { "Event1(uint256,uint256)": EventFragment; "Event2(uint256)": EventFragment; "Event3(bool,uint256)": EventFragment; + "NoArgsEvent()": EventFragment; }; getEvent(nameOrSignatureOrTopic: "AnonEvent1"): EventFragment; getEvent(nameOrSignatureOrTopic: "Event1"): EventFragment; getEvent(nameOrSignatureOrTopic: "Event2"): EventFragment; getEvent(nameOrSignatureOrTopic: "Event3"): EventFragment; + getEvent(nameOrSignatureOrTopic: "NoArgsEvent"): EventFragment; } export class Events extends Contract { @@ -215,6 +217,8 @@ export class Events extends Contract { [boolean, BigNumber], { value1: boolean; value2: BigNumber } >; + + NoArgsEvent(): TypedEventFilter<[]>; }; estimateGas: { diff --git a/packages/target-ethers-v5-test/types/factories/Events__factory.ts b/packages/target-ethers-v5-test/types/factories/Events__factory.ts index 609f0bb46..b7adc4ca9 100644 --- a/packages/target-ethers-v5-test/types/factories/Events__factory.ts +++ b/packages/target-ethers-v5-test/types/factories/Events__factory.ts @@ -91,6 +91,12 @@ const _abi = [ name: "Event3", type: "event", }, + { + anonymous: false, + inputs: [], + name: "NoArgsEvent", + type: "event", + }, { inputs: [], name: "emit_anon1", diff --git a/packages/target-truffle-v4-test/types/truffle-contracts/Events.d.ts b/packages/target-truffle-v4-test/types/truffle-contracts/Events.d.ts index 6a2b777c8..59f8f65c9 100644 --- a/packages/target-truffle-v4-test/types/truffle-contracts/Events.d.ts +++ b/packages/target-truffle-v4-test/types/truffle-contracts/Events.d.ts @@ -40,7 +40,12 @@ export interface Event3_uint256 { type Event3 = Event3_bool_uint256 | Event3_uint256; -type AllEvents = Event1 | Event3; +export interface NoArgsEvent { + name: "NoArgsEvent"; + args: {}; +} + +type AllEvents = Event1 | Event3 | NoArgsEvent; export interface EventsInstance extends Truffle.ContractInstance { emit_event1: { diff --git a/packages/target-truffle-v5-test/types/truffle-contracts/Events.d.ts b/packages/target-truffle-v5-test/types/truffle-contracts/Events.d.ts index 8733f0cbd..a35bb955b 100644 --- a/packages/target-truffle-v5-test/types/truffle-contracts/Events.d.ts +++ b/packages/target-truffle-v5-test/types/truffle-contracts/Events.d.ts @@ -54,7 +54,12 @@ export interface Event3_uint256 { type Event3 = Event3_bool_uint256 | Event3_uint256; -type AllEvents = Event1 | Event2 | Event3; +export interface NoArgsEvent { + name: "NoArgsEvent"; + args: {}; +} + +type AllEvents = Event1 | Event2 | Event3 | NoArgsEvent; export interface EventsInstance extends Truffle.ContractInstance { emit_event1: { diff --git a/packages/target-web3-v1-test/types/Events.d.ts b/packages/target-web3-v1-test/types/Events.d.ts index ec8db031e..2f862b06b 100644 --- a/packages/target-web3-v1-test/types/Events.d.ts +++ b/packages/target-web3-v1-test/types/Events.d.ts @@ -44,6 +44,7 @@ export type Event3_uint256 = ContractEventLog<{ value1: string; 0: string; }>; +export type NoArgsEvent = ContractEventLog<{}>; export interface Events extends BaseContract { constructor( @@ -82,6 +83,12 @@ export interface Events extends BaseContract { cb?: Callback ): EventEmitter; + NoArgsEvent(cb?: Callback): EventEmitter; + NoArgsEvent( + options?: EventOptions, + cb?: Callback + ): EventEmitter; + allEvents(options?: EventOptions, cb?: Callback): EventEmitter; }; @@ -90,4 +97,11 @@ export interface Events extends BaseContract { once(event: "Event2", cb: Callback): void; once(event: "Event2", options: EventOptions, cb: Callback): void; + + once(event: "NoArgsEvent", cb: Callback): void; + once( + event: "NoArgsEvent", + options: EventOptions, + cb: Callback + ): void; } From 680cef3f9075b1869c1f41cf0ca7f9d2115eaa73 Mon Sep 17 00:00:00 2001 From: Edward Grech Date: Fri, 26 Feb 2021 01:50:35 +0100 Subject: [PATCH 2/2] [ethers-v5] Fix event NoArgsEvent() compilation error --- packages/target-ethers-v5-test/types/Events.d.ts | 2 +- packages/target-ethers-v5/src/codegen/index.ts | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/target-ethers-v5-test/types/Events.d.ts b/packages/target-ethers-v5-test/types/Events.d.ts index d47963d66..03ed8d344 100644 --- a/packages/target-ethers-v5-test/types/Events.d.ts +++ b/packages/target-ethers-v5-test/types/Events.d.ts @@ -218,7 +218,7 @@ export class Events extends Contract { { value1: boolean; value2: BigNumber } >; - NoArgsEvent(): TypedEventFilter<[]>; + NoArgsEvent(): TypedEventFilter<[], {}>; }; estimateGas: { diff --git a/packages/target-ethers-v5/src/codegen/index.ts b/packages/target-ethers-v5/src/codegen/index.ts index 97a1cadf4..e860a9f99 100644 --- a/packages/target-ethers-v5/src/codegen/index.ts +++ b/packages/target-ethers-v5/src/codegen/index.ts @@ -274,11 +274,15 @@ function generateParamNames(params: Array): } function generateEvents(event: EventDeclaration) { + const outputTypes = + event.inputs.length > 0 + ? generateOutputTypes( + true, + event.inputs.map((input, i) => ({ name: input.name ?? `arg${i.toString()}`, type: input.type })), + ).replace(' &', ',') + : '[], {}' return ` - ${event.name}(${generateEventTypes(event.inputs)}): TypedEventFilter<${generateOutputTypes( - true, - event.inputs.map((input, i) => ({ name: input.name ?? `arg${i.toString()}`, type: input.type })), - ).replace(' &', ',')}>; + ${event.name}(${generateEventTypes(event.inputs)}): TypedEventFilter<${outputTypes}>; ` }