From 3b9d921f87f579a5eaf7612714a1521402aea337 Mon Sep 17 00:00:00 2001 From: Soham Zemse <22412996+zemse@users.noreply.github.com> Date: Sun, 22 Aug 2021 23:44:39 +0530 Subject: [PATCH 01/11] [ethers-v5] Generate and export typed events --- .../target-ethers-v5/src/codegen/index.ts | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/target-ethers-v5/src/codegen/index.ts b/packages/target-ethers-v5/src/codegen/index.ts index ef78a7e1d..2be0e5aa0 100644 --- a/packages/target-ethers-v5/src/codegen/index.ts +++ b/packages/target-ethers-v5/src/codegen/index.ts @@ -72,6 +72,11 @@ export function codegenContractTypings(contract: Contract, codegenConfig: Codege .join('\n')} } + ${values(contract.events) + .map((v) => v[0]) + .map(generateEventTypeExport) + .join('\n')} + export class ${contract.name} extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; @@ -119,7 +124,7 @@ export function codegenContractTypings(contract: Contract, codegenConfig: Codege filters: { ${values(contract.events) .map((v) => v[0]) - .map(generateEvents) + .map(generateEventFilter) .join('\n')} }; @@ -301,7 +306,7 @@ function generateParamNames(params: Array): return params.map((param, index) => param.name || `arg${index}`).join(', ') } -function generateEvents(event: EventDeclaration) { +function generateEventFilter(event: EventDeclaration) { const components = event.inputs.map((input, i) => ({ name: input.name ?? `arg${i.toString()}`, type: input.type })) const arrayOutput = generateOutputComplexTypeAsArray(components) const objectOutput = generateOutputComplexTypesAsObject(components) || '{}' @@ -311,6 +316,16 @@ function generateEvents(event: EventDeclaration) { ` } +function generateEventTypeExport(event: EventDeclaration) { + 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 ` +export type ${event.name}Event = TypedEvent<${arrayOutput} & ${objectOutput}>; +` +} + function generateInterfaceEventDescription(event: EventDeclaration): string { return `'${generateEventSignature(event)}': EventFragment;` } From 1331868ee9e1269a1f168fbde8ca14f0f641fa72 Mon Sep 17 00:00:00 2001 From: Soham Zemse <22412996+zemse@users.noreply.github.com> Date: Sun, 22 Aug 2021 23:45:17 +0530 Subject: [PATCH 02/11] [ethers-v5] Add test for typed event --- packages/target-ethers-v5-test/test/Events.test.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/target-ethers-v5-test/test/Events.test.ts b/packages/target-ethers-v5-test/test/Events.test.ts index eaa49bc2a..5a976db46 100644 --- a/packages/target-ethers-v5-test/test/Events.test.ts +++ b/packages/target-ethers-v5-test/test/Events.test.ts @@ -1,7 +1,7 @@ import { BigNumber, ethers } from 'ethers' import { typedAssert } from 'test-utils' -import { Events } from '../types/Events' +import { Event1Event, Events } from '../types/Events' import { createNewBlockchain, deployContract } from './common' describe('Events', () => { @@ -84,4 +84,15 @@ describe('Events', () => { await contract.emit_event1() await new Promise((r) => setTimeout(r, 1000)) }) + + it('typed event import', async () => { + const filter = contract.filters.Event1(null, null) + const results = (await contract.queryFilter(filter)) as any + ;(results as Event1Event[]).map((r) => { + typedAssert(r.args.value1, BigNumber.from(1)) + typedAssert(r.args.value2, BigNumber.from(2)) + typedAssert(r.args[0], BigNumber.from(1)) + typedAssert(r.args[1], BigNumber.from(2)) + }) + }) }) From b0dc23298a512bff17484f944bbb8d313ff83a1a Mon Sep 17 00:00:00 2001 From: Soham Zemse <22412996+zemse@users.noreply.github.com> Date: Sun, 22 Aug 2021 23:45:49 +0530 Subject: [PATCH 03/11] [ethers-v5] Run build, test and typecheck --- .../hardhat-project/typechain/ERC20.d.ts | 12 +++++++++++ .../target-ethers-v5-test/types/Events.d.ts | 20 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/packages/hardhat/test/fixture-projects/hardhat-project/typechain/ERC20.d.ts b/packages/hardhat/test/fixture-projects/hardhat-project/typechain/ERC20.d.ts index 1a9faee37..920120cdd 100644 --- a/packages/hardhat/test/fixture-projects/hardhat-project/typechain/ERC20.d.ts +++ b/packages/hardhat/test/fixture-projects/hardhat-project/typechain/ERC20.d.ts @@ -100,6 +100,18 @@ interface ERC20Interface extends ethers.utils.Interface { getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; } +export type ApprovalEvent = TypedEvent< + [string, string, BigNumber] & { + owner: string; + spender: string; + value: BigNumber; + } +>; + +export type TransferEvent = TypedEvent< + [string, string, BigNumber] & { from: string; to: string; value: BigNumber } +>; + export class ERC20 extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; diff --git a/packages/target-ethers-v5-test/types/Events.d.ts b/packages/target-ethers-v5-test/types/Events.d.ts index ace21ccfc..f33fc71e9 100644 --- a/packages/target-ethers-v5-test/types/Events.d.ts +++ b/packages/target-ethers-v5-test/types/Events.d.ts @@ -93,6 +93,26 @@ interface EventsInterface extends ethers.utils.Interface { getEvent(nameOrSignatureOrTopic: "NoArgsEvent"): EventFragment; } +export type AnonEvent1Event = TypedEvent<[BigNumber] & { value1: BigNumber }>; + +export type Event1Event = TypedEvent< + [BigNumber, BigNumber] & { value1: BigNumber; value2: BigNumber } +>; + +export type Event2Event = TypedEvent<[BigNumber] & { arg0: BigNumber }>; + +export type Event3Event = TypedEvent< + [boolean, BigNumber] & { value1: boolean; value2: BigNumber } +>; + +export type Event4Event = TypedEvent< + [[BigNumber, string] & { index: BigNumber; name: string }] & { + data: [BigNumber, string] & { index: BigNumber; name: string }; + } +>; + +export type NoArgsEventEvent = TypedEvent<[] & {}>; + export class Events extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; From e4edd2cef4857c635f1ed8603e120f51f05a2365 Mon Sep 17 00:00:00 2001 From: Soham Zemse <22412996+zemse@users.noreply.github.com> Date: Sun, 22 Aug 2021 23:47:40 +0530 Subject: [PATCH 04/11] Add changeset --- .changeset/good-starfishes-appear.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/good-starfishes-appear.md diff --git a/.changeset/good-starfishes-appear.md b/.changeset/good-starfishes-appear.md new file mode 100644 index 000000000..de10e24bc --- /dev/null +++ b/.changeset/good-starfishes-appear.md @@ -0,0 +1,6 @@ +--- +'@typechain/ethers-v5': minor +'@typechain/ethers-v5-test': minor +--- + +Export typed events From 7a120a3d229c4d09e3fff9d5c476083a132df755 Mon Sep 17 00:00:00 2001 From: Soham Zemse <22412996+zemse@users.noreply.github.com> Date: Wed, 25 Aug 2021 23:42:05 +0530 Subject: [PATCH 05/11] [ethers-v5] Add overloaded events test case that fails --- packages/target-ethers-v5-test/test/Events.test.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packages/target-ethers-v5-test/test/Events.test.ts b/packages/target-ethers-v5-test/test/Events.test.ts index 5a976db46..e1e878f06 100644 --- a/packages/target-ethers-v5-test/test/Events.test.ts +++ b/packages/target-ethers-v5-test/test/Events.test.ts @@ -95,4 +95,17 @@ describe('Events', () => { typedAssert(r.args[1], BigNumber.from(2)) }) }) + + 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)) + }) + }) }) From 5c186bb3e2e1c91275d06fab86c2d4c422a6ee1b Mon Sep 17 00:00:00 2001 From: Soham Zemse <22412996+zemse@users.noreply.github.com> Date: Wed, 25 Aug 2021 23:50:16 +0530 Subject: [PATCH 06/11] Remove test packages from changesets --- .changeset/good-starfishes-appear.md | 1 - 1 file changed, 1 deletion(-) diff --git a/.changeset/good-starfishes-appear.md b/.changeset/good-starfishes-appear.md index de10e24bc..73cefb7a6 100644 --- a/.changeset/good-starfishes-appear.md +++ b/.changeset/good-starfishes-appear.md @@ -1,6 +1,5 @@ --- '@typechain/ethers-v5': minor -'@typechain/ethers-v5-test': minor --- Export typed events From 65c7ae4941f6cca36b5cbcd70432e63c381ae0e5 Mon Sep 17 00:00:00 2001 From: Soham Zemse <22412996+zemse@users.noreply.github.com> Date: Tue, 31 Aug 2021 02:11:36 +0530 Subject: [PATCH 07/11] [ethers-v5] Fix filters when events are overloaded --- .../target-ethers-v5-test/test/Events.test.ts | 26 +++++++++++----- .../target-ethers-v5/src/codegen/index.ts | 30 ++++++++++++++----- 2 files changed, 40 insertions(+), 16 deletions(-) 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) { From 7159eceb3033db83c6235ad8a510a490b9c23f9d Mon Sep 17 00:00:00 2001 From: Soham Zemse <22412996+zemse@users.noreply.github.com> Date: Tue, 31 Aug 2021 02:12:56 +0530 Subject: [PATCH 08/11] [ethers-v5] Run build, test and typecheck --- .../hardhat-project/typechain/ERC20.d.ts | 18 +++++++++++ .../target-ethers-v5-test/types/Events.d.ts | 31 ++++++++++++++++++- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/packages/hardhat/test/fixture-projects/hardhat-project/typechain/ERC20.d.ts b/packages/hardhat/test/fixture-projects/hardhat-project/typechain/ERC20.d.ts index 920120cdd..6b79d7b5e 100644 --- a/packages/hardhat/test/fixture-projects/hardhat-project/typechain/ERC20.d.ts +++ b/packages/hardhat/test/fixture-projects/hardhat-project/typechain/ERC20.d.ts @@ -301,6 +301,15 @@ export class ERC20 extends BaseContract { }; filters: { + "Approval(address,address,uint256)"( + owner?: string | null, + spender?: string | null, + value?: null + ): TypedEventFilter< + [string, string, BigNumber], + { owner: string; spender: string; value: BigNumber } + >; + Approval( owner?: string | null, spender?: string | null, @@ -310,6 +319,15 @@ export class ERC20 extends BaseContract { { owner: string; spender: string; value: BigNumber } >; + "Transfer(address,address,uint256)"( + from?: string | null, + to?: string | null, + value?: null + ): TypedEventFilter< + [string, string, BigNumber], + { from: string; to: string; value: BigNumber } + >; + Transfer( from?: string | null, to?: string | null, diff --git a/packages/target-ethers-v5-test/types/Events.d.ts b/packages/target-ethers-v5-test/types/Events.d.ts index f33fc71e9..97528264b 100644 --- a/packages/target-ethers-v5-test/types/Events.d.ts +++ b/packages/target-ethers-v5-test/types/Events.d.ts @@ -221,10 +221,22 @@ export class Events extends BaseContract { }; filters: { + "AnonEvent1(uint256)"( + value1?: BigNumberish | null + ): TypedEventFilter<[BigNumber], { value1: BigNumber }>; + AnonEvent1( value1?: BigNumberish | null ): TypedEventFilter<[BigNumber], { value1: BigNumber }>; + "Event1(uint256,uint256)"( + value1?: BigNumberish | null, + value2?: null + ): TypedEventFilter< + [BigNumber, BigNumber], + { value1: BigNumber; value2: BigNumber } + >; + Event1( value1?: BigNumberish | null, value2?: null @@ -233,11 +245,15 @@ export class Events extends BaseContract { { value1: BigNumber; value2: BigNumber } >; + "Event2(uint256)"( + undefined?: null + ): TypedEventFilter<[BigNumber], { arg0: BigNumber }>; + Event2( undefined?: null ): TypedEventFilter<[BigNumber], { arg0: BigNumber }>; - Event3( + "Event3(bool,uint256)"( value1?: boolean | null, value2?: null ): TypedEventFilter< @@ -245,6 +261,17 @@ export class Events extends BaseContract { { value1: boolean; value2: BigNumber } >; + "Event3(uint256)"( + value1?: BigNumberish | null + ): TypedEventFilter<[BigNumber], { value1: BigNumber }>; + + "Event4(tuple)"( + data?: null + ): TypedEventFilter< + [[BigNumber, string] & { index: BigNumber; name: string }], + { data: [BigNumber, string] & { index: BigNumber; name: string } } + >; + Event4( data?: null ): TypedEventFilter< @@ -252,6 +279,8 @@ export class Events extends BaseContract { { data: [BigNumber, string] & { index: BigNumber; name: string } } >; + "NoArgsEvent()"(): TypedEventFilter<[], {}>; + NoArgsEvent(): TypedEventFilter<[], {}>; }; From 0cc3d066eb14c553e8aa4ad6a301aa728bd3ee3b Mon Sep 17 00:00:00 2001 From: Soham Zemse <22412996+zemse@users.noreply.github.com> Date: Tue, 31 Aug 2021 02:34:05 +0530 Subject: [PATCH 09/11] [ethers-v5] Fix overloaded typed event exports --- .../target-ethers-v5-test/test/Events.test.ts | 4 ++-- .../target-ethers-v5/src/codegen/index.ts | 20 ++++++++++++------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/packages/target-ethers-v5-test/test/Events.test.ts b/packages/target-ethers-v5-test/test/Events.test.ts index 23202a115..f3a564129 100644 --- a/packages/target-ethers-v5-test/test/Events.test.ts +++ b/packages/target-ethers-v5-test/test/Events.test.ts @@ -1,7 +1,7 @@ import { BigNumber, ethers } from 'ethers' import { typedAssert } from 'test-utils' -import { Event1Event, Events } from '../types/Events' +import { Event1_TypedEvent, Events } from '../types/Events' import { createNewBlockchain, deployContract } from './common' describe('Events', () => { @@ -88,7 +88,7 @@ describe('Events', () => { it('typed event import', async () => { const filter = contract.filters.Event1(null, null) const results = (await contract.queryFilter(filter)) as any - ;(results as Event1Event[]).map((r) => { + ;(results as Event1_TypedEvent[]).map((r) => { typedAssert(r.args.value1, BigNumber.from(1)) typedAssert(r.args.value2, BigNumber.from(2)) 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 8b67df400..7719013d5 100644 --- a/packages/target-ethers-v5/src/codegen/index.ts +++ b/packages/target-ethers-v5/src/codegen/index.ts @@ -72,10 +72,7 @@ export function codegenContractTypings(contract: Contract, codegenConfig: Codege .join('\n')} } - ${values(contract.events) - .map((v) => v[0]) - .map(generateEventTypeExport) - .join('\n')} + ${values(contract.events).map(generateEventTypeExports).join('\n')} export class ${contract.name} extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; @@ -304,7 +301,7 @@ function generateParamNames(params: Array): } function generateEventFilters(events: EventDeclaration[]) { - if (events.length == 1) { + if (events.length === 1) { return generateEventFilter(events[0], true) } else { return events.map((e) => generateEventFilter(e, false)).join('\n') @@ -330,13 +327,22 @@ function generateEventFilter(event: EventDeclaration, includeNameFilter: boolean return filter } -function generateEventTypeExport(event: EventDeclaration) { +function generateEventTypeExports(events: EventDeclaration[]) { + if (events.length === 1) { + return generateEventTypeExport(events[0], false) + } else { + return events.map((e) => generateEventTypeExport(e, true)).join('\n') + } +} +function generateEventTypeExport(event: EventDeclaration, includeArgTypes: 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 ` -export type ${event.name}Event = TypedEvent<${arrayOutput} & ${objectOutput}>; +export type ${event.name}${ + includeArgTypes ? event.inputs.map((input) => '_' + input.type.originalType).join('') : '' + }_TypedEvent = TypedEvent<${arrayOutput} & ${objectOutput}>; ` } From ea6b6e502c6394688cea191335310f2f8ab984cd Mon Sep 17 00:00:00 2001 From: Soham Zemse <22412996+zemse@users.noreply.github.com> Date: Tue, 31 Aug 2021 02:36:07 +0530 Subject: [PATCH 10/11] [ethers-v5] Run build, test and typecheck --- .../hardhat-project/typechain/ERC20.d.ts | 4 ++-- .../target-ethers-v5-test/types/Events.d.ts | 18 ++++++++++++------ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/packages/hardhat/test/fixture-projects/hardhat-project/typechain/ERC20.d.ts b/packages/hardhat/test/fixture-projects/hardhat-project/typechain/ERC20.d.ts index 6b79d7b5e..86f319a1c 100644 --- a/packages/hardhat/test/fixture-projects/hardhat-project/typechain/ERC20.d.ts +++ b/packages/hardhat/test/fixture-projects/hardhat-project/typechain/ERC20.d.ts @@ -100,7 +100,7 @@ interface ERC20Interface extends ethers.utils.Interface { getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; } -export type ApprovalEvent = TypedEvent< +export type Approval_TypedEvent = TypedEvent< [string, string, BigNumber] & { owner: string; spender: string; @@ -108,7 +108,7 @@ export type ApprovalEvent = TypedEvent< } >; -export type TransferEvent = TypedEvent< +export type Transfer_TypedEvent = TypedEvent< [string, string, BigNumber] & { from: string; to: string; value: BigNumber } >; diff --git a/packages/target-ethers-v5-test/types/Events.d.ts b/packages/target-ethers-v5-test/types/Events.d.ts index 97528264b..8f4f4662e 100644 --- a/packages/target-ethers-v5-test/types/Events.d.ts +++ b/packages/target-ethers-v5-test/types/Events.d.ts @@ -93,25 +93,31 @@ interface EventsInterface extends ethers.utils.Interface { getEvent(nameOrSignatureOrTopic: "NoArgsEvent"): EventFragment; } -export type AnonEvent1Event = TypedEvent<[BigNumber] & { value1: BigNumber }>; +export type AnonEvent1_TypedEvent = TypedEvent< + [BigNumber] & { value1: BigNumber } +>; -export type Event1Event = TypedEvent< +export type Event1_TypedEvent = TypedEvent< [BigNumber, BigNumber] & { value1: BigNumber; value2: BigNumber } >; -export type Event2Event = TypedEvent<[BigNumber] & { arg0: BigNumber }>; +export type Event2_TypedEvent = TypedEvent<[BigNumber] & { arg0: BigNumber }>; -export type Event3Event = TypedEvent< +export type Event3_bool_uint256_TypedEvent = TypedEvent< [boolean, BigNumber] & { value1: boolean; value2: BigNumber } >; -export type Event4Event = TypedEvent< +export type Event3_uint256_TypedEvent = TypedEvent< + [BigNumber] & { value1: BigNumber } +>; + +export type Event4_TypedEvent = TypedEvent< [[BigNumber, string] & { index: BigNumber; name: string }] & { data: [BigNumber, string] & { index: BigNumber; name: string }; } >; -export type NoArgsEventEvent = TypedEvent<[] & {}>; +export type NoArgsEvent_TypedEvent = TypedEvent<[] & {}>; export class Events extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; From b1d079f65e1be7cffd89ed5966ccb6a5409e2a9b Mon Sep 17 00:00:00 2001 From: Soham Zemse <22412996+zemse@users.noreply.github.com> Date: Fri, 3 Sep 2021 03:28:19 +0530 Subject: [PATCH 11/11] [ethers-v5] Change exported events naming --- .../hardhat-project/typechain/ERC20.d.ts | 4 ++-- .../target-ethers-v5-test/test/Events.test.ts | 6 ++++-- packages/target-ethers-v5-test/types/Events.d.ts | 16 +++++++--------- packages/target-ethers-v5/src/codegen/index.ts | 4 ++-- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/hardhat/test/fixture-projects/hardhat-project/typechain/ERC20.d.ts b/packages/hardhat/test/fixture-projects/hardhat-project/typechain/ERC20.d.ts index 86f319a1c..6b79d7b5e 100644 --- a/packages/hardhat/test/fixture-projects/hardhat-project/typechain/ERC20.d.ts +++ b/packages/hardhat/test/fixture-projects/hardhat-project/typechain/ERC20.d.ts @@ -100,7 +100,7 @@ interface ERC20Interface extends ethers.utils.Interface { getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; } -export type Approval_TypedEvent = TypedEvent< +export type ApprovalEvent = TypedEvent< [string, string, BigNumber] & { owner: string; spender: string; @@ -108,7 +108,7 @@ export type Approval_TypedEvent = TypedEvent< } >; -export type Transfer_TypedEvent = TypedEvent< +export type TransferEvent = TypedEvent< [string, string, BigNumber] & { from: string; to: string; value: BigNumber } >; diff --git a/packages/target-ethers-v5-test/test/Events.test.ts b/packages/target-ethers-v5-test/test/Events.test.ts index f3a564129..096b4ad83 100644 --- a/packages/target-ethers-v5-test/test/Events.test.ts +++ b/packages/target-ethers-v5-test/test/Events.test.ts @@ -1,7 +1,7 @@ import { BigNumber, ethers } from 'ethers' import { typedAssert } from 'test-utils' -import { Event1_TypedEvent, Events } from '../types/Events' +import { Event1Event, Events } from '../types/Events' import { createNewBlockchain, deployContract } from './common' describe('Events', () => { @@ -88,7 +88,9 @@ describe('Events', () => { it('typed event import', async () => { const filter = contract.filters.Event1(null, null) const results = (await contract.queryFilter(filter)) as any - ;(results as Event1_TypedEvent[]).map((r) => { + + const results2 = results as Event1Event[] + results2.map((r) => { typedAssert(r.args.value1, BigNumber.from(1)) typedAssert(r.args.value2, BigNumber.from(2)) typedAssert(r.args[0], BigNumber.from(1)) diff --git a/packages/target-ethers-v5-test/types/Events.d.ts b/packages/target-ethers-v5-test/types/Events.d.ts index 8f4f4662e..9ead05340 100644 --- a/packages/target-ethers-v5-test/types/Events.d.ts +++ b/packages/target-ethers-v5-test/types/Events.d.ts @@ -93,31 +93,29 @@ interface EventsInterface extends ethers.utils.Interface { getEvent(nameOrSignatureOrTopic: "NoArgsEvent"): EventFragment; } -export type AnonEvent1_TypedEvent = TypedEvent< - [BigNumber] & { value1: BigNumber } ->; +export type AnonEvent1Event = TypedEvent<[BigNumber] & { value1: BigNumber }>; -export type Event1_TypedEvent = TypedEvent< +export type Event1Event = TypedEvent< [BigNumber, BigNumber] & { value1: BigNumber; value2: BigNumber } >; -export type Event2_TypedEvent = TypedEvent<[BigNumber] & { arg0: BigNumber }>; +export type Event2Event = TypedEvent<[BigNumber] & { arg0: BigNumber }>; -export type Event3_bool_uint256_TypedEvent = TypedEvent< +export type Event3_bool_uint256_Event = TypedEvent< [boolean, BigNumber] & { value1: boolean; value2: BigNumber } >; -export type Event3_uint256_TypedEvent = TypedEvent< +export type Event3_uint256_Event = TypedEvent< [BigNumber] & { value1: BigNumber } >; -export type Event4_TypedEvent = TypedEvent< +export type Event4Event = TypedEvent< [[BigNumber, string] & { index: BigNumber; name: string }] & { data: [BigNumber, string] & { index: BigNumber; name: string }; } >; -export type NoArgsEvent_TypedEvent = TypedEvent<[] & {}>; +export type NoArgsEventEvent = TypedEvent<[] & {}>; export class Events extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; diff --git a/packages/target-ethers-v5/src/codegen/index.ts b/packages/target-ethers-v5/src/codegen/index.ts index 7719013d5..b842c8534 100644 --- a/packages/target-ethers-v5/src/codegen/index.ts +++ b/packages/target-ethers-v5/src/codegen/index.ts @@ -341,8 +341,8 @@ function generateEventTypeExport(event: EventDeclaration, includeArgTypes: boole return ` export type ${event.name}${ - includeArgTypes ? event.inputs.map((input) => '_' + input.type.originalType).join('') : '' - }_TypedEvent = TypedEvent<${arrayOutput} & ${objectOutput}>; + includeArgTypes ? event.inputs.map((input) => '_' + input.type.originalType).join('') + '_Event' : 'Event' + } = TypedEvent<${arrayOutput} & ${objectOutput}>; ` }