From 2380a8fde741ecfaed267badb1e3a1b022801475 Mon Sep 17 00:00:00 2001 From: Kris Kaczor Date: Mon, 5 Jun 2023 13:45:32 +0400 Subject: [PATCH] Add support for ethers v6 in @typechain/hardhat #843 (#845) Co-authored-by: Franco Victorio --- .changeset/tough-radios-smile.md | 6 + README.md | 21 +- .../ethers-v6/types/ethers-contracts/Dai.ts | 5 +- .../types/ethers-contracts/common.ts | 3 - examples/hardhat/hardhat.config.ts | 4 +- examples/hardhat/package.json | 8 +- examples/hardhat/test/counter.ts | 6 +- examples/hardhat/tsconfig.json | 5 +- packages/hardhat-test/hardhat.config.ts | 2 +- packages/hardhat-test/package.json | 6 +- packages/hardhat-test/test/hardhat.test.ts | 2 +- .../hardhat-test/typechain-types/Counter.ts | 199 +++--- packages/hardhat-test/typechain-types/Demo.ts | 101 +-- .../typechain-types/Directory/Hello.ts | 84 +-- .../typechain-types/StructsInConstructor.ts | 89 +-- .../hardhat-test/typechain-types/common.ts | 127 +++- .../factories/Counter__factory.ts | 38 +- .../factories/Demo__factory.ts | 43 +- .../factories/Directory/Hello__factory.ts | 43 +- .../StructsInConstructor__factory.ts | 48 +- .../hardhat-test/typechain-types/hardhat.d.ts | 61 +- packages/hardhat/README.md | 22 +- packages/hardhat/package.json | 14 +- packages/hardhat/src/config.ts | 2 +- packages/hardhat/src/index.ts | 5 +- .../artifacts/contracts/EdgeCases.ts | 84 +-- .../artifacts/contracts/TestContract.ts | 84 +-- .../artifacts/contracts/TestContract1.ts | 84 +-- .../artifacts/contracts/lib/SafeMath.ts | 275 ++++---- .../hardhat-project/typechain-types/common.ts | 127 +++- .../externalArtifacts/ERC20.ts | 586 +++++++----------- .../artifacts/contracts/EdgeCases__factory.ts | 48 +- .../contracts/TestContract1__factory.ts | 43 +- .../contracts/TestContract__factory.ts | 43 +- .../contracts/lib/SafeMath__factory.ts | 40 +- .../externalArtifacts/ERC20__factory.ts | 43 +- .../typechain-types/hardhat.d.ts | 72 ++- .../target-ethers-v6-test/types/common.ts | 3 - .../types/v0.6.4/DataTypesInput.ts | 5 +- .../types/v0.6.4/DataTypesPure.ts | 6 +- .../types/v0.6.4/DataTypesView.ts | 6 +- .../types/v0.6.4/Events.ts | 5 +- .../types/v0.6.4/Issue428_Reproduction/A.ts | 5 +- .../types/v0.6.4/Issue428_Reproduction/B.ts | 5 +- .../types/v0.6.4/Library/Lib.ts | 6 +- .../types/v0.6.4/LibraryConsumer.ts | 6 +- .../v0.6.4/Name-Mangling/NAME12mangling.ts | 6 +- .../types/v0.6.4/Overloads.ts | 6 +- .../types/v0.6.4/Payable/Payable.ts | 6 +- .../types/v0.6.4/Payable/PayableFactory.ts | 6 +- .../types/v0.8.9/ISimpleToken.ts | 5 +- .../types/v0.8.9/Issue552_Reproduction.ts | 6 +- .../v0.8.9/KingOfTheHill/KingOfTheHill.ts | 5 +- .../v0.8.9/KingOfTheHill/Withdrawable.ts | 6 +- .../types/v0.8.9/Rarity/ERC721.ts | 5 +- .../types/v0.8.9/Rarity/ERC721Enumerable.ts | 5 +- .../types/v0.8.9/Rarity/IERC721.ts | 5 +- .../types/v0.8.9/Rarity/IERC721Enumerable.ts | 5 +- .../types/v0.8.9/Rarity/IERC721Receiver.ts | 5 +- .../types/v0.8.9/Rarity/Rarity.ts | 5 +- .../types/v0.8.9/SimpleToken.ts | 5 +- .../types/v0.8.9/nested/a/NestedLibrary.ts | 6 +- .../types/v0.8.9/nested/b/NestedLibrary.ts | 6 +- .../target-ethers-v6/src/codegen/hardhat.ts | 33 +- .../target-ethers-v6/src/codegen/index.ts | 5 +- packages/target-ethers-v6/static/common.ts | 3 - pnpm-lock.yaml | 440 +++---------- 67 files changed, 1497 insertions(+), 1597 deletions(-) create mode 100644 .changeset/tough-radios-smile.md diff --git a/.changeset/tough-radios-smile.md b/.changeset/tough-radios-smile.md new file mode 100644 index 000000000..b08bcf278 --- /dev/null +++ b/.changeset/tough-radios-smile.md @@ -0,0 +1,6 @@ +--- +'@typechain/hardhat': major +'@typechain/ethers-v6': minor +--- + +Added support for ethers v6 in @typechain/hardhat diff --git a/README.md b/README.md index 976f52623..a14b4f592 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ npm install --save-dev typechain ``` -You will also need to install a desired target for example `@typechain/ethers-v5`. [Learn more about targets](#targets-) +You will also need to install a desired target for example `@typechain/ethers-v6`. [Learn more about targets](#targets-) _Take note, that code generated by TypeChain requires TypeScript version 4.3 or newer._ @@ -50,6 +50,7 @@ _Take note, that code generated by TypeChain requires TypeScript version 4.3 or | ------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | | [`typechain`](/packages/typechain) | [![npm](https://img.shields.io/npm/v/typechain.svg)](https://www.npmjs.com/package/typechain) | Core package | - | | [`@typechain/ethers-v5`](/packages/target-ethers-v5) | [![npm](https://img.shields.io/npm/v/@typechain/ethers-v5.svg)](https://www.npmjs.com/package/@typechain/ethers-v5) | Ethers ver 5 support (⚠️ requires TS 4.0 >=) | [example](./examples/ethers-v5) | +| [`@typechain/ethers-v6`](/packages/target-ethers-v6) | [![npm](https://img.shields.io/npm/v/@typechain/ethers-v6.svg)](https://www.npmjs.com/package/@typechain/ethers-v6) | Ethers ver 6 support (⚠️ requires TS 4.0 >=) | [example](./examples/ethers-v6) | | [`@typechain/starknet.js`](/packages/target-starknet) | [![npm](https://img.shields.io/npm/v/@typechain/starknet.svg)](https://www.npmjs.com/package/@typechain/starknet) | Starknet.js ver 3.9 | | | [`@typechain/truffle-v5`](/packages/target-truffle-v5) | [![npm](https://img.shields.io/npm/v/@typechain/truffle-v5.svg)](https://www.npmjs.com/package/@typechain/truffle-v5) | Truffle ver 5 support | [example](./examples/truffle-v5) | | [`@typechain/web3-v1`](/packages/target-web3-v1) | [![npm](https://img.shields.io/npm/v/@typechain/web3-v1.svg)](https://www.npmjs.com/package/@typechain/web3-v1) | Web3 ver 1 support | [example](./examples/web3-v1) | @@ -72,25 +73,25 @@ _Note: If you use hardhat just use [hardhat plugin](https://github.com/ethereum-ts/TypeChain/tree/master/packages/hardhat)._ ``` -typechain --target=(ethers-v5|truffle-v4|truffle-v5|web3-v1|path-to-custom-target) [glob] +typechain --target=(ethers-v5|ethers-v6|truffle-v4|truffle-v5|web3-v1|path-to-custom-target) [glob] ``` - `glob` - pattern that will be used to find ABIs, remember about adding quotes: `typechain "**/*.json"`, examples: `./abis/**/*.abi`, `./abis/?(Oasis.abi|OasisHelper.abi)`. -- `--target` - ethers-v5, truffle-v4, truffle-v5, web3-v1 or path to your custom target. Typechain will try to load - package named: `@typechain/${target}`, so make sure that desired package is installed. +- `--target` - ethers-v5, ethers-v6, truffle-v4, truffle-v5, web3-v1 or path to your custom target. Typechain will try + to load package named: `@typechain/${target}`, so make sure that desired package is installed. - `--out-dir` (optional) - put all generated files to a specific dir. - `--always-generate-overloads` (optional) - some targets won't generate unnecessary types for overloaded functions by default, this option forces to always generate them -- `--discriminate-types` (optional) - ethers-v5 will add an artificial field `contractName` that helps discriminate - between contracts +- `--discriminate-types` (optional) - ethers-v5 and ethers-v6 will add an artificial field `contractName` that helps + discriminate between contracts TypeChain always will rewrite existing files. You should not commit them. Read more in FAQ section. Example: ``` -typechain --target ethers-v5 --out-dir app/contracts './node_modules/neufund-contracts/build/contracts/*.json' +typechain --target ethers-v6 --out-dir app/contracts './node_modules/neufund-contracts/build/contracts/*.json' ``` ## Videos @@ -123,13 +124,15 @@ That's it! Now, you can simply import typings, check out our examples for more d ## Targets 🎯 -### Ethers.js v5 +### Ethers.js v6 -Use `ethers-v5` target to generate wrappers for [ethers.js](https://github.com/ethers-io/ethers.js/) lib. To make it +Use `ethers-v6` target to generate wrappers for [ethers.js](https://github.com/ethers-io/ethers.js/) lib. To make it work great with Hardhat, use [Hardhat plugin](https://github.com/ethereum-ts/TypeChain/tree/master/packages/hardhat). If you use `nodenext` aka `node16modules` flip the flag `--node16-modules` to generate compatible typings. +If you are using Ethers.js v5, use the `@typechain/ethers-v5` target. + If you're using Ethers.js v4, you can find legacy `@typechain/ethers-v4` target on [npm](https://www.npmjs.com/package/@typechain/ethers-v4) and commit [`db551b5`](https://github.com/dethcrypto/TypeChain/tree/db551b5c5f70e86f3ca342551e9e0369d099cfa2). diff --git a/examples/ethers-v6/types/ethers-contracts/Dai.ts b/examples/ethers-v6/types/ethers-contracts/Dai.ts index 22a114db8..597469cec 100644 --- a/examples/ethers-v6/types/ethers-contracts/Dai.ts +++ b/examples/ethers-v6/types/ethers-contracts/Dai.ts @@ -229,9 +229,8 @@ export namespace TransferEvent { } export interface Dai extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): Dai; + waitForDeployment(): Promise; interface: DaiInterface; diff --git a/examples/ethers-v6/types/ethers-contracts/common.ts b/examples/ethers-v6/types/ethers-contracts/common.ts index 7ba778d85..192c895b7 100644 --- a/examples/ethers-v6/types/ethers-contracts/common.ts +++ b/examples/ethers-v6/types/ethers-contracts/common.ts @@ -1,9 +1,6 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ import type { FunctionFragment, Typed, diff --git a/examples/hardhat/hardhat.config.ts b/examples/hardhat/hardhat.config.ts index 038d53321..737e240e9 100644 --- a/examples/hardhat/hardhat.config.ts +++ b/examples/hardhat/hardhat.config.ts @@ -1,5 +1,7 @@ -import '@nomiclabs/hardhat-waffle' import '@typechain/hardhat' +import '@nomicfoundation/hardhat-ethers' +import '@nomicfoundation/hardhat-chai-matchers' + import { HardhatUserConfig } from 'hardhat/types' const config: HardhatUserConfig = { diff --git a/examples/hardhat/package.json b/examples/hardhat/package.json index 2f5b32e6d..d88e4fb07 100644 --- a/examples/hardhat/package.json +++ b/examples/hardhat/package.json @@ -11,9 +11,9 @@ "typecheck": "pnpm compile && pnpm test && pnpm tsc --noEmit" }, "devDependencies": { - "@nomiclabs/hardhat-ethers": "^2.0.2", - "@nomiclabs/hardhat-waffle": "^2.0.1", - "@typechain/ethers-v5": "workspace:^11.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", + "@typechain/ethers-v6": "workspace:^0.3.0", "@typechain/hardhat": "workspace:^7.0.0", "@types/chai": "^4.2.15", "@types/chai-as-promised": "^7.1.3", @@ -23,7 +23,7 @@ "chai-as-promised": "^7.1.1", "dotenv": "^8.2.0", "ethereum-waffle": "^3.2.2", - "ethers": "5.4.0", + "ethers": "6.3.0", "@ethersproject/providers": "5.4.0", "@ethersproject/contracts": "5.4.0", "@ethersproject/abi": "5.4.0", diff --git a/examples/hardhat/test/counter.ts b/examples/hardhat/test/counter.ts index 7a91fcca9..5e0fa2c3f 100644 --- a/examples/hardhat/test/counter.ts +++ b/examples/hardhat/test/counter.ts @@ -17,15 +17,13 @@ describe('Counter', () => { const signers = await ethers.getSigners() // 2 - const counterFactory = await ethers.getContractFactory('Counter', signers[0]) + counter = await ethers.deployContract('Counter') - counter = await counterFactory.deploy() - await counter.deployed() const initialCount = await counter.getCount() // 3 expect(initialCount).to.eq(0) - expect(counter.address).to.properAddress + expect(await counter.getAddress()).to.properAddress }) // 4 diff --git a/examples/hardhat/tsconfig.json b/examples/hardhat/tsconfig.json index 9be962570..6c3b7ce17 100644 --- a/examples/hardhat/tsconfig.json +++ b/examples/hardhat/tsconfig.json @@ -1,11 +1,12 @@ { "compilerOptions": { - "target": "es5", + "target": "ES2015", "module": "commonjs", "strict": true, "esModuleInterop": true, "outDir": "dist", - "resolveJsonModule": true + "resolveJsonModule": true, + "skipLibCheck": true }, "include": ["./scripts", "./test", "./typechain-types"], "files": ["./hardhat.config.ts"] diff --git a/packages/hardhat-test/hardhat.config.ts b/packages/hardhat-test/hardhat.config.ts index 503990e60..08ed7254c 100644 --- a/packages/hardhat-test/hardhat.config.ts +++ b/packages/hardhat-test/hardhat.config.ts @@ -1,6 +1,6 @@ // We load the plugin here. import '@typechain/hardhat' -import '@nomiclabs/hardhat-ethers' +import '@nomicfoundation/hardhat-ethers' import type { HardhatUserConfig } from 'hardhat/types' diff --git a/packages/hardhat-test/package.json b/packages/hardhat-test/package.json index d58218f24..878bac4f4 100644 --- a/packages/hardhat-test/package.json +++ b/packages/hardhat-test/package.json @@ -17,10 +17,10 @@ "devDependencies": { "@ethersproject/providers": "^5.4.7", "@ethersproject/abi": "^5.4.7", - "@nomiclabs/hardhat-ethers": "^2.0.2", - "@typechain/ethers-v5": "workspace:^11.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@typechain/ethers-v6": "workspace:^0.3.0", "@typechain/hardhat": "workspace:^7.0.0", - "ethers": "^5.4.7", + "ethers": "~6.3.0", "hardhat": "^2.9.9", "test-utils": "1.0.0", "typechain": "workspace:^8.2.0" diff --git a/packages/hardhat-test/test/hardhat.test.ts b/packages/hardhat-test/test/hardhat.test.ts index 3ad22c5f7..c0232d3f1 100644 --- a/packages/hardhat-test/test/hardhat.test.ts +++ b/packages/hardhat-test/test/hardhat.test.ts @@ -1,4 +1,4 @@ -import type { Interface } from '@ethersproject/abi' +import type { Interface } from 'ethers' import { ethers } from 'hardhat' import type { AssertTrue, IsExact } from 'test-utils' diff --git a/packages/hardhat-test/typechain-types/Counter.ts b/packages/hardhat-test/typechain-types/Counter.ts index 21bdce34f..9d8ad3bab 100644 --- a/packages/hardhat-test/typechain-types/Counter.ts +++ b/packages/hardhat-test/typechain-types/Counter.ts @@ -3,39 +3,32 @@ /* eslint-disable */ import type { BaseContract, - BigNumber, + BigNumberish, BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result, + Interface, EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; import type { - TypedEventFilter, - TypedEvent, + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, + TypedLogDescription, TypedListener, - OnEvent, + TypedContractMethod, } from "./common"; -export interface CounterInterface extends utils.Interface { - functions: { - "countDown()": FunctionFragment; - "countUp()": FunctionFragment; - "getCount()": FunctionFragment; - }; - +export interface CounterInterface extends Interface { getFunction( - nameOrSignatureOrTopic: "countDown" | "countUp" | "getCount" + nameOrSignature: "countDown" | "countUp" | "getCount" ): FunctionFragment; + getEvent(nameOrSignatureOrTopic: "CountedTo"): EventFragment; + encodeFunctionData(functionFragment: "countDown", values?: undefined): string; encodeFunctionData(functionFragment: "countUp", values?: undefined): string; encodeFunctionData(functionFragment: "getCount", values?: undefined): string; @@ -43,99 +36,101 @@ export interface CounterInterface extends utils.Interface { decodeFunctionResult(functionFragment: "countDown", data: BytesLike): Result; decodeFunctionResult(functionFragment: "countUp", data: BytesLike): Result; decodeFunctionResult(functionFragment: "getCount", data: BytesLike): Result; - - events: { - "CountedTo(uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "CountedTo"): EventFragment; } -export interface CountedToEventObject { - number: BigNumber; +export namespace CountedToEvent { + export type InputTuple = [number: BigNumberish]; + export type OutputTuple = [number: bigint]; + export interface OutputObject { + number: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; } -export type CountedToEvent = TypedEvent<[BigNumber], CountedToEventObject>; - -export type CountedToEventFilter = TypedEventFilter; export interface Counter extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): Counter; + waitForDeployment(): Promise; interface: CounterInterface; - queryFilter( - event: TypedEventFilter, + queryFilter( + event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - countDown( - overrides?: Overrides & { from?: string } - ): Promise; - - countUp( - overrides?: Overrides & { from?: string } - ): Promise; - - getCount(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - countDown( - overrides?: Overrides & { from?: string } - ): Promise; - - countUp( - overrides?: Overrides & { from?: string } - ): Promise; - - getCount(overrides?: CallOverrides): Promise; - - callStatic: { - countDown(overrides?: CallOverrides): Promise; + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + countDown: TypedContractMethod<[], [bigint], "nonpayable">; + + countUp: TypedContractMethod<[], [bigint], "nonpayable">; + + getCount: TypedContractMethod<[], [bigint], "view">; + + getFunction( + key: string | FunctionFragment + ): T; - countUp(overrides?: CallOverrides): Promise; + getFunction( + nameOrSignature: "countDown" + ): TypedContractMethod<[], [bigint], "nonpayable">; + getFunction( + nameOrSignature: "countUp" + ): TypedContractMethod<[], [bigint], "nonpayable">; + getFunction( + nameOrSignature: "getCount" + ): TypedContractMethod<[], [bigint], "view">; - getCount(overrides?: CallOverrides): Promise; - }; + getEvent( + key: "CountedTo" + ): TypedContractEvent< + CountedToEvent.InputTuple, + CountedToEvent.OutputTuple, + CountedToEvent.OutputObject + >; filters: { - "CountedTo(uint256)"(number?: null): CountedToEventFilter; - CountedTo(number?: null): CountedToEventFilter; - }; - - estimateGas: { - countDown(overrides?: Overrides & { from?: string }): Promise; - - countUp(overrides?: Overrides & { from?: string }): Promise; - - getCount(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - countDown( - overrides?: Overrides & { from?: string } - ): Promise; - - countUp( - overrides?: Overrides & { from?: string } - ): Promise; - - getCount(overrides?: CallOverrides): Promise; + "CountedTo(uint256)": TypedContractEvent< + CountedToEvent.InputTuple, + CountedToEvent.OutputTuple, + CountedToEvent.OutputObject + >; + CountedTo: TypedContractEvent< + CountedToEvent.InputTuple, + CountedToEvent.OutputTuple, + CountedToEvent.OutputObject + >; }; } diff --git a/packages/hardhat-test/typechain-types/Demo.ts b/packages/hardhat-test/typechain-types/Demo.ts index fb66a8f88..dae9aab5a 100644 --- a/packages/hardhat-test/typechain-types/Demo.ts +++ b/packages/hardhat-test/typechain-types/Demo.ts @@ -3,75 +3,84 @@ /* eslint-disable */ import type { BaseContract, - BigNumber, BigNumberish, - Signer, - utils, + FunctionFragment, + Interface, + ContractRunner, + ContractMethod, + Listener, } from "ethers"; - -import type { Listener, Provider } from "@ethersproject/providers"; import type { - TypedEventFilter, - TypedEvent, + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, TypedListener, - OnEvent, } from "./common"; export declare namespace Demo { export type Struct1Struct = { a: BigNumberish; b: BigNumberish }; - export type Struct1StructOutput = [BigNumber, BigNumber] & { - a: BigNumber; - b: BigNumber; + export type Struct1StructOutput = [a: bigint, b: bigint] & { + a: bigint; + b: bigint; }; export type Struct2Struct = { a: BigNumberish; b: BigNumberish }; - export type Struct2StructOutput = [BigNumber, BigNumber] & { - a: BigNumber; - b: BigNumber; + export type Struct2StructOutput = [a: bigint, b: bigint] & { + a: bigint; + b: bigint; }; } -export interface DemoInterface extends utils.Interface { - functions: {}; - - events: {}; -} +export interface DemoInterface extends Interface {} export interface Demo extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): Demo; + waitForDeployment(): Promise; interface: DemoInterface; - queryFilter( - event: TypedEventFilter, + queryFilter( + event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: {}; - - callStatic: {}; + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + getFunction( + key: string | FunctionFragment + ): T; filters: {}; - - estimateGas: {}; - - populateTransaction: {}; } diff --git a/packages/hardhat-test/typechain-types/Directory/Hello.ts b/packages/hardhat-test/typechain-types/Directory/Hello.ts index 3606d9775..a68059bfb 100644 --- a/packages/hardhat-test/typechain-types/Directory/Hello.ts +++ b/packages/hardhat-test/typechain-types/Directory/Hello.ts @@ -1,55 +1,69 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import type { BaseContract, Signer, utils } from "ethers"; - -import type { Listener, Provider } from "@ethersproject/providers"; import type { - TypedEventFilter, - TypedEvent, + BaseContract, + FunctionFragment, + Interface, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, TypedListener, - OnEvent, } from "../common"; -export interface HelloInterface extends utils.Interface { - functions: {}; - - events: {}; -} +export interface HelloInterface extends Interface {} export interface Hello extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): Hello; + waitForDeployment(): Promise; interface: HelloInterface; - queryFilter( - event: TypedEventFilter, + queryFilter( + event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; - functions: {}; + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; - callStatic: {}; + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; - filters: {}; + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; - estimateGas: {}; + getFunction( + key: string | FunctionFragment + ): T; - populateTransaction: {}; + filters: {}; } diff --git a/packages/hardhat-test/typechain-types/StructsInConstructor.ts b/packages/hardhat-test/typechain-types/StructsInConstructor.ts index 386dabbc2..0d9729668 100644 --- a/packages/hardhat-test/typechain-types/StructsInConstructor.ts +++ b/packages/hardhat-test/typechain-types/StructsInConstructor.ts @@ -3,66 +3,75 @@ /* eslint-disable */ import type { BaseContract, - BigNumber, BigNumberish, - Signer, - utils, + FunctionFragment, + Interface, + ContractRunner, + ContractMethod, + Listener, } from "ethers"; - -import type { Listener, Provider } from "@ethersproject/providers"; import type { - TypedEventFilter, - TypedEvent, + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, TypedListener, - OnEvent, } from "./common"; export type Vector2Struct = { x: BigNumberish; y: BigNumberish }; -export type Vector2StructOutput = [BigNumber, BigNumber] & { - x: BigNumber; - y: BigNumber; +export type Vector2StructOutput = [x: bigint, y: bigint] & { + x: bigint; + y: bigint; }; -export interface StructsInConstructorInterface extends utils.Interface { - functions: {}; - - events: {}; -} +export interface StructsInConstructorInterface extends Interface {} export interface StructsInConstructor extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): StructsInConstructor; + waitForDeployment(): Promise; interface: StructsInConstructorInterface; - queryFilter( - event: TypedEventFilter, + queryFilter( + event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; - functions: {}; + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; - callStatic: {}; + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; - filters: {}; + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; - estimateGas: {}; + getFunction( + key: string | FunctionFragment + ): T; - populateTransaction: {}; + filters: {}; } diff --git a/packages/hardhat-test/typechain-types/common.ts b/packages/hardhat-test/typechain-types/common.ts index 2fc40c7fb..192c895b7 100644 --- a/packages/hardhat-test/typechain-types/common.ts +++ b/packages/hardhat-test/typechain-types/common.ts @@ -1,33 +1,66 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import type { Listener } from "@ethersproject/providers"; -import type { Event, EventFilter } from "ethers"; - -export interface TypedEvent< - TArgsArray extends Array = any, - TArgsObject = any -> extends Event { - args: TArgsArray & TArgsObject; -} +import type { + FunctionFragment, + Typed, + EventFragment, + ContractTransaction, + ContractTransactionResponse, + DeferredTopicFilter, + EventLog, + TransactionRequest, + LogDescription, +} from "ethers"; -export interface TypedEventFilter<_TEvent extends TypedEvent> - extends EventFilter {} +export interface TypedDeferredTopicFilter<_TCEvent extends TypedContractEvent> + extends DeferredTopicFilter {} -export interface TypedListener { - (...listenerArg: [...__TypechainArgsArray, TEvent]): void; +export interface TypedContractEvent< + InputTuple extends Array = any, + OutputTuple extends Array = any, + OutputObject = any +> { + (...args: Partial): TypedDeferredTopicFilter< + TypedContractEvent + >; + name: string; + fragment: EventFragment; + getFragment(...args: Partial): EventFragment; } -type __TypechainArgsArray = T extends TypedEvent ? U : never; +type __TypechainAOutputTuple = T extends TypedContractEvent< + infer _U, + infer W +> + ? W + : never; +type __TypechainOutputObject = T extends TypedContractEvent< + infer _U, + infer _W, + infer V +> + ? V + : never; + +export interface TypedEventLog + extends Omit { + args: __TypechainAOutputTuple & __TypechainOutputObject; +} -export interface OnEvent { - ( - eventFilter: TypedEventFilter, - listener: TypedListener - ): TRes; - (eventName: string, listener: Listener): TRes; +export interface TypedLogDescription + extends Omit { + args: __TypechainAOutputTuple & __TypechainOutputObject; } +export type TypedListener = ( + ...listenerArg: [ + ...__TypechainAOutputTuple, + TypedEventLog, + ...undefined[] + ] +) => void; + export type MinEthersFactory = { deploy(...a: ARGS[]): Promise; }; @@ -38,7 +71,59 @@ export type GetContractTypeFromFactory = F extends MinEthersFactory< > ? C : never; - export type GetARGsTypeFromFactory = F extends MinEthersFactory ? Parameters : never; + +export type StateMutability = "nonpayable" | "payable" | "view"; + +export type BaseOverrides = Omit; +export type NonPayableOverrides = Omit< + BaseOverrides, + "value" | "blockTag" | "enableCcipRead" +>; +export type PayableOverrides = Omit< + BaseOverrides, + "blockTag" | "enableCcipRead" +>; +export type ViewOverrides = Omit; +export type Overrides = S extends "nonpayable" + ? NonPayableOverrides + : S extends "payable" + ? PayableOverrides + : ViewOverrides; + +export type PostfixOverrides, S extends StateMutability> = + | A + | [...A, Overrides]; +export type ContractMethodArgs< + A extends Array, + S extends StateMutability +> = PostfixOverrides<{ [I in keyof A]-?: A[I] | Typed }, S>; + +export type DefaultReturnType = R extends Array ? R[0] : R; + +// export interface ContractMethod = Array, R = any, D extends R | ContractTransactionResponse = R | ContractTransactionResponse> { +export interface TypedContractMethod< + A extends Array = Array, + R = any, + S extends StateMutability = "payable" +> { + (...args: ContractMethodArgs): S extends "view" + ? Promise> + : Promise; + + name: string; + + fragment: FunctionFragment; + + getFragment(...args: ContractMethodArgs): FunctionFragment; + + populateTransaction( + ...args: ContractMethodArgs + ): Promise; + staticCall(...args: ContractMethodArgs): Promise>; + send(...args: ContractMethodArgs): Promise; + estimateGas(...args: ContractMethodArgs): Promise; + staticCallResult(...args: ContractMethodArgs): Promise; +} diff --git a/packages/hardhat-test/typechain-types/factories/Counter__factory.ts b/packages/hardhat-test/typechain-types/factories/Counter__factory.ts index 79b6f9554..3709b5010 100644 --- a/packages/hardhat-test/typechain-types/factories/Counter__factory.ts +++ b/packages/hardhat-test/typechain-types/factories/Counter__factory.ts @@ -1,8 +1,14 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import { + Contract, + ContractFactory, + ContractTransactionResponse, + Interface, +} from "ethers"; +import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers"; +import type { NonPayableOverrides } from "../common"; import type { Counter, CounterInterface } from "../Counter"; const _abi = [ @@ -80,30 +86,28 @@ export class Counter__factory extends ContractFactory { } } - override deploy(overrides?: Overrides & { from?: string }): Promise { - return super.deploy(overrides || {}) as Promise; - } override getDeployTransaction( - overrides?: Overrides & { from?: string } - ): TransactionRequest { + overrides?: NonPayableOverrides & { from?: string } + ): Promise { return super.getDeployTransaction(overrides || {}); } - override attach(address: string): Counter { - return super.attach(address) as Counter; + override deploy(overrides?: NonPayableOverrides & { from?: string }) { + return super.deploy(overrides || {}) as Promise< + Counter & { + deploymentTransaction(): ContractTransactionResponse; + } + >; } - override connect(signer: Signer): Counter__factory { - return super.connect(signer) as Counter__factory; + override connect(runner: ContractRunner | null): Counter__factory { + return super.connect(runner) as Counter__factory; } static readonly bytecode = _bytecode; static readonly abi = _abi; static createInterface(): CounterInterface { - return new utils.Interface(_abi) as CounterInterface; + return new Interface(_abi) as CounterInterface; } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): Counter { - return new Contract(address, _abi, signerOrProvider) as Counter; + static connect(address: string, runner?: ContractRunner | null): Counter { + return new Contract(address, _abi, runner) as unknown as Counter; } } diff --git a/packages/hardhat-test/typechain-types/factories/Demo__factory.ts b/packages/hardhat-test/typechain-types/factories/Demo__factory.ts index 4a7fdf93d..b0cba22fe 100644 --- a/packages/hardhat-test/typechain-types/factories/Demo__factory.ts +++ b/packages/hardhat-test/typechain-types/factories/Demo__factory.ts @@ -1,8 +1,14 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import { + Contract, + ContractFactory, + ContractTransactionResponse, + Interface, +} from "ethers"; +import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers"; +import type { NonPayableOverrides } from "../common"; import type { Demo, DemoInterface } from "../Demo"; const _abi = [ @@ -68,33 +74,34 @@ export class Demo__factory extends ContractFactory { } } - override deploy( - input1: Demo.Struct1Struct, - input2: Demo.Struct2Struct[], - overrides?: Overrides & { from?: string } - ): Promise { - return super.deploy(input1, input2, overrides || {}) as Promise; - } override getDeployTransaction( input1: Demo.Struct1Struct, input2: Demo.Struct2Struct[], - overrides?: Overrides & { from?: string } - ): TransactionRequest { + overrides?: NonPayableOverrides & { from?: string } + ): Promise { return super.getDeployTransaction(input1, input2, overrides || {}); } - override attach(address: string): Demo { - return super.attach(address) as Demo; + override deploy( + input1: Demo.Struct1Struct, + input2: Demo.Struct2Struct[], + overrides?: NonPayableOverrides & { from?: string } + ) { + return super.deploy(input1, input2, overrides || {}) as Promise< + Demo & { + deploymentTransaction(): ContractTransactionResponse; + } + >; } - override connect(signer: Signer): Demo__factory { - return super.connect(signer) as Demo__factory; + override connect(runner: ContractRunner | null): Demo__factory { + return super.connect(runner) as Demo__factory; } static readonly bytecode = _bytecode; static readonly abi = _abi; static createInterface(): DemoInterface { - return new utils.Interface(_abi) as DemoInterface; + return new Interface(_abi) as DemoInterface; } - static connect(address: string, signerOrProvider: Signer | Provider): Demo { - return new Contract(address, _abi, signerOrProvider) as Demo; + static connect(address: string, runner?: ContractRunner | null): Demo { + return new Contract(address, _abi, runner) as unknown as Demo; } } diff --git a/packages/hardhat-test/typechain-types/factories/Directory/Hello__factory.ts b/packages/hardhat-test/typechain-types/factories/Directory/Hello__factory.ts index 36143c98f..98ed3733d 100644 --- a/packages/hardhat-test/typechain-types/factories/Directory/Hello__factory.ts +++ b/packages/hardhat-test/typechain-types/factories/Directory/Hello__factory.ts @@ -2,14 +2,18 @@ /* tslint:disable */ /* eslint-disable */ import { - Signer, - utils, Contract, ContractFactory, + ContractTransactionResponse, + Interface, +} from "ethers"; +import type { + Signer, BigNumberish, - Overrides, + ContractDeployTransaction, + ContractRunner, } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { NonPayableOverrides } from "../../common"; import type { Hello, HelloInterface } from "../../Directory/Hello"; const _abi = [ @@ -46,31 +50,32 @@ export class Hello__factory extends ContractFactory { } } - override deploy( - arg0: BigNumberish, - overrides?: Overrides & { from?: string } - ): Promise { - return super.deploy(arg0, overrides || {}) as Promise; - } override getDeployTransaction( arg0: BigNumberish, - overrides?: Overrides & { from?: string } - ): TransactionRequest { + overrides?: NonPayableOverrides & { from?: string } + ): Promise { return super.getDeployTransaction(arg0, overrides || {}); } - override attach(address: string): Hello { - return super.attach(address) as Hello; + override deploy( + arg0: BigNumberish, + overrides?: NonPayableOverrides & { from?: string } + ) { + return super.deploy(arg0, overrides || {}) as Promise< + Hello & { + deploymentTransaction(): ContractTransactionResponse; + } + >; } - override connect(signer: Signer): Hello__factory { - return super.connect(signer) as Hello__factory; + override connect(runner: ContractRunner | null): Hello__factory { + return super.connect(runner) as Hello__factory; } static readonly bytecode = _bytecode; static readonly abi = _abi; static createInterface(): HelloInterface { - return new utils.Interface(_abi) as HelloInterface; + return new Interface(_abi) as HelloInterface; } - static connect(address: string, signerOrProvider: Signer | Provider): Hello { - return new Contract(address, _abi, signerOrProvider) as Hello; + static connect(address: string, runner?: ContractRunner | null): Hello { + return new Contract(address, _abi, runner) as unknown as Hello; } } diff --git a/packages/hardhat-test/typechain-types/factories/StructsInConstructor__factory.ts b/packages/hardhat-test/typechain-types/factories/StructsInConstructor__factory.ts index 29f403941..863eba46a 100644 --- a/packages/hardhat-test/typechain-types/factories/StructsInConstructor__factory.ts +++ b/packages/hardhat-test/typechain-types/factories/StructsInConstructor__factory.ts @@ -1,8 +1,14 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import { + Contract, + ContractFactory, + ContractTransactionResponse, + Interface, +} from "ethers"; +import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers"; +import type { NonPayableOverrides } from "../common"; import type { StructsInConstructor, StructsInConstructorInterface, @@ -55,41 +61,41 @@ export class StructsInConstructor__factory extends ContractFactory { } } - override deploy( - segment: [Vector2Struct, Vector2Struct], - overrides?: Overrides & { from?: string } - ): Promise { - return super.deploy( - segment, - overrides || {} - ) as Promise; - } override getDeployTransaction( segment: [Vector2Struct, Vector2Struct], - overrides?: Overrides & { from?: string } - ): TransactionRequest { + overrides?: NonPayableOverrides & { from?: string } + ): Promise { return super.getDeployTransaction(segment, overrides || {}); } - override attach(address: string): StructsInConstructor { - return super.attach(address) as StructsInConstructor; + override deploy( + segment: [Vector2Struct, Vector2Struct], + overrides?: NonPayableOverrides & { from?: string } + ) { + return super.deploy(segment, overrides || {}) as Promise< + StructsInConstructor & { + deploymentTransaction(): ContractTransactionResponse; + } + >; } - override connect(signer: Signer): StructsInConstructor__factory { - return super.connect(signer) as StructsInConstructor__factory; + override connect( + runner: ContractRunner | null + ): StructsInConstructor__factory { + return super.connect(runner) as StructsInConstructor__factory; } static readonly bytecode = _bytecode; static readonly abi = _abi; static createInterface(): StructsInConstructorInterface { - return new utils.Interface(_abi) as StructsInConstructorInterface; + return new Interface(_abi) as StructsInConstructorInterface; } static connect( address: string, - signerOrProvider: Signer | Provider + runner?: ContractRunner | null ): StructsInConstructor { return new Contract( address, _abi, - signerOrProvider - ) as StructsInConstructor; + runner + ) as unknown as StructsInConstructor; } } diff --git a/packages/hardhat-test/typechain-types/hardhat.d.ts b/packages/hardhat-test/typechain-types/hardhat.d.ts index a9a02e00d..6f73f8e1f 100644 --- a/packages/hardhat-test/typechain-types/hardhat.d.ts +++ b/packages/hardhat-test/typechain-types/hardhat.d.ts @@ -6,7 +6,7 @@ import { ethers } from "ethers"; import { FactoryOptions, HardhatEthersHelpers as HardhatEthersHelpersBase, -} from "@nomiclabs/hardhat-ethers/types"; +} from "@nomicfoundation/hardhat-ethers/types"; import * as Contracts from "."; @@ -31,25 +31,63 @@ declare module "hardhat/types/runtime" { getContractAt( name: "Counter", - address: string, + address: string | ethers.Addressable, signer?: ethers.Signer ): Promise; getContractAt( name: "Demo", - address: string, + address: string | ethers.Addressable, signer?: ethers.Signer ): Promise; getContractAt( name: "Hello", - address: string, + address: string | ethers.Addressable, signer?: ethers.Signer ): Promise; getContractAt( name: "StructsInConstructor", - address: string, + address: string | ethers.Addressable, signer?: ethers.Signer ): Promise; + deployContract( + name: "Counter", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + deployContract( + name: "Demo", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + deployContract( + name: "Hello", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + deployContract( + name: "StructsInConstructor", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + + deployContract( + name: "Counter", + args: any[], + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + deployContract( + name: "Demo", + args: any[], + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + deployContract( + name: "Hello", + args: any[], + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + deployContract( + name: "StructsInConstructor", + args: any[], + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + // default types getContractFactory( name: string, @@ -57,13 +95,22 @@ declare module "hardhat/types/runtime" { ): Promise; getContractFactory( abi: any[], - bytecode: ethers.utils.BytesLike, + bytecode: ethers.BytesLike, signer?: ethers.Signer ): Promise; getContractAt( nameOrAbi: string | any[], - address: string, + address: string | ethers.Addressable, signer?: ethers.Signer ): Promise; + deployContract( + name: string, + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + deployContract( + name: string, + args: any[], + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; } } diff --git a/packages/hardhat/README.md b/packages/hardhat/README.md index 1a4e77efe..8ef5234ac 100644 --- a/packages/hardhat/README.md +++ b/packages/hardhat/README.md @@ -17,10 +17,10 @@ Automatically generate TypeScript bindings for smartcontracts while using [Hardh # Installation -If you use Ethers/Waffle do: +If you use Ethers do: ```bash -npm install --save-dev typechain @typechain/hardhat @typechain/ethers-v5 +npm install --save-dev typechain @typechain/hardhat @typechain/ethers-v6 ``` If you're a Truffle user you need: @@ -33,16 +33,16 @@ And add the following statements to your `hardhat.config.js`: ```javascript require('@typechain/hardhat') -require('@nomiclabs/hardhat-ethers') -require('@nomiclabs/hardhat-waffle') +require('@nomicfoundation/hardhat-ethers') +require('@nomicfoundation/hardhat-chai-matchers') ``` Or, if you use TypeScript, add this to your `hardhat.config.ts`: ```typescript import '@typechain/hardhat' -import '@nomiclabs/hardhat-ethers' -import '@nomiclabs/hardhat-waffle' +import '@nomicfoundation/hardhat-ethers' +import '@nomicfoundation/hardhat-chai-matchers' ``` Here's a sample `tsconfig.json`: @@ -101,7 +101,7 @@ This is an example of how to set it: module.exports = { typechain: { outDir: 'src/types', - target: 'ethers-v5', + target: 'ethers-v6', alwaysGenerateOverloads: false, // should overloads with full signatures like deposit(uint256) be generated always, even if there are no overloads? externalArtifacts: ['externalArtifacts/*.json'], // optional array of glob patterns with external artifacts to process (for example external libs from node_modules) dontOverrideCompile: false // defaults to false @@ -111,17 +111,15 @@ module.exports = { ## Usage -`npx hardhat compile` - Compiles and generates Typescript typings for your contracts. Example Waffle + Ethers test that +`npx hardhat compile` - Compiles and generates Typescript typings for your contracts. Example Ethers + Hardhat Chai Matchers test that uses typedefs for contracts: ```ts -import { ethers, waffle } from 'hardhat' +import { ethers } from 'hardhat' import chai from 'chai' -import CounterArtifact from '../artifacts/contracts/Counter.sol/Counter.json' import { Counter } from '../src/types/Counter' -const { deployContract } = waffle const { expect } = chai describe('Counter', () => { @@ -132,7 +130,7 @@ describe('Counter', () => { const signers = await ethers.getSigners() // 2 - counter = (await deployContract(signers[0], CounterArtifact)) as Counter + counter = await ethers.deployContract("Counter") // 3 const initialCount = await counter.getCount() diff --git a/packages/hardhat/package.json b/packages/hardhat/package.json index db92aeb38..04d0c615f 100644 --- a/packages/hardhat/package.json +++ b/packages/hardhat/package.json @@ -33,23 +33,19 @@ "fs-extra": "^9.1.0" }, "devDependencies": { - "@ethersproject/abi": "^5.4.7", - "@ethersproject/providers": "^5.4.7", - "@nomiclabs/hardhat-ethers": "^2.0.2", - "@typechain/ethers-v5": "workspace:^11.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@typechain/ethers-v6": "workspace:^0.3.0", "@types/fs-extra": "^9.0.7", "@types/rimraf": "^3.0.0", - "ethers": "^5.4.7", + "ethers": "^6.1.0", "hardhat": "^2.9.9", "rimraf": "^3.0.2", "typechain": "workspace:^8.2.0", "typescript": "^4" }, "peerDependencies": { - "@ethersproject/abi": "^5.4.7", - "@ethersproject/providers": "^5.4.7", - "@typechain/ethers-v5": "workspace:^11.0.0", - "ethers": "^5.4.7", + "@typechain/ethers-v6": "workspace:^0.3.0", + "ethers": "^6.1.0", "hardhat": "^2.9.9", "typechain": "workspace:^8.2.0" } diff --git a/packages/hardhat/src/config.ts b/packages/hardhat/src/config.ts index 23a3f7f19..4d0111ffb 100644 --- a/packages/hardhat/src/config.ts +++ b/packages/hardhat/src/config.ts @@ -5,7 +5,7 @@ import { TypechainConfig } from './types' export function getDefaultTypechainConfig(config: HardhatConfig): TypechainConfig { const defaultConfig: TypechainConfig = { outDir: 'typechain-types', - target: 'ethers-v5', + target: 'ethers-v6', alwaysGenerateOverloads: false, discriminateTypes: false, tsNocheck: false, diff --git a/packages/hardhat/src/index.ts b/packages/hardhat/src/index.ts index 6c80e58dc..08b1aabc8 100644 --- a/packages/hardhat/src/index.ts +++ b/packages/hardhat/src/index.ts @@ -55,9 +55,10 @@ subtask(TASK_TYPECHAIN_GENERATE_TYPES) return compileSolOutput } - // incremental generation is only supported in 'ethers-v5' + // incremental generation is only supported in 'ethers-v5' and 'ethers-v6' // @todo: probably targets should specify somehow if then support incremental generation this won't work with custom targets - const needsFullRebuild = taskArgsStore.fullRebuild || typechainCfg.target !== 'ethers-v5' + const needsFullRebuild = + taskArgsStore.fullRebuild || (typechainCfg.target !== 'ethers-v5' && typechainCfg.target !== 'ethers-v6') if (!quiet) { // eslint-disable-next-line no-console console.log( diff --git a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/artifacts/contracts/EdgeCases.ts b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/artifacts/contracts/EdgeCases.ts index 8eba81138..31006d6f1 100644 --- a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/artifacts/contracts/EdgeCases.ts +++ b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/artifacts/contracts/EdgeCases.ts @@ -1,55 +1,69 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import type { BaseContract, Signer, utils } from "ethers"; - -import type { Listener, Provider } from "@ethersproject/providers"; import type { - TypedEventFilter, - TypedEvent, + BaseContract, + FunctionFragment, + Interface, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, TypedListener, - OnEvent, } from "../../common"; -export interface EdgeCasesInterface extends utils.Interface { - functions: {}; - - events: {}; -} +export interface EdgeCasesInterface extends Interface {} export interface EdgeCases extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): EdgeCases; + waitForDeployment(): Promise; interface: EdgeCasesInterface; - queryFilter( - event: TypedEventFilter, + queryFilter( + event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; - functions: {}; + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; - callStatic: {}; + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; - filters: {}; + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; - estimateGas: {}; + getFunction( + key: string | FunctionFragment + ): T; - populateTransaction: {}; + filters: {}; } diff --git a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/artifacts/contracts/TestContract.ts b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/artifacts/contracts/TestContract.ts index db01ca653..d9b1c4a62 100644 --- a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/artifacts/contracts/TestContract.ts +++ b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/artifacts/contracts/TestContract.ts @@ -1,55 +1,69 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import type { BaseContract, Signer, utils } from "ethers"; - -import type { Listener, Provider } from "@ethersproject/providers"; import type { - TypedEventFilter, - TypedEvent, + BaseContract, + FunctionFragment, + Interface, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, TypedListener, - OnEvent, } from "../../common"; -export interface TestContractInterface extends utils.Interface { - functions: {}; - - events: {}; -} +export interface TestContractInterface extends Interface {} export interface TestContract extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): TestContract; + waitForDeployment(): Promise; interface: TestContractInterface; - queryFilter( - event: TypedEventFilter, + queryFilter( + event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; - functions: {}; + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; - callStatic: {}; + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; - filters: {}; + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; - estimateGas: {}; + getFunction( + key: string | FunctionFragment + ): T; - populateTransaction: {}; + filters: {}; } diff --git a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/artifacts/contracts/TestContract1.ts b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/artifacts/contracts/TestContract1.ts index dff563516..790f6a613 100644 --- a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/artifacts/contracts/TestContract1.ts +++ b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/artifacts/contracts/TestContract1.ts @@ -1,55 +1,69 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import type { BaseContract, Signer, utils } from "ethers"; - -import type { Listener, Provider } from "@ethersproject/providers"; import type { - TypedEventFilter, - TypedEvent, + BaseContract, + FunctionFragment, + Interface, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, TypedListener, - OnEvent, } from "../../common"; -export interface TestContract1Interface extends utils.Interface { - functions: {}; - - events: {}; -} +export interface TestContract1Interface extends Interface {} export interface TestContract1 extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): TestContract1; + waitForDeployment(): Promise; interface: TestContract1Interface; - queryFilter( - event: TypedEventFilter, + queryFilter( + event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; - functions: {}; + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; - callStatic: {}; + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; - filters: {}; + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; - estimateGas: {}; + getFunction( + key: string | FunctionFragment + ): T; - populateTransaction: {}; + filters: {}; } diff --git a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/artifacts/contracts/lib/SafeMath.ts b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/artifacts/contracts/lib/SafeMath.ts index 279a9ccff..105048e9c 100644 --- a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/artifacts/contracts/lib/SafeMath.ts +++ b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/artifacts/contracts/lib/SafeMath.ts @@ -3,34 +3,25 @@ /* eslint-disable */ import type { BaseContract, - BigNumber, BigNumberish, BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, + FunctionFragment, + Result, + Interface, + ContractRunner, + ContractMethod, + Listener, } from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; import type { - TypedEventFilter, - TypedEvent, + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, TypedListener, - OnEvent, + TypedContractMethod, } from "../../../common"; -export interface SafeMathInterface extends utils.Interface { - functions: { - "add(uint256,uint256)": FunctionFragment; - "div(uint256,uint256)": FunctionFragment; - "mul(uint256,uint256)": FunctionFragment; - "sub(uint256,uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: "add" | "div" | "mul" | "sub" - ): FunctionFragment; +export interface SafeMathInterface extends Interface { + getFunction(nameOrSignature: "add" | "div" | "mul" | "sub"): FunctionFragment; encodeFunctionData( functionFragment: "add", @@ -53,163 +44,107 @@ export interface SafeMathInterface extends utils.Interface { decodeFunctionResult(functionFragment: "div", data: BytesLike): Result; decodeFunctionResult(functionFragment: "mul", data: BytesLike): Result; decodeFunctionResult(functionFragment: "sub", data: BytesLike): Result; - - events: {}; } export interface SafeMath extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): SafeMath; + waitForDeployment(): Promise; interface: SafeMathInterface; - queryFilter( - event: TypedEventFilter, + queryFilter( + event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - add( - num1: BigNumberish, - num2: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - div( - num1: BigNumberish, - num2: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - mul( - num1: BigNumberish, - num2: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - sub( - num1: BigNumberish, - num2: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - }; - - add( - num1: BigNumberish, - num2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - div( - num1: BigNumberish, - num2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - mul( - num1: BigNumberish, - num2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - sub( - num1: BigNumberish, - num2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - callStatic: { - add( - num1: BigNumberish, - num2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - div( - num1: BigNumberish, - num2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - mul( - num1: BigNumberish, - num2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - sub( - num1: BigNumberish, - num2: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + add: TypedContractMethod< + [num1: BigNumberish, num2: BigNumberish], + [bigint], + "view" + >; + + div: TypedContractMethod< + [num1: BigNumberish, num2: BigNumberish], + [bigint], + "view" + >; + + mul: TypedContractMethod< + [num1: BigNumberish, num2: BigNumberish], + [bigint], + "view" + >; + + sub: TypedContractMethod< + [num1: BigNumberish, num2: BigNumberish], + [bigint], + "view" + >; + + getFunction( + key: string | FunctionFragment + ): T; - filters: {}; + getFunction( + nameOrSignature: "add" + ): TypedContractMethod< + [num1: BigNumberish, num2: BigNumberish], + [bigint], + "view" + >; + getFunction( + nameOrSignature: "div" + ): TypedContractMethod< + [num1: BigNumberish, num2: BigNumberish], + [bigint], + "view" + >; + getFunction( + nameOrSignature: "mul" + ): TypedContractMethod< + [num1: BigNumberish, num2: BigNumberish], + [bigint], + "view" + >; + getFunction( + nameOrSignature: "sub" + ): TypedContractMethod< + [num1: BigNumberish, num2: BigNumberish], + [bigint], + "view" + >; - estimateGas: { - add( - num1: BigNumberish, - num2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - div( - num1: BigNumberish, - num2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - mul( - num1: BigNumberish, - num2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - sub( - num1: BigNumberish, - num2: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - add( - num1: BigNumberish, - num2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - div( - num1: BigNumberish, - num2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - mul( - num1: BigNumberish, - num2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - sub( - num1: BigNumberish, - num2: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; + filters: {}; } diff --git a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/common.ts b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/common.ts index 2fc40c7fb..192c895b7 100644 --- a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/common.ts +++ b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/common.ts @@ -1,33 +1,66 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import type { Listener } from "@ethersproject/providers"; -import type { Event, EventFilter } from "ethers"; - -export interface TypedEvent< - TArgsArray extends Array = any, - TArgsObject = any -> extends Event { - args: TArgsArray & TArgsObject; -} +import type { + FunctionFragment, + Typed, + EventFragment, + ContractTransaction, + ContractTransactionResponse, + DeferredTopicFilter, + EventLog, + TransactionRequest, + LogDescription, +} from "ethers"; -export interface TypedEventFilter<_TEvent extends TypedEvent> - extends EventFilter {} +export interface TypedDeferredTopicFilter<_TCEvent extends TypedContractEvent> + extends DeferredTopicFilter {} -export interface TypedListener { - (...listenerArg: [...__TypechainArgsArray, TEvent]): void; +export interface TypedContractEvent< + InputTuple extends Array = any, + OutputTuple extends Array = any, + OutputObject = any +> { + (...args: Partial): TypedDeferredTopicFilter< + TypedContractEvent + >; + name: string; + fragment: EventFragment; + getFragment(...args: Partial): EventFragment; } -type __TypechainArgsArray = T extends TypedEvent ? U : never; +type __TypechainAOutputTuple = T extends TypedContractEvent< + infer _U, + infer W +> + ? W + : never; +type __TypechainOutputObject = T extends TypedContractEvent< + infer _U, + infer _W, + infer V +> + ? V + : never; + +export interface TypedEventLog + extends Omit { + args: __TypechainAOutputTuple & __TypechainOutputObject; +} -export interface OnEvent { - ( - eventFilter: TypedEventFilter, - listener: TypedListener - ): TRes; - (eventName: string, listener: Listener): TRes; +export interface TypedLogDescription + extends Omit { + args: __TypechainAOutputTuple & __TypechainOutputObject; } +export type TypedListener = ( + ...listenerArg: [ + ...__TypechainAOutputTuple, + TypedEventLog, + ...undefined[] + ] +) => void; + export type MinEthersFactory = { deploy(...a: ARGS[]): Promise; }; @@ -38,7 +71,59 @@ export type GetContractTypeFromFactory = F extends MinEthersFactory< > ? C : never; - export type GetARGsTypeFromFactory = F extends MinEthersFactory ? Parameters : never; + +export type StateMutability = "nonpayable" | "payable" | "view"; + +export type BaseOverrides = Omit; +export type NonPayableOverrides = Omit< + BaseOverrides, + "value" | "blockTag" | "enableCcipRead" +>; +export type PayableOverrides = Omit< + BaseOverrides, + "blockTag" | "enableCcipRead" +>; +export type ViewOverrides = Omit; +export type Overrides = S extends "nonpayable" + ? NonPayableOverrides + : S extends "payable" + ? PayableOverrides + : ViewOverrides; + +export type PostfixOverrides, S extends StateMutability> = + | A + | [...A, Overrides]; +export type ContractMethodArgs< + A extends Array, + S extends StateMutability +> = PostfixOverrides<{ [I in keyof A]-?: A[I] | Typed }, S>; + +export type DefaultReturnType = R extends Array ? R[0] : R; + +// export interface ContractMethod = Array, R = any, D extends R | ContractTransactionResponse = R | ContractTransactionResponse> { +export interface TypedContractMethod< + A extends Array = Array, + R = any, + S extends StateMutability = "payable" +> { + (...args: ContractMethodArgs): S extends "view" + ? Promise> + : Promise; + + name: string; + + fragment: FunctionFragment; + + getFragment(...args: ContractMethodArgs): FunctionFragment; + + populateTransaction( + ...args: ContractMethodArgs + ): Promise; + staticCall(...args: ContractMethodArgs): Promise>; + send(...args: ContractMethodArgs): Promise; + estimateGas(...args: ContractMethodArgs): Promise; + staticCallResult(...args: ContractMethodArgs): Promise; +} diff --git a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/externalArtifacts/ERC20.ts b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/externalArtifacts/ERC20.ts index 558fb6779..2cec5ac72 100644 --- a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/externalArtifacts/ERC20.ts +++ b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/externalArtifacts/ERC20.ts @@ -3,46 +3,29 @@ /* eslint-disable */ import type { BaseContract, - BigNumber, BigNumberish, BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result, + Interface, EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; + AddressLike, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; import type { - TypedEventFilter, - TypedEvent, + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, + TypedLogDescription, TypedListener, - OnEvent, + TypedContractMethod, } from "../common"; -export interface ERC20Interface extends utils.Interface { - functions: { - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - }; - +export interface ERC20Interface extends Interface { getFunction( - nameOrSignatureOrTopic: + nameOrSignature: | "allowance" | "approve" | "balanceOf" @@ -56,23 +39,28 @@ export interface ERC20Interface extends utils.Interface { | "transferFrom" ): FunctionFragment; + getEvent(nameOrSignatureOrTopic: "Approval" | "Transfer"): EventFragment; + encodeFunctionData( functionFragment: "allowance", - values: [string, string] + values: [AddressLike, AddressLike] ): string; encodeFunctionData( functionFragment: "approve", - values: [string, BigNumberish] + values: [AddressLike, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "balanceOf", + values: [AddressLike] ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; encodeFunctionData(functionFragment: "decimals", values?: undefined): string; encodeFunctionData( functionFragment: "decreaseAllowance", - values: [string, BigNumberish] + values: [AddressLike, BigNumberish] ): string; encodeFunctionData( functionFragment: "increaseAllowance", - values: [string, BigNumberish] + values: [AddressLike, BigNumberish] ): string; encodeFunctionData(functionFragment: "name", values?: undefined): string; encodeFunctionData(functionFragment: "symbol", values?: undefined): string; @@ -82,11 +70,11 @@ export interface ERC20Interface extends utils.Interface { ): string; encodeFunctionData( functionFragment: "transfer", - values: [string, BigNumberish] + values: [AddressLike, BigNumberish] ): string; encodeFunctionData( functionFragment: "transferFrom", - values: [string, string, BigNumberish] + values: [AddressLike, AddressLike, BigNumberish] ): string; decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; @@ -112,333 +100,231 @@ export interface ERC20Interface extends utils.Interface { functionFragment: "transferFrom", data: BytesLike ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; } -export interface ApprovalEventObject { - owner: string; - spender: string; - value: BigNumber; +export namespace ApprovalEvent { + export type InputTuple = [ + owner: AddressLike, + spender: AddressLike, + value: BigNumberish + ]; + export type OutputTuple = [owner: string, spender: string, value: bigint]; + export interface OutputObject { + owner: string; + spender: string; + value: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; } -export type ApprovalEvent = TypedEvent< - [string, string, BigNumber], - ApprovalEventObject ->; -export type ApprovalEventFilter = TypedEventFilter; - -export interface TransferEventObject { - from: string; - to: string; - value: BigNumber; +export namespace TransferEvent { + export type InputTuple = [ + from: AddressLike, + to: AddressLike, + value: BigNumberish + ]; + export type OutputTuple = [from: string, to: string, value: bigint]; + export interface OutputObject { + from: string; + to: string; + value: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; } -export type TransferEvent = TypedEvent< - [string, string, BigNumber], - TransferEventObject ->; - -export type TransferEventFilter = TypedEventFilter; export interface ERC20 extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): ERC20; + waitForDeployment(): Promise; interface: ERC20Interface; - queryFilter( - event: TypedEventFilter, + queryFilter( + event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string } - ): Promise; - }; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string } - ): Promise; - - callStatic: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + allowance: TypedContractMethod< + [owner: AddressLike, spender: AddressLike], + [bigint], + "view" + >; + + approve: TypedContractMethod< + [spender: AddressLike, amount: BigNumberish], + [boolean], + "nonpayable" + >; + + balanceOf: TypedContractMethod<[account: AddressLike], [bigint], "view">; + + decimals: TypedContractMethod<[], [bigint], "view">; + + decreaseAllowance: TypedContractMethod< + [spender: AddressLike, subtractedValue: BigNumberish], + [boolean], + "nonpayable" + >; + + increaseAllowance: TypedContractMethod< + [spender: AddressLike, addedValue: BigNumberish], + [boolean], + "nonpayable" + >; + + name: TypedContractMethod<[], [string], "view">; + + symbol: TypedContractMethod<[], [string], "view">; + + totalSupply: TypedContractMethod<[], [bigint], "view">; + + transfer: TypedContractMethod< + [recipient: AddressLike, amount: BigNumberish], + [boolean], + "nonpayable" + >; + + transferFrom: TypedContractMethod< + [sender: AddressLike, recipient: AddressLike, amount: BigNumberish], + [boolean], + "nonpayable" + >; + + getFunction( + key: string | FunctionFragment + ): T; - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; + getFunction( + nameOrSignature: "allowance" + ): TypedContractMethod< + [owner: AddressLike, spender: AddressLike], + [bigint], + "view" + >; + getFunction( + nameOrSignature: "approve" + ): TypedContractMethod< + [spender: AddressLike, amount: BigNumberish], + [boolean], + "nonpayable" + >; + getFunction( + nameOrSignature: "balanceOf" + ): TypedContractMethod<[account: AddressLike], [bigint], "view">; + getFunction( + nameOrSignature: "decimals" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "decreaseAllowance" + ): TypedContractMethod< + [spender: AddressLike, subtractedValue: BigNumberish], + [boolean], + "nonpayable" + >; + getFunction( + nameOrSignature: "increaseAllowance" + ): TypedContractMethod< + [spender: AddressLike, addedValue: BigNumberish], + [boolean], + "nonpayable" + >; + getFunction( + nameOrSignature: "name" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "symbol" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "totalSupply" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "transfer" + ): TypedContractMethod< + [recipient: AddressLike, amount: BigNumberish], + [boolean], + "nonpayable" + >; + getFunction( + nameOrSignature: "transferFrom" + ): TypedContractMethod< + [sender: AddressLike, recipient: AddressLike, amount: BigNumberish], + [boolean], + "nonpayable" + >; + + getEvent( + key: "Approval" + ): TypedContractEvent< + ApprovalEvent.InputTuple, + ApprovalEvent.OutputTuple, + ApprovalEvent.OutputObject + >; + getEvent( + key: "Transfer" + ): TypedContractEvent< + TransferEvent.InputTuple, + TransferEvent.OutputTuple, + TransferEvent.OutputObject + >; filters: { - "Approval(address,address,uint256)"( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - Approval( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - - "Transfer(address,address,uint256)"( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - Transfer( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - }; - - estimateGas: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string } - ): Promise; - }; - - populateTransaction: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string } - ): Promise; + "Approval(address,address,uint256)": TypedContractEvent< + ApprovalEvent.InputTuple, + ApprovalEvent.OutputTuple, + ApprovalEvent.OutputObject + >; + Approval: TypedContractEvent< + ApprovalEvent.InputTuple, + ApprovalEvent.OutputTuple, + ApprovalEvent.OutputObject + >; + + "Transfer(address,address,uint256)": TypedContractEvent< + TransferEvent.InputTuple, + TransferEvent.OutputTuple, + TransferEvent.OutputObject + >; + Transfer: TypedContractEvent< + TransferEvent.InputTuple, + TransferEvent.OutputTuple, + TransferEvent.OutputObject + >; }; } diff --git a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/factories/artifacts/contracts/EdgeCases__factory.ts b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/factories/artifacts/contracts/EdgeCases__factory.ts index 25bd15da3..d66603e9b 100644 --- a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/factories/artifacts/contracts/EdgeCases__factory.ts +++ b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/factories/artifacts/contracts/EdgeCases__factory.ts @@ -2,15 +2,19 @@ /* tslint:disable */ /* eslint-disable */ import { - Signer, - utils, Contract, ContractFactory, + ContractTransactionResponse, + Interface, +} from "ethers"; +import type { + Signer, BytesLike, BigNumberish, - Overrides, + ContractDeployTransaction, + ContractRunner, } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { NonPayableOverrides } from "../../../common"; import type { EdgeCases, EdgeCasesInterface, @@ -55,36 +59,34 @@ export class EdgeCases__factory extends ContractFactory { } } - override deploy( - test: BigNumberish, - arg1: BytesLike, - overrides?: Overrides & { from?: string } - ): Promise { - return super.deploy(test, arg1, overrides || {}) as Promise; - } override getDeployTransaction( test: BigNumberish, arg1: BytesLike, - overrides?: Overrides & { from?: string } - ): TransactionRequest { + overrides?: NonPayableOverrides & { from?: string } + ): Promise { return super.getDeployTransaction(test, arg1, overrides || {}); } - override attach(address: string): EdgeCases { - return super.attach(address) as EdgeCases; + override deploy( + test: BigNumberish, + arg1: BytesLike, + overrides?: NonPayableOverrides & { from?: string } + ) { + return super.deploy(test, arg1, overrides || {}) as Promise< + EdgeCases & { + deploymentTransaction(): ContractTransactionResponse; + } + >; } - override connect(signer: Signer): EdgeCases__factory { - return super.connect(signer) as EdgeCases__factory; + override connect(runner: ContractRunner | null): EdgeCases__factory { + return super.connect(runner) as EdgeCases__factory; } static readonly bytecode = _bytecode; static readonly abi = _abi; static createInterface(): EdgeCasesInterface { - return new utils.Interface(_abi) as EdgeCasesInterface; + return new Interface(_abi) as EdgeCasesInterface; } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): EdgeCases { - return new Contract(address, _abi, signerOrProvider) as EdgeCases; + static connect(address: string, runner?: ContractRunner | null): EdgeCases { + return new Contract(address, _abi, runner) as unknown as EdgeCases; } } diff --git a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/factories/artifacts/contracts/TestContract1__factory.ts b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/factories/artifacts/contracts/TestContract1__factory.ts index 5d58c296d..9cbf428b0 100644 --- a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/factories/artifacts/contracts/TestContract1__factory.ts +++ b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/factories/artifacts/contracts/TestContract1__factory.ts @@ -2,14 +2,18 @@ /* tslint:disable */ /* eslint-disable */ import { - Signer, - utils, Contract, ContractFactory, + ContractTransactionResponse, + Interface, +} from "ethers"; +import type { + Signer, BigNumberish, - Overrides, + ContractDeployTransaction, + ContractRunner, } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { NonPayableOverrides } from "../../../common"; import type { TestContract1, TestContract1Interface, @@ -49,34 +53,35 @@ export class TestContract1__factory extends ContractFactory { } } - override deploy( - _amount: BigNumberish, - overrides?: Overrides & { from?: string } - ): Promise { - return super.deploy(_amount, overrides || {}) as Promise; - } override getDeployTransaction( _amount: BigNumberish, - overrides?: Overrides & { from?: string } - ): TransactionRequest { + overrides?: NonPayableOverrides & { from?: string } + ): Promise { return super.getDeployTransaction(_amount, overrides || {}); } - override attach(address: string): TestContract1 { - return super.attach(address) as TestContract1; + override deploy( + _amount: BigNumberish, + overrides?: NonPayableOverrides & { from?: string } + ) { + return super.deploy(_amount, overrides || {}) as Promise< + TestContract1 & { + deploymentTransaction(): ContractTransactionResponse; + } + >; } - override connect(signer: Signer): TestContract1__factory { - return super.connect(signer) as TestContract1__factory; + override connect(runner: ContractRunner | null): TestContract1__factory { + return super.connect(runner) as TestContract1__factory; } static readonly bytecode = _bytecode; static readonly abi = _abi; static createInterface(): TestContract1Interface { - return new utils.Interface(_abi) as TestContract1Interface; + return new Interface(_abi) as TestContract1Interface; } static connect( address: string, - signerOrProvider: Signer | Provider + runner?: ContractRunner | null ): TestContract1 { - return new Contract(address, _abi, signerOrProvider) as TestContract1; + return new Contract(address, _abi, runner) as unknown as TestContract1; } } diff --git a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/factories/artifacts/contracts/TestContract__factory.ts b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/factories/artifacts/contracts/TestContract__factory.ts index 96eae8044..2a82e7e25 100644 --- a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/factories/artifacts/contracts/TestContract__factory.ts +++ b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/factories/artifacts/contracts/TestContract__factory.ts @@ -2,14 +2,18 @@ /* tslint:disable */ /* eslint-disable */ import { - Signer, - utils, Contract, ContractFactory, + ContractTransactionResponse, + Interface, +} from "ethers"; +import type { + Signer, BigNumberish, - Overrides, + ContractDeployTransaction, + ContractRunner, } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { NonPayableOverrides } from "../../../common"; import type { TestContract, TestContractInterface, @@ -75,35 +79,36 @@ export class TestContract__factory extends ContractFactory { return linkedBytecode; } - override deploy( - _amount: BigNumberish, - overrides?: Overrides & { from?: string } - ): Promise { - return super.deploy(_amount, overrides || {}) as Promise; - } override getDeployTransaction( _amount: BigNumberish, - overrides?: Overrides & { from?: string } - ): TransactionRequest { + overrides?: NonPayableOverrides & { from?: string } + ): Promise { return super.getDeployTransaction(_amount, overrides || {}); } - override attach(address: string): TestContract { - return super.attach(address) as TestContract; + override deploy( + _amount: BigNumberish, + overrides?: NonPayableOverrides & { from?: string } + ) { + return super.deploy(_amount, overrides || {}) as Promise< + TestContract & { + deploymentTransaction(): ContractTransactionResponse; + } + >; } - override connect(signer: Signer): TestContract__factory { - return super.connect(signer) as TestContract__factory; + override connect(runner: ContractRunner | null): TestContract__factory { + return super.connect(runner) as TestContract__factory; } static readonly bytecode = _bytecode; static readonly abi = _abi; static createInterface(): TestContractInterface { - return new utils.Interface(_abi) as TestContractInterface; + return new Interface(_abi) as TestContractInterface; } static connect( address: string, - signerOrProvider: Signer | Provider + runner?: ContractRunner | null ): TestContract { - return new Contract(address, _abi, signerOrProvider) as TestContract; + return new Contract(address, _abi, runner) as unknown as TestContract; } } diff --git a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/factories/artifacts/contracts/lib/SafeMath__factory.ts b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/factories/artifacts/contracts/lib/SafeMath__factory.ts index 94ae79f5d..131db98ca 100644 --- a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/factories/artifacts/contracts/lib/SafeMath__factory.ts +++ b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/factories/artifacts/contracts/lib/SafeMath__factory.ts @@ -1,8 +1,14 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import { + Contract, + ContractFactory, + ContractTransactionResponse, + Interface, +} from "ethers"; +import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers"; +import type { NonPayableOverrides } from "../../../../common"; import type { SafeMath, SafeMathInterface, @@ -127,32 +133,28 @@ export class SafeMath__factory extends ContractFactory { } } - override deploy( - overrides?: Overrides & { from?: string } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } override getDeployTransaction( - overrides?: Overrides & { from?: string } - ): TransactionRequest { + overrides?: NonPayableOverrides & { from?: string } + ): Promise { return super.getDeployTransaction(overrides || {}); } - override attach(address: string): SafeMath { - return super.attach(address) as SafeMath; + override deploy(overrides?: NonPayableOverrides & { from?: string }) { + return super.deploy(overrides || {}) as Promise< + SafeMath & { + deploymentTransaction(): ContractTransactionResponse; + } + >; } - override connect(signer: Signer): SafeMath__factory { - return super.connect(signer) as SafeMath__factory; + override connect(runner: ContractRunner | null): SafeMath__factory { + return super.connect(runner) as SafeMath__factory; } static readonly bytecode = _bytecode; static readonly abi = _abi; static createInterface(): SafeMathInterface { - return new utils.Interface(_abi) as SafeMathInterface; + return new Interface(_abi) as SafeMathInterface; } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): SafeMath { - return new Contract(address, _abi, signerOrProvider) as SafeMath; + static connect(address: string, runner?: ContractRunner | null): SafeMath { + return new Contract(address, _abi, runner) as unknown as SafeMath; } } diff --git a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/factories/externalArtifacts/ERC20__factory.ts b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/factories/externalArtifacts/ERC20__factory.ts index 66fcd86c7..366d14989 100644 --- a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/factories/externalArtifacts/ERC20__factory.ts +++ b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/factories/externalArtifacts/ERC20__factory.ts @@ -1,8 +1,14 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import { + Contract, + ContractFactory, + ContractTransactionResponse, + Interface, +} from "ethers"; +import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers"; +import type { NonPayableOverrides } from "../../common"; import type { ERC20, ERC20Interface } from "../../externalArtifacts/ERC20"; const _abi = [ @@ -314,33 +320,34 @@ export class ERC20__factory extends ContractFactory { } } - override deploy( - name_: string, - symbol_: string, - overrides?: Overrides & { from?: string } - ): Promise { - return super.deploy(name_, symbol_, overrides || {}) as Promise; - } override getDeployTransaction( name_: string, symbol_: string, - overrides?: Overrides & { from?: string } - ): TransactionRequest { + overrides?: NonPayableOverrides & { from?: string } + ): Promise { return super.getDeployTransaction(name_, symbol_, overrides || {}); } - override attach(address: string): ERC20 { - return super.attach(address) as ERC20; + override deploy( + name_: string, + symbol_: string, + overrides?: NonPayableOverrides & { from?: string } + ) { + return super.deploy(name_, symbol_, overrides || {}) as Promise< + ERC20 & { + deploymentTransaction(): ContractTransactionResponse; + } + >; } - override connect(signer: Signer): ERC20__factory { - return super.connect(signer) as ERC20__factory; + override connect(runner: ContractRunner | null): ERC20__factory { + return super.connect(runner) as ERC20__factory; } static readonly bytecode = _bytecode; static readonly abi = _abi; static createInterface(): ERC20Interface { - return new utils.Interface(_abi) as ERC20Interface; + return new Interface(_abi) as ERC20Interface; } - static connect(address: string, signerOrProvider: Signer | Provider): ERC20 { - return new Contract(address, _abi, signerOrProvider) as ERC20; + static connect(address: string, runner?: ContractRunner | null): ERC20 { + return new Contract(address, _abi, runner) as unknown as ERC20; } } diff --git a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/hardhat.d.ts b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/hardhat.d.ts index 422d0b73d..654172f72 100644 --- a/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/hardhat.d.ts +++ b/packages/hardhat/test/fixture-projects/hardhat-project/typechain-types/hardhat.d.ts @@ -6,7 +6,7 @@ import { ethers } from "ethers"; import { FactoryOptions, HardhatEthersHelpers as HardhatEthersHelpersBase, -} from "@nomiclabs/hardhat-ethers/types"; +} from "@nomicfoundation/hardhat-ethers/types"; import * as Contracts from "."; @@ -35,30 +35,77 @@ declare module "hardhat/types/runtime" { getContractAt( name: "EdgeCases", - address: string, + address: string | ethers.Addressable, signer?: ethers.Signer ): Promise; getContractAt( name: "SafeMath", - address: string, + address: string | ethers.Addressable, signer?: ethers.Signer ): Promise; getContractAt( name: "TestContract", - address: string, + address: string | ethers.Addressable, signer?: ethers.Signer ): Promise; getContractAt( name: "TestContract1", - address: string, + address: string | ethers.Addressable, signer?: ethers.Signer ): Promise; getContractAt( name: "ERC20", - address: string, + address: string | ethers.Addressable, signer?: ethers.Signer ): Promise; + deployContract( + name: "EdgeCases", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + deployContract( + name: "SafeMath", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + deployContract( + name: "TestContract", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + deployContract( + name: "TestContract1", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + deployContract( + name: "ERC20", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + + deployContract( + name: "EdgeCases", + args: any[], + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + deployContract( + name: "SafeMath", + args: any[], + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + deployContract( + name: "TestContract", + args: any[], + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + deployContract( + name: "TestContract1", + args: any[], + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + deployContract( + name: "ERC20", + args: any[], + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + // default types getContractFactory( name: string, @@ -66,13 +113,22 @@ declare module "hardhat/types/runtime" { ): Promise; getContractFactory( abi: any[], - bytecode: ethers.utils.BytesLike, + bytecode: ethers.BytesLike, signer?: ethers.Signer ): Promise; getContractAt( nameOrAbi: string | any[], - address: string, + address: string | ethers.Addressable, signer?: ethers.Signer ): Promise; + deployContract( + name: string, + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + deployContract( + name: string, + args: any[], + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; } } diff --git a/packages/target-ethers-v6-test/types/common.ts b/packages/target-ethers-v6-test/types/common.ts index 7ba778d85..192c895b7 100644 --- a/packages/target-ethers-v6-test/types/common.ts +++ b/packages/target-ethers-v6-test/types/common.ts @@ -1,9 +1,6 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ import type { FunctionFragment, Typed, diff --git a/packages/target-ethers-v6-test/types/v0.6.4/DataTypesInput.ts b/packages/target-ethers-v6-test/types/v0.6.4/DataTypesInput.ts index 8d311d0e0..d3bc78f1d 100644 --- a/packages/target-ethers-v6-test/types/v0.6.4/DataTypesInput.ts +++ b/packages/target-ethers-v6-test/types/v0.6.4/DataTypesInput.ts @@ -362,9 +362,8 @@ export interface DataTypesInputInterface extends Interface { } export interface DataTypesInput extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): DataTypesInput; + waitForDeployment(): Promise; interface: DataTypesInputInterface; diff --git a/packages/target-ethers-v6-test/types/v0.6.4/DataTypesPure.ts b/packages/target-ethers-v6-test/types/v0.6.4/DataTypesPure.ts index 26d06f7a2..7b605787c 100644 --- a/packages/target-ethers-v6-test/types/v0.6.4/DataTypesPure.ts +++ b/packages/target-ethers-v6-test/types/v0.6.4/DataTypesPure.ts @@ -8,7 +8,6 @@ import type { FunctionFragment, Result, Interface, - AddressLike, ContractRunner, ContractMethod, Listener, @@ -138,9 +137,8 @@ export interface DataTypesPureInterface extends Interface { } export interface DataTypesPure extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): DataTypesPure; + waitForDeployment(): Promise; interface: DataTypesPureInterface; diff --git a/packages/target-ethers-v6-test/types/v0.6.4/DataTypesView.ts b/packages/target-ethers-v6-test/types/v0.6.4/DataTypesView.ts index 8d42440aa..0dfce6ae7 100644 --- a/packages/target-ethers-v6-test/types/v0.6.4/DataTypesView.ts +++ b/packages/target-ethers-v6-test/types/v0.6.4/DataTypesView.ts @@ -8,7 +8,6 @@ import type { FunctionFragment, Result, Interface, - AddressLike, ContractRunner, ContractMethod, Listener, @@ -138,9 +137,8 @@ export interface DataTypesViewInterface extends Interface { } export interface DataTypesView extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): DataTypesView; + waitForDeployment(): Promise; interface: DataTypesViewInterface; diff --git a/packages/target-ethers-v6-test/types/v0.6.4/Events.ts b/packages/target-ethers-v6-test/types/v0.6.4/Events.ts index 9a91a3d7c..5191061b7 100644 --- a/packages/target-ethers-v6-test/types/v0.6.4/Events.ts +++ b/packages/target-ethers-v6-test/types/v0.6.4/Events.ts @@ -201,9 +201,8 @@ export namespace UpdateFrequencySetEvent { } export interface Events extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): Events; + waitForDeployment(): Promise; interface: EventsInterface; diff --git a/packages/target-ethers-v6-test/types/v0.6.4/Issue428_Reproduction/A.ts b/packages/target-ethers-v6-test/types/v0.6.4/Issue428_Reproduction/A.ts index 4aab55fdb..e09106845 100644 --- a/packages/target-ethers-v6-test/types/v0.6.4/Issue428_Reproduction/A.ts +++ b/packages/target-ethers-v6-test/types/v0.6.4/Issue428_Reproduction/A.ts @@ -36,9 +36,8 @@ export namespace CommittedEvent { } export interface A extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): A; + waitForDeployment(): Promise; interface: AInterface; diff --git a/packages/target-ethers-v6-test/types/v0.6.4/Issue428_Reproduction/B.ts b/packages/target-ethers-v6-test/types/v0.6.4/Issue428_Reproduction/B.ts index 87beae044..171590655 100644 --- a/packages/target-ethers-v6-test/types/v0.6.4/Issue428_Reproduction/B.ts +++ b/packages/target-ethers-v6-test/types/v0.6.4/Issue428_Reproduction/B.ts @@ -51,9 +51,8 @@ export namespace Committed_address_array_Event { } export interface B extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): B; + waitForDeployment(): Promise; interface: BInterface; diff --git a/packages/target-ethers-v6-test/types/v0.6.4/Library/Lib.ts b/packages/target-ethers-v6-test/types/v0.6.4/Library/Lib.ts index 5c9136dcb..f9ca7c6ff 100644 --- a/packages/target-ethers-v6-test/types/v0.6.4/Library/Lib.ts +++ b/packages/target-ethers-v6-test/types/v0.6.4/Library/Lib.ts @@ -8,7 +8,6 @@ import type { FunctionFragment, Result, Interface, - AddressLike, ContractRunner, ContractMethod, Listener, @@ -30,9 +29,8 @@ export interface LibInterface extends Interface { } export interface Lib extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): Lib; + waitForDeployment(): Promise; interface: LibInterface; diff --git a/packages/target-ethers-v6-test/types/v0.6.4/LibraryConsumer.ts b/packages/target-ethers-v6-test/types/v0.6.4/LibraryConsumer.ts index 5efd51b49..2675f636c 100644 --- a/packages/target-ethers-v6-test/types/v0.6.4/LibraryConsumer.ts +++ b/packages/target-ethers-v6-test/types/v0.6.4/LibraryConsumer.ts @@ -8,7 +8,6 @@ import type { FunctionFragment, Result, Interface, - AddressLike, ContractRunner, ContractMethod, Listener, @@ -33,9 +32,8 @@ export interface LibraryConsumerInterface extends Interface { } export interface LibraryConsumer extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): LibraryConsumer; + waitForDeployment(): Promise; interface: LibraryConsumerInterface; diff --git a/packages/target-ethers-v6-test/types/v0.6.4/Name-Mangling/NAME12mangling.ts b/packages/target-ethers-v6-test/types/v0.6.4/Name-Mangling/NAME12mangling.ts index 92f013d83..dd97cdda8 100644 --- a/packages/target-ethers-v6-test/types/v0.6.4/Name-Mangling/NAME12mangling.ts +++ b/packages/target-ethers-v6-test/types/v0.6.4/Name-Mangling/NAME12mangling.ts @@ -7,7 +7,6 @@ import type { FunctionFragment, Result, Interface, - AddressLike, ContractRunner, ContractMethod, Listener, @@ -31,9 +30,8 @@ export interface NAME12manglingInterface extends Interface { } export interface NAME12mangling extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): NAME12mangling; + waitForDeployment(): Promise; interface: NAME12manglingInterface; diff --git a/packages/target-ethers-v6-test/types/v0.6.4/Overloads.ts b/packages/target-ethers-v6-test/types/v0.6.4/Overloads.ts index 7e719b643..17614f0bd 100644 --- a/packages/target-ethers-v6-test/types/v0.6.4/Overloads.ts +++ b/packages/target-ethers-v6-test/types/v0.6.4/Overloads.ts @@ -8,7 +8,6 @@ import type { FunctionFragment, Result, Interface, - AddressLike, ContractRunner, ContractMethod, Listener, @@ -46,9 +45,8 @@ export interface OverloadsInterface extends Interface { } export interface Overloads extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): Overloads; + waitForDeployment(): Promise; interface: OverloadsInterface; diff --git a/packages/target-ethers-v6-test/types/v0.6.4/Payable/Payable.ts b/packages/target-ethers-v6-test/types/v0.6.4/Payable/Payable.ts index d2d83cf4f..8222d3c7b 100644 --- a/packages/target-ethers-v6-test/types/v0.6.4/Payable/Payable.ts +++ b/packages/target-ethers-v6-test/types/v0.6.4/Payable/Payable.ts @@ -7,7 +7,6 @@ import type { FunctionFragment, Result, Interface, - AddressLike, ContractRunner, ContractMethod, Listener, @@ -45,9 +44,8 @@ export interface PayableInterface extends Interface { } export interface Payable extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): Payable; + waitForDeployment(): Promise; interface: PayableInterface; diff --git a/packages/target-ethers-v6-test/types/v0.6.4/Payable/PayableFactory.ts b/packages/target-ethers-v6-test/types/v0.6.4/Payable/PayableFactory.ts index 57e5921bb..ffca10cf4 100644 --- a/packages/target-ethers-v6-test/types/v0.6.4/Payable/PayableFactory.ts +++ b/packages/target-ethers-v6-test/types/v0.6.4/Payable/PayableFactory.ts @@ -7,7 +7,6 @@ import type { FunctionFragment, Result, Interface, - AddressLike, ContractRunner, ContractMethod, Listener, @@ -32,9 +31,8 @@ export interface PayableFactoryInterface extends Interface { } export interface PayableFactory extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): PayableFactory; + waitForDeployment(): Promise; interface: PayableFactoryInterface; diff --git a/packages/target-ethers-v6-test/types/v0.8.9/ISimpleToken.ts b/packages/target-ethers-v6-test/types/v0.8.9/ISimpleToken.ts index 1a97488f2..e4493ce8d 100644 --- a/packages/target-ethers-v6-test/types/v0.8.9/ISimpleToken.ts +++ b/packages/target-ethers-v6-test/types/v0.8.9/ISimpleToken.ts @@ -33,9 +33,8 @@ export interface ISimpleTokenInterface extends Interface { } export interface ISimpleToken extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): ISimpleToken; + waitForDeployment(): Promise; interface: ISimpleTokenInterface; diff --git a/packages/target-ethers-v6-test/types/v0.8.9/Issue552_Reproduction.ts b/packages/target-ethers-v6-test/types/v0.8.9/Issue552_Reproduction.ts index c3d34da05..db637736c 100644 --- a/packages/target-ethers-v6-test/types/v0.8.9/Issue552_Reproduction.ts +++ b/packages/target-ethers-v6-test/types/v0.8.9/Issue552_Reproduction.ts @@ -8,7 +8,6 @@ import type { FunctionFragment, Result, Interface, - AddressLike, ContractRunner, ContractMethod, Listener, @@ -72,9 +71,8 @@ export interface Issue552_ReproductionInterface extends Interface { } export interface Issue552_Reproduction extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): Issue552_Reproduction; + waitForDeployment(): Promise; interface: Issue552_ReproductionInterface; diff --git a/packages/target-ethers-v6-test/types/v0.8.9/KingOfTheHill/KingOfTheHill.ts b/packages/target-ethers-v6-test/types/v0.8.9/KingOfTheHill/KingOfTheHill.ts index 73ac6ddc4..df85cd561 100644 --- a/packages/target-ethers-v6-test/types/v0.8.9/KingOfTheHill/KingOfTheHill.ts +++ b/packages/target-ethers-v6-test/types/v0.8.9/KingOfTheHill/KingOfTheHill.ts @@ -64,9 +64,8 @@ export namespace HighestBidIncreasedEvent { } export interface KingOfTheHill extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): KingOfTheHill; + waitForDeployment(): Promise; interface: KingOfTheHillInterface; diff --git a/packages/target-ethers-v6-test/types/v0.8.9/KingOfTheHill/Withdrawable.ts b/packages/target-ethers-v6-test/types/v0.8.9/KingOfTheHill/Withdrawable.ts index 65974dfcf..8231ca56d 100644 --- a/packages/target-ethers-v6-test/types/v0.8.9/KingOfTheHill/Withdrawable.ts +++ b/packages/target-ethers-v6-test/types/v0.8.9/KingOfTheHill/Withdrawable.ts @@ -7,7 +7,6 @@ import type { FunctionFragment, Result, Interface, - AddressLike, ContractRunner, ContractMethod, Listener, @@ -29,9 +28,8 @@ export interface WithdrawableInterface extends Interface { } export interface Withdrawable extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): Withdrawable; + waitForDeployment(): Promise; interface: WithdrawableInterface; diff --git a/packages/target-ethers-v6-test/types/v0.8.9/Rarity/ERC721.ts b/packages/target-ethers-v6-test/types/v0.8.9/Rarity/ERC721.ts index 11da60f71..a572f5af8 100644 --- a/packages/target-ethers-v6-test/types/v0.8.9/Rarity/ERC721.ts +++ b/packages/target-ethers-v6-test/types/v0.8.9/Rarity/ERC721.ts @@ -166,9 +166,8 @@ export namespace TransferEvent { } export interface ERC721 extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): ERC721; + waitForDeployment(): Promise; interface: ERC721Interface; diff --git a/packages/target-ethers-v6-test/types/v0.8.9/Rarity/ERC721Enumerable.ts b/packages/target-ethers-v6-test/types/v0.8.9/Rarity/ERC721Enumerable.ts index 460da25e5..4b5afba88 100644 --- a/packages/target-ethers-v6-test/types/v0.8.9/Rarity/ERC721Enumerable.ts +++ b/packages/target-ethers-v6-test/types/v0.8.9/Rarity/ERC721Enumerable.ts @@ -193,9 +193,8 @@ export namespace TransferEvent { } export interface ERC721Enumerable extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): ERC721Enumerable; + waitForDeployment(): Promise; interface: ERC721EnumerableInterface; diff --git a/packages/target-ethers-v6-test/types/v0.8.9/Rarity/IERC721.ts b/packages/target-ethers-v6-test/types/v0.8.9/Rarity/IERC721.ts index df5d3e6da..bc1b4ede1 100644 --- a/packages/target-ethers-v6-test/types/v0.8.9/Rarity/IERC721.ts +++ b/packages/target-ethers-v6-test/types/v0.8.9/Rarity/IERC721.ts @@ -166,9 +166,8 @@ export namespace TransferEvent { } export interface IERC721 extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): IERC721; + waitForDeployment(): Promise; interface: IERC721Interface; diff --git a/packages/target-ethers-v6-test/types/v0.8.9/Rarity/IERC721Enumerable.ts b/packages/target-ethers-v6-test/types/v0.8.9/Rarity/IERC721Enumerable.ts index 8313d2c75..bfaae3cd3 100644 --- a/packages/target-ethers-v6-test/types/v0.8.9/Rarity/IERC721Enumerable.ts +++ b/packages/target-ethers-v6-test/types/v0.8.9/Rarity/IERC721Enumerable.ts @@ -193,9 +193,8 @@ export namespace TransferEvent { } export interface IERC721Enumerable extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): IERC721Enumerable; + waitForDeployment(): Promise; interface: IERC721EnumerableInterface; diff --git a/packages/target-ethers-v6-test/types/v0.8.9/Rarity/IERC721Receiver.ts b/packages/target-ethers-v6-test/types/v0.8.9/Rarity/IERC721Receiver.ts index d2ab8bc2c..fc8627ec2 100644 --- a/packages/target-ethers-v6-test/types/v0.8.9/Rarity/IERC721Receiver.ts +++ b/packages/target-ethers-v6-test/types/v0.8.9/Rarity/IERC721Receiver.ts @@ -36,9 +36,8 @@ export interface IERC721ReceiverInterface extends Interface { } export interface IERC721Receiver extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): IERC721Receiver; + waitForDeployment(): Promise; interface: IERC721ReceiverInterface; diff --git a/packages/target-ethers-v6-test/types/v0.8.9/Rarity/Rarity.ts b/packages/target-ethers-v6-test/types/v0.8.9/Rarity/Rarity.ts index 6adf0b94b..a1a7e1186 100644 --- a/packages/target-ethers-v6-test/types/v0.8.9/Rarity/Rarity.ts +++ b/packages/target-ethers-v6-test/types/v0.8.9/Rarity/Rarity.ts @@ -312,9 +312,8 @@ export namespace summonedEvent { } export interface Rarity extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): Rarity; + waitForDeployment(): Promise; interface: RarityInterface; diff --git a/packages/target-ethers-v6-test/types/v0.8.9/SimpleToken.ts b/packages/target-ethers-v6-test/types/v0.8.9/SimpleToken.ts index 78eb67e08..760f9e2d7 100644 --- a/packages/target-ethers-v6-test/types/v0.8.9/SimpleToken.ts +++ b/packages/target-ethers-v6-test/types/v0.8.9/SimpleToken.ts @@ -33,9 +33,8 @@ export interface SimpleTokenInterface extends Interface { } export interface SimpleToken extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): SimpleToken; + waitForDeployment(): Promise; interface: SimpleTokenInterface; diff --git a/packages/target-ethers-v6-test/types/v0.8.9/nested/a/NestedLibrary.ts b/packages/target-ethers-v6-test/types/v0.8.9/nested/a/NestedLibrary.ts index 042ef3c71..1ee0dbf6f 100644 --- a/packages/target-ethers-v6-test/types/v0.8.9/nested/a/NestedLibrary.ts +++ b/packages/target-ethers-v6-test/types/v0.8.9/nested/a/NestedLibrary.ts @@ -7,7 +7,6 @@ import type { FunctionFragment, Result, Interface, - AddressLike, ContractRunner, ContractMethod, Listener, @@ -29,9 +28,8 @@ export interface NestedLibraryInterface extends Interface { } export interface NestedLibrary extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): NestedLibrary; + waitForDeployment(): Promise; interface: NestedLibraryInterface; diff --git a/packages/target-ethers-v6-test/types/v0.8.9/nested/b/NestedLibrary.ts b/packages/target-ethers-v6-test/types/v0.8.9/nested/b/NestedLibrary.ts index 042ef3c71..1ee0dbf6f 100644 --- a/packages/target-ethers-v6-test/types/v0.8.9/nested/b/NestedLibrary.ts +++ b/packages/target-ethers-v6-test/types/v0.8.9/nested/b/NestedLibrary.ts @@ -7,7 +7,6 @@ import type { FunctionFragment, Result, Interface, - AddressLike, ContractRunner, ContractMethod, Listener, @@ -29,9 +28,8 @@ export interface NestedLibraryInterface extends Interface { } export interface NestedLibrary extends BaseContract { - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): NestedLibrary; + waitForDeployment(): Promise; interface: NestedLibraryInterface; diff --git a/packages/target-ethers-v6/src/codegen/hardhat.ts b/packages/target-ethers-v6/src/codegen/hardhat.ts index cb04c5667..e9d459307 100644 --- a/packages/target-ethers-v6/src/codegen/hardhat.ts +++ b/packages/target-ethers-v6/src/codegen/hardhat.ts @@ -5,7 +5,7 @@ export function generateHardhatHelper(contracts: string[]): string { return ` import { ethers } from 'ethers' -import { FactoryOptions, HardhatEthersHelpers as HardhatEthersHelpersBase} from "@nomiclabs/hardhat-ethers/types"; +import { FactoryOptions, HardhatEthersHelpers as HardhatEthersHelpersBase} from "@nomicfoundation/hardhat-ethers/types"; import * as Contracts from "." @@ -21,7 +21,23 @@ declare module "hardhat/types/runtime" { .join('\n')} ${contracts - .map((n) => `getContractAt(name: '${n}', address: string, signer?: ethers.Signer): Promise`) + .map( + (n) => + `getContractAt(name: '${n}', address: string | ethers.Addressable, signer?: ethers.Signer): Promise`, + ) + .join('\n')} + + ${contracts + .map( + (n) => `deployContract(name: '${n}', signerOrOptions?: ethers.Signer | FactoryOptions): Promise`, + ) + .join('\n')} + + ${contracts + .map( + (n) => + `deployContract(name: '${n}', args: any[], signerOrOptions?: ethers.Signer | FactoryOptions): Promise`, + ) .join('\n')} // default types @@ -31,14 +47,23 @@ declare module "hardhat/types/runtime" { ): Promise; getContractFactory( abi: any[], - bytecode: ethers.utils.BytesLike, + bytecode: ethers.BytesLike, signer?: ethers.Signer ): Promise; getContractAt( nameOrAbi: string | any[], - address: string, + address: string | ethers.Addressable, signer?: ethers.Signer ): Promise; + deployContract( + name: string, + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + deployContract( + name: string, + args: any[], + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; } } ` diff --git a/packages/target-ethers-v6/src/codegen/index.ts b/packages/target-ethers-v6/src/codegen/index.ts index 852d312b1..fe9af6639 100644 --- a/packages/target-ethers-v6/src/codegen/index.ts +++ b/packages/target-ethers-v6/src/codegen/index.ts @@ -66,9 +66,8 @@ export function codegenContractTypings(contract: Contract, codegenConfig: Codege export interface ${contract.name} extends BaseContract { ${codegenConfig.discriminateTypes ? `contractName: '${contract.name}';\n` : ``} - connect(runner?: ContractRunner | null): BaseContract; - attach(addressOrName: AddressLike): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): ${contract.name}; + waitForDeployment(): Promise; interface: ${contract.name}Interface; diff --git a/packages/target-ethers-v6/static/common.ts b/packages/target-ethers-v6/static/common.ts index 6fdfe4806..1da52a3d4 100644 --- a/packages/target-ethers-v6/static/common.ts +++ b/packages/target-ethers-v6/static/common.ts @@ -1,6 +1,3 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ import type { FunctionFragment, Typed, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 03f5adef4..20e3bbcd8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -145,15 +145,15 @@ importers: '@ethersproject/providers': specifier: 5.4.0 version: 5.4.0 - '@nomiclabs/hardhat-ethers': - specifier: ^2.0.2 - version: 2.0.5(ethers@5.4.0)(hardhat@2.9.9) - '@nomiclabs/hardhat-waffle': - specifier: ^2.0.1 - version: 2.0.3(@nomiclabs/hardhat-ethers@2.0.5)(ethereum-waffle@3.4.0)(ethers@5.4.0)(hardhat@2.9.9) - '@typechain/ethers-v5': - specifier: workspace:^11.0.0 - version: link:../../packages/target-ethers-v5 + '@nomicfoundation/hardhat-chai-matchers': + specifier: ^2.0.0 + version: 2.0.0(@nomicfoundation/hardhat-ethers@3.0.0)(chai@4.3.6)(ethers@6.3.0)(hardhat@2.9.9) + '@nomicfoundation/hardhat-ethers': + specifier: ^3.0.0 + version: 3.0.0(ethers@6.3.0)(hardhat@2.9.9) + '@typechain/ethers-v6': + specifier: workspace:^0.3.0 + version: link:../../packages/target-ethers-v6 '@typechain/hardhat': specifier: workspace:^7.0.0 version: link:../../packages/hardhat @@ -182,8 +182,8 @@ importers: specifier: ^3.2.2 version: 3.4.0(typescript@4.9.5) ethers: - specifier: 5.4.0 - version: 5.4.0 + specifier: 6.3.0 + version: 6.3.0 hardhat: specifier: ^2.9.9 version: 2.9.9(ts-node@10.7.0)(typescript@4.9.5) @@ -351,18 +351,12 @@ importers: specifier: ^9.1.0 version: 9.1.0 devDependencies: - '@ethersproject/abi': - specifier: ^5.4.7 - version: 5.6.0 - '@ethersproject/providers': - specifier: ^5.4.7 - version: 5.6.0 - '@nomiclabs/hardhat-ethers': - specifier: ^2.0.2 - version: 2.0.5(ethers@5.6.0)(hardhat@2.9.9) - '@typechain/ethers-v5': - specifier: workspace:^11.0.0 - version: link:../target-ethers-v5 + '@nomicfoundation/hardhat-ethers': + specifier: ^3.0.0 + version: 3.0.0(ethers@6.3.0)(hardhat@2.9.9) + '@typechain/ethers-v6': + specifier: workspace:^0.3.0 + version: link:../target-ethers-v6 '@types/fs-extra': specifier: ^9.0.7 version: 9.0.13 @@ -370,8 +364,8 @@ importers: specifier: ^3.0.0 version: 3.0.2 ethers: - specifier: ^5.4.7 - version: 5.6.0 + specifier: ^6.1.0 + version: 6.3.0 hardhat: specifier: ^2.9.9 version: 2.9.9(ts-node@10.7.0)(typescript@4.6.2) @@ -393,18 +387,18 @@ importers: '@ethersproject/providers': specifier: ^5.4.7 version: 5.6.0 - '@nomiclabs/hardhat-ethers': - specifier: ^2.0.2 - version: 2.0.5(ethers@5.6.0)(hardhat@2.9.9) - '@typechain/ethers-v5': - specifier: workspace:^11.0.0 - version: link:../target-ethers-v5 + '@nomicfoundation/hardhat-ethers': + specifier: ^3.0.0 + version: 3.0.0(ethers@6.3.0)(hardhat@2.9.9) + '@typechain/ethers-v6': + specifier: workspace:^0.3.0 + version: link:../target-ethers-v6 '@typechain/hardhat': specifier: workspace:^7.0.0 version: link:../hardhat ethers: - specifier: ^5.4.7 - version: 5.6.0 + specifier: ~6.3.0 + version: 6.3.0 hardhat: specifier: ^2.9.9 version: 2.9.9(ts-node@10.7.0)(typescript@4.9.5) @@ -856,6 +850,10 @@ packages: /@adraffy/ens-normalize@1.8.9: resolution: {integrity: sha512-93OmGCV0vO8+JQ3FHG+gZk/MPHzzMPDRiCiFcCQNTCnHaaxsacO3ScTPGlu2wX2dOtgfalbchPcw1cOYYjHCYQ==} + /@adraffy/ens-normalize@1.9.0: + resolution: {integrity: sha512-iowxq3U30sghZotgl4s/oJRci6WPBfNO5YYgk2cIOMCHr3LeGPcsZjCEr+33Q4N+oV3OABDAtA+pyvWjbvBifQ==} + dev: true + /@apollo/protobufjs@1.2.2: resolution: {integrity: sha512-vF+zxhPiLtkwxONs6YanSt1EpwpGilThpneExUN5K3tCymuxNnVq2yojTvnpRjv2QfsEIt/n7ozPIIzBLwGIDQ==} hasBin: true @@ -1388,18 +1386,6 @@ packages: '@ethersproject/properties': 5.6.0 '@ethersproject/strings': 5.6.0 - /@ethersproject/abstract-provider@5.4.0: - resolution: {integrity: sha512-vPBR7HKUBY0lpdllIn7tLIzNN7DrVnhCLKSzY0l8WAwxz686m/aL7ASDzrVxV93GJtIub6N2t4dfZ29CkPOxgA==} - dependencies: - '@ethersproject/bignumber': 5.6.0 - '@ethersproject/bytes': 5.6.0 - '@ethersproject/logger': 5.6.0 - '@ethersproject/networks': 5.6.0 - '@ethersproject/properties': 5.6.0 - '@ethersproject/transactions': 5.6.0 - '@ethersproject/web': 5.6.0 - dev: true - /@ethersproject/abstract-provider@5.6.0: resolution: {integrity: sha512-oPMFlKLN+g+y7a79cLK3WiLcjWFnZQtXWgnLAbHZcN3s7L4v90UHpTOrLk+m3yr0gt+/h9STTM6zrr7PM8uoRw==} dependencies: @@ -1411,16 +1397,6 @@ packages: '@ethersproject/transactions': 5.6.0 '@ethersproject/web': 5.6.0 - /@ethersproject/abstract-signer@5.4.0: - resolution: {integrity: sha512-AieQAzt05HJZS2bMofpuxMEp81AHufA5D6M4ScKwtolj041nrfIbIi8ciNW7+F59VYxXq+V4c3d568Q6l2m8ew==} - dependencies: - '@ethersproject/abstract-provider': 5.6.0 - '@ethersproject/bignumber': 5.6.0 - '@ethersproject/bytes': 5.6.0 - '@ethersproject/logger': 5.6.0 - '@ethersproject/properties': 5.6.0 - dev: true - /@ethersproject/abstract-signer@5.6.0: resolution: {integrity: sha512-WOqnG0NJKtI8n0wWZPReHtaLkDByPL67tn4nBaDAhmVq8sjHTPbCdz4DRhVu/cfTOvfy9w3iq5QZ7BX7zw56BQ==} dependencies: @@ -1430,16 +1406,6 @@ packages: '@ethersproject/logger': 5.6.0 '@ethersproject/properties': 5.6.0 - /@ethersproject/address@5.4.0: - resolution: {integrity: sha512-SD0VgOEkcACEG/C6xavlU1Hy3m5DGSXW3CUHkaaEHbAPPsgi0coP5oNPsxau8eTlZOk/bpa/hKeCNoK5IzVI2Q==} - dependencies: - '@ethersproject/bignumber': 5.6.0 - '@ethersproject/bytes': 5.6.0 - '@ethersproject/keccak256': 5.6.0 - '@ethersproject/logger': 5.6.0 - '@ethersproject/rlp': 5.6.0 - dev: true - /@ethersproject/address@5.6.0: resolution: {integrity: sha512-6nvhYXjbXsHPS+30sHZ+U4VMagFC/9zAk6Gd/h3S21YW4+yfb0WfRtaAIZ4kfM4rrVwqiy284LP0GtL5HXGLxQ==} dependencies: @@ -1449,38 +1415,17 @@ packages: '@ethersproject/logger': 5.6.0 '@ethersproject/rlp': 5.6.0 - /@ethersproject/base64@5.4.0: - resolution: {integrity: sha512-CjQw6E17QDSSC5jiM9YpF7N1aSCHmYGMt9bWD8PWv6YPMxjsys2/Q8xLrROKI3IWJ7sFfZ8B3flKDTM5wlWuZQ==} - dependencies: - '@ethersproject/bytes': 5.6.0 - dev: true - /@ethersproject/base64@5.6.0: resolution: {integrity: sha512-2Neq8wxJ9xHxCF9TUgmKeSh9BXJ6OAxWfeGWvbauPh8FuHEjamgHilllx8KkSd5ErxyHIX7Xv3Fkcud2kY9ezw==} dependencies: '@ethersproject/bytes': 5.6.0 - /@ethersproject/basex@5.4.0: - resolution: {integrity: sha512-J07+QCVJ7np2bcpxydFVf/CuYo9mZ7T73Pe7KQY4c1lRlrixMeblauMxHXD0MPwFmUHZIILDNViVkykFBZylbg==} - dependencies: - '@ethersproject/bytes': 5.6.0 - '@ethersproject/properties': 5.6.0 - dev: true - /@ethersproject/basex@5.6.0: resolution: {integrity: sha512-qN4T+hQd/Md32MoJpc69rOwLYRUXwjTlhHDIeUkUmiN/JyWkkLLMoG0TqvSQKNqZOMgN5stbUYN6ILC+eD7MEQ==} dependencies: '@ethersproject/bytes': 5.6.0 '@ethersproject/properties': 5.6.0 - /@ethersproject/bignumber@5.4.0: - resolution: {integrity: sha512-OXUu9f9hO3vGRIPxU40cignXZVaYyfx6j9NNMjebKdnaCL3anCLSSy8/b8d03vY6dh7duCC0kW72GEC4tZer2w==} - dependencies: - '@ethersproject/bytes': 5.6.0 - '@ethersproject/logger': 5.6.0 - bn.js: 4.12.0 - dev: true - /@ethersproject/bignumber@5.6.0: resolution: {integrity: sha512-VziMaXIUHQlHJmkv1dlcd6GY2PmT0khtAqaMctCIDogxkrarMzA9L94KN1NeXqqOfFD6r0sJT3vCTOFSmZ07DA==} dependencies: @@ -1488,23 +1433,11 @@ packages: '@ethersproject/logger': 5.6.0 bn.js: 4.12.0 - /@ethersproject/bytes@5.4.0: - resolution: {integrity: sha512-H60ceqgTHbhzOj4uRc/83SCN9d+BSUnOkrr2intevqdtEMO1JFVZ1XL84OEZV+QjV36OaZYxtnt4lGmxcGsPfA==} - dependencies: - '@ethersproject/logger': 5.6.0 - dev: true - /@ethersproject/bytes@5.6.0: resolution: {integrity: sha512-3hJPlYemb9V4VLfJF5BfN0+55vltPZSHU3QKUyP9M3Y2TcajbiRrz65UG+xVHOzBereB1b9mn7r12o177xgN7w==} dependencies: '@ethersproject/logger': 5.6.0 - /@ethersproject/constants@5.4.0: - resolution: {integrity: sha512-tzjn6S7sj9+DIIeKTJLjK9WGN2Tj0P++Z8ONEIlZjyoTkBuODN+0VfhAyYksKi43l1Sx9tX2VlFfzjfmr5Wl3Q==} - dependencies: - '@ethersproject/bignumber': 5.6.0 - dev: true - /@ethersproject/constants@5.6.0: resolution: {integrity: sha512-SrdaJx2bK0WQl23nSpV/b1aq293Lh0sUaZT/yYKPDKn4tlAbkH96SPJwIhwSwTsoQQZxuh1jnqsKwyymoiBdWA==} dependencies: @@ -1539,19 +1472,6 @@ packages: '@ethersproject/properties': 5.6.0 '@ethersproject/transactions': 5.6.0 - /@ethersproject/hash@5.4.0: - resolution: {integrity: sha512-xymAM9tmikKgbktOCjW60Z5sdouiIIurkZUr9oW5NOex5uwxrbsYG09kb5bMcNjlVeJD3yPivTNzViIs1GCbqA==} - dependencies: - '@ethersproject/abstract-signer': 5.6.0 - '@ethersproject/address': 5.6.0 - '@ethersproject/bignumber': 5.6.0 - '@ethersproject/bytes': 5.6.0 - '@ethersproject/keccak256': 5.6.0 - '@ethersproject/logger': 5.6.0 - '@ethersproject/properties': 5.6.0 - '@ethersproject/strings': 5.6.0 - dev: true - /@ethersproject/hash@5.6.0: resolution: {integrity: sha512-fFd+k9gtczqlr0/BruWLAu7UAOas1uRRJvOR84uDf4lNZ+bTkGl366qvniUZHKtlqxBRU65MkOobkmvmpHU+jA==} dependencies: @@ -1564,23 +1484,6 @@ packages: '@ethersproject/properties': 5.6.0 '@ethersproject/strings': 5.6.0 - /@ethersproject/hdnode@5.4.0: - resolution: {integrity: sha512-pKxdS0KAaeVGfZPp1KOiDLB0jba11tG6OP1u11QnYfb7pXn6IZx0xceqWRr6ygke8+Kw74IpOoSi7/DwANhy8Q==} - dependencies: - '@ethersproject/abstract-signer': 5.6.0 - '@ethersproject/basex': 5.6.0 - '@ethersproject/bignumber': 5.6.0 - '@ethersproject/bytes': 5.6.0 - '@ethersproject/logger': 5.6.0 - '@ethersproject/pbkdf2': 5.6.0 - '@ethersproject/properties': 5.6.0 - '@ethersproject/sha2': 5.6.0 - '@ethersproject/signing-key': 5.6.0 - '@ethersproject/strings': 5.6.0 - '@ethersproject/transactions': 5.6.0 - '@ethersproject/wordlists': 5.6.0 - dev: true - /@ethersproject/hdnode@5.6.0: resolution: {integrity: sha512-61g3Jp3nwDqJcL/p4nugSyLrpl/+ChXIOtCEM8UDmWeB3JCAt5FoLdOMXQc3WWkc0oM2C0aAn6GFqqMcS/mHTw==} dependencies: @@ -1597,24 +1500,6 @@ packages: '@ethersproject/transactions': 5.6.0 '@ethersproject/wordlists': 5.6.0 - /@ethersproject/json-wallets@5.4.0: - resolution: {integrity: sha512-igWcu3fx4aiczrzEHwG1xJZo9l1cFfQOWzTqwRw/xcvxTk58q4f9M7cjh51EKphMHvrJtcezJ1gf1q1AUOfEQQ==} - dependencies: - '@ethersproject/abstract-signer': 5.6.0 - '@ethersproject/address': 5.6.0 - '@ethersproject/bytes': 5.6.0 - '@ethersproject/hdnode': 5.6.0 - '@ethersproject/keccak256': 5.6.0 - '@ethersproject/logger': 5.6.0 - '@ethersproject/pbkdf2': 5.6.0 - '@ethersproject/properties': 5.6.0 - '@ethersproject/random': 5.6.0 - '@ethersproject/strings': 5.6.0 - '@ethersproject/transactions': 5.6.0 - aes-js: 3.0.0 - scrypt-js: 3.0.1 - dev: true - /@ethersproject/json-wallets@5.6.0: resolution: {integrity: sha512-fmh86jViB9r0ibWXTQipxpAGMiuxoqUf78oqJDlCAJXgnJF024hOOX7qVgqsjtbeoxmcLwpPsXNU0WEe/16qPQ==} dependencies: @@ -1632,56 +1517,26 @@ packages: aes-js: 3.0.0 scrypt-js: 3.0.1 - /@ethersproject/keccak256@5.4.0: - resolution: {integrity: sha512-FBI1plWet+dPUvAzPAeHzRKiPpETQzqSUWR1wXJGHVWi4i8bOSrpC3NwpkPjgeXG7MnugVc1B42VbfnQikyC/A==} - dependencies: - '@ethersproject/bytes': 5.6.0 - js-sha3: 0.5.7 - dev: true - /@ethersproject/keccak256@5.6.0: resolution: {integrity: sha512-tk56BJ96mdj/ksi7HWZVWGjCq0WVl/QvfhFQNeL8fxhBlGoP+L80uDCiQcpJPd+2XxkivS3lwRm3E0CXTfol0w==} dependencies: '@ethersproject/bytes': 5.6.0 js-sha3: 0.8.0 - /@ethersproject/logger@5.4.0: - resolution: {integrity: sha512-xYdWGGQ9P2cxBayt64d8LC8aPFJk6yWCawQi/4eJ4+oJdMMjEBMrIcIMZ9AxhwpPVmnBPrsB10PcXGmGAqgUEQ==} - dev: true - /@ethersproject/logger@5.6.0: resolution: {integrity: sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==} - /@ethersproject/networks@5.4.0: - resolution: {integrity: sha512-5fywtKRDcnaVeA5SjxXH3DOQqe/IbeD/plwydi94SdPps1fbDUrnO6SzDExaruBZXxpxJcO9upG9UComsei4bg==} - dependencies: - '@ethersproject/logger': 5.6.0 - dev: true - /@ethersproject/networks@5.6.0: resolution: {integrity: sha512-DaVzgyThzHgSDLuURhvkp4oviGoGe9iTZW4jMEORHDRCgSZ9K9THGFKqL+qGXqPAYLEgZTf5z2w56mRrPR1MjQ==} dependencies: '@ethersproject/logger': 5.6.0 - /@ethersproject/pbkdf2@5.4.0: - resolution: {integrity: sha512-x94aIv6tiA04g6BnazZSLoRXqyusawRyZWlUhKip2jvoLpzJuLb//KtMM6PEovE47pMbW+Qe1uw+68ameJjB7g==} - dependencies: - '@ethersproject/bytes': 5.6.0 - '@ethersproject/sha2': 5.6.0 - dev: true - /@ethersproject/pbkdf2@5.6.0: resolution: {integrity: sha512-Wu1AxTgJo3T3H6MIu/eejLFok9TYoSdgwRr5oGY1LTLfmGesDoSx05pemsbrPT2gG4cQME+baTSCp5sEo2erZQ==} dependencies: '@ethersproject/bytes': 5.6.0 '@ethersproject/sha2': 5.6.0 - /@ethersproject/properties@5.4.0: - resolution: {integrity: sha512-7jczalGVRAJ+XSRvNA6D5sAwT4gavLq3OXPuV/74o3Rd2wuzSL035IMpIMgei4CYyBdialJMrTqkOnzccLHn4A==} - dependencies: - '@ethersproject/logger': 5.6.0 - dev: true - /@ethersproject/properties@5.6.0: resolution: {integrity: sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==} dependencies: @@ -1740,40 +1595,18 @@ packages: - bufferutil - utf-8-validate - /@ethersproject/random@5.4.0: - resolution: {integrity: sha512-pnpWNQlf0VAZDEOVp1rsYQosmv2o0ITS/PecNw+mS2/btF8eYdspkN0vIXrCMtkX09EAh9bdk8GoXmFXM1eAKw==} - dependencies: - '@ethersproject/bytes': 5.6.0 - '@ethersproject/logger': 5.6.0 - dev: true - /@ethersproject/random@5.6.0: resolution: {integrity: sha512-si0PLcLjq+NG/XHSZz90asNf+YfKEqJGVdxoEkSukzbnBgC8rydbgbUgBbBGLeHN4kAJwUFEKsu3sCXT93YMsw==} dependencies: '@ethersproject/bytes': 5.6.0 '@ethersproject/logger': 5.6.0 - /@ethersproject/rlp@5.4.0: - resolution: {integrity: sha512-0I7MZKfi+T5+G8atId9QaQKHRvvasM/kqLyAH4XxBCBchAooH2EX5rL9kYZWwcm3awYV+XC7VF6nLhfeQFKVPg==} - dependencies: - '@ethersproject/bytes': 5.6.0 - '@ethersproject/logger': 5.6.0 - dev: true - /@ethersproject/rlp@5.6.0: resolution: {integrity: sha512-dz9WR1xpcTL+9DtOT/aDO+YyxSSdO8YIS0jyZwHHSlAmnxA6cKU3TrTd4Xc/bHayctxTgGLYNuVVoiXE4tTq1g==} dependencies: '@ethersproject/bytes': 5.6.0 '@ethersproject/logger': 5.6.0 - /@ethersproject/sha2@5.4.0: - resolution: {integrity: sha512-siheo36r1WD7Cy+bDdE1BJ8y0bDtqXCOxRMzPa4bV1TGt/eTUUt03BHoJNB6reWJD8A30E/pdJ8WFkq+/uz4Gg==} - dependencies: - '@ethersproject/bytes': 5.6.0 - '@ethersproject/logger': 5.6.0 - hash.js: 1.1.7 - dev: true - /@ethersproject/sha2@5.6.0: resolution: {integrity: sha512-1tNWCPFLu1n3JM9t4/kytz35DkuF9MxqkGGEHNauEbaARdm2fafnOyw1s0tIQDPKF/7bkP1u3dbrmjpn5CelyA==} dependencies: @@ -1781,17 +1614,6 @@ packages: '@ethersproject/logger': 5.6.0 hash.js: 1.1.7 - /@ethersproject/signing-key@5.4.0: - resolution: {integrity: sha512-q8POUeywx6AKg2/jX9qBYZIAmKSB4ubGXdQ88l40hmATj29JnG5pp331nAWwwxPn2Qao4JpWHNZsQN+bPiSW9A==} - dependencies: - '@ethersproject/bytes': 5.6.0 - '@ethersproject/logger': 5.6.0 - '@ethersproject/properties': 5.6.0 - bn.js: 4.12.0 - elliptic: 6.5.4 - hash.js: 1.1.7 - dev: true - /@ethersproject/signing-key@5.6.0: resolution: {integrity: sha512-S+njkhowmLeUu/r7ir8n78OUKx63kBdMCPssePS89So1TH4hZqnWFsThEd/GiXYp9qMxVrydf7KdM9MTGPFukA==} dependencies: @@ -1802,16 +1624,6 @@ packages: elliptic: 6.5.4 hash.js: 1.1.7 - /@ethersproject/solidity@5.4.0: - resolution: {integrity: sha512-XFQTZ7wFSHOhHcV1DpcWj7VXECEiSrBuv7JErJvB9Uo+KfCdc3QtUZV+Vjh/AAaYgezUEKbCtE6Khjm44seevQ==} - dependencies: - '@ethersproject/bignumber': 5.6.0 - '@ethersproject/bytes': 5.6.0 - '@ethersproject/keccak256': 5.6.0 - '@ethersproject/sha2': 5.6.0 - '@ethersproject/strings': 5.6.0 - dev: true - /@ethersproject/solidity@5.6.0: resolution: {integrity: sha512-YwF52vTNd50kjDzqKaoNNbC/r9kMDPq3YzDWmsjFTRBcIF1y4JCQJ8gB30wsTfHbaxgxelI5BfxQSxD/PbJOww==} dependencies: @@ -1822,14 +1634,6 @@ packages: '@ethersproject/sha2': 5.6.0 '@ethersproject/strings': 5.6.0 - /@ethersproject/strings@5.4.0: - resolution: {integrity: sha512-k/9DkH5UGDhv7aReXLluFG5ExurwtIpUfnDNhQA29w896Dw3i4uDTz01Quaptbks1Uj9kI8wo9tmW73wcIEaWA==} - dependencies: - '@ethersproject/bytes': 5.6.0 - '@ethersproject/constants': 5.6.0 - '@ethersproject/logger': 5.6.0 - dev: true - /@ethersproject/strings@5.6.0: resolution: {integrity: sha512-uv10vTtLTZqrJuqBZR862ZQjTIa724wGPWQqZrofaPI/kUsf53TBG0I0D+hQ1qyNtllbNzaW+PDPHHUI6/65Mg==} dependencies: @@ -1837,20 +1641,6 @@ packages: '@ethersproject/constants': 5.6.0 '@ethersproject/logger': 5.6.0 - /@ethersproject/transactions@5.4.0: - resolution: {integrity: sha512-s3EjZZt7xa4BkLknJZ98QGoIza94rVjaEed0rzZ/jB9WrIuu/1+tjvYCWzVrystXtDswy7TPBeIepyXwSYa4WQ==} - dependencies: - '@ethersproject/address': 5.6.0 - '@ethersproject/bignumber': 5.6.0 - '@ethersproject/bytes': 5.6.0 - '@ethersproject/constants': 5.6.0 - '@ethersproject/keccak256': 5.6.0 - '@ethersproject/logger': 5.6.0 - '@ethersproject/properties': 5.6.0 - '@ethersproject/rlp': 5.6.0 - '@ethersproject/signing-key': 5.6.0 - dev: true - /@ethersproject/transactions@5.6.0: resolution: {integrity: sha512-4HX+VOhNjXHZyGzER6E/LVI2i6lf9ejYeWD6l4g50AdmimyuStKc39kvKf1bXWQMg7QNVh+uC7dYwtaZ02IXeg==} dependencies: @@ -1864,14 +1654,6 @@ packages: '@ethersproject/rlp': 5.6.0 '@ethersproject/signing-key': 5.6.0 - /@ethersproject/units@5.4.0: - resolution: {integrity: sha512-Z88krX40KCp+JqPCP5oPv5p750g+uU6gopDYRTBGcDvOASh6qhiEYCRatuM/suC4S2XW9Zz90QI35MfSrTIaFg==} - dependencies: - '@ethersproject/bignumber': 5.6.0 - '@ethersproject/constants': 5.6.0 - '@ethersproject/logger': 5.6.0 - dev: true - /@ethersproject/units@5.6.0: resolution: {integrity: sha512-tig9x0Qmh8qbo1w8/6tmtyrm/QQRviBh389EQ+d8fP4wDsBrJBf08oZfoiz1/uenKK9M78yAP4PoR7SsVoTjsw==} dependencies: @@ -1879,26 +1661,6 @@ packages: '@ethersproject/constants': 5.6.0 '@ethersproject/logger': 5.6.0 - /@ethersproject/wallet@5.4.0: - resolution: {integrity: sha512-wU29majLjM6AjCjpat21mPPviG+EpK7wY1+jzKD0fg3ui5fgedf2zEu1RDgpfIMsfn8fJHJuzM4zXZ2+hSHaSQ==} - dependencies: - '@ethersproject/abstract-provider': 5.6.0 - '@ethersproject/abstract-signer': 5.6.0 - '@ethersproject/address': 5.6.0 - '@ethersproject/bignumber': 5.6.0 - '@ethersproject/bytes': 5.6.0 - '@ethersproject/hash': 5.6.0 - '@ethersproject/hdnode': 5.6.0 - '@ethersproject/json-wallets': 5.6.0 - '@ethersproject/keccak256': 5.6.0 - '@ethersproject/logger': 5.6.0 - '@ethersproject/properties': 5.6.0 - '@ethersproject/random': 5.6.0 - '@ethersproject/signing-key': 5.6.0 - '@ethersproject/transactions': 5.6.0 - '@ethersproject/wordlists': 5.6.0 - dev: true - /@ethersproject/wallet@5.6.0: resolution: {integrity: sha512-qMlSdOSTyp0MBeE+r7SUhr1jjDlC1zAXB8VD84hCnpijPQiSNbxr6GdiLXxpUs8UKzkDiNYYC5DRI3MZr+n+tg==} dependencies: @@ -1918,16 +1680,6 @@ packages: '@ethersproject/transactions': 5.6.0 '@ethersproject/wordlists': 5.6.0 - /@ethersproject/web@5.4.0: - resolution: {integrity: sha512-1bUusGmcoRLYgMn6c1BLk1tOKUIFuTg8j+6N8lYlbMpDesnle+i3pGSagGNvwjaiLo4Y5gBibwctpPRmjrh4Og==} - dependencies: - '@ethersproject/base64': 5.6.0 - '@ethersproject/bytes': 5.6.0 - '@ethersproject/logger': 5.6.0 - '@ethersproject/properties': 5.6.0 - '@ethersproject/strings': 5.6.0 - dev: true - /@ethersproject/web@5.6.0: resolution: {integrity: sha512-G/XHj0hV1FxI2teHRfCGvfBUHFmU+YOSbCxlAMqJklxSa7QMiHFQfAxvwY2PFqgvdkxEKwRNr/eCjfAPEm2Ctg==} dependencies: @@ -1937,16 +1689,6 @@ packages: '@ethersproject/properties': 5.6.0 '@ethersproject/strings': 5.6.0 - /@ethersproject/wordlists@5.4.0: - resolution: {integrity: sha512-FemEkf6a+EBKEPxlzeVgUaVSodU7G0Na89jqKjmWMlDB0tomoU8RlEMgUvXyqtrg8N4cwpLh8nyRnm1Nay1isA==} - dependencies: - '@ethersproject/bytes': 5.6.0 - '@ethersproject/hash': 5.6.0 - '@ethersproject/logger': 5.6.0 - '@ethersproject/properties': 5.6.0 - '@ethersproject/strings': 5.6.0 - dev: true - /@ethersproject/wordlists@5.6.0: resolution: {integrity: sha512-q0bxNBfIX3fUuAo9OmjlEYxP40IB8ABgb7HjEZCL5IKubzV3j30CWi2rqQbjTS2HfoyQbfINoKcTVWP4ejwR7Q==} dependencies: @@ -2262,24 +2004,33 @@ packages: fastq: 1.13.0 dev: true - /@nomiclabs/hardhat-ethers@2.0.5(ethers@5.4.0)(hardhat@2.9.9): - resolution: {integrity: sha512-A2gZAGB6kUvLx+kzM92HKuUF33F1FSe90L0TmkXkT2Hh0OKRpvWZURUSU2nghD2yC4DzfEZ3DftfeHGvZ2JTUw==} + /@nomicfoundation/hardhat-chai-matchers@2.0.0(@nomicfoundation/hardhat-ethers@3.0.0)(chai@4.3.6)(ethers@6.3.0)(hardhat@2.9.9): + resolution: {integrity: sha512-e2ZFunJBIWDcFKIxQt6GpFRRKUn8ZshoiZ5cmgaKOR1S9XwimiCs2aLUCZ/xjNrdl049kPqdVKYDj6aYeR6WuQ==} peerDependencies: - ethers: ^5.0.0 - hardhat: ^2.0.0 + '@nomicfoundation/hardhat-ethers': ^3.0.0 + chai: ^4.2.0 + ethers: ^6.1.0 + hardhat: ^2.9.4 dependencies: - ethers: 5.4.0 + '@ethersproject/abi': 5.6.0 + '@nomicfoundation/hardhat-ethers': 3.0.0(ethers@6.3.0)(hardhat@2.9.9) + '@types/chai-as-promised': 7.1.5 + chai: 4.3.6 + chai-as-promised: 7.1.1(chai@4.3.6) + deep-eql: 4.1.3 + ethers: 6.3.0 hardhat: 2.9.9(ts-node@10.7.0)(typescript@4.9.5) + ordinal: 1.0.3 dev: true - /@nomiclabs/hardhat-ethers@2.0.5(ethers@5.6.0)(hardhat@2.9.9): - resolution: {integrity: sha512-A2gZAGB6kUvLx+kzM92HKuUF33F1FSe90L0TmkXkT2Hh0OKRpvWZURUSU2nghD2yC4DzfEZ3DftfeHGvZ2JTUw==} + /@nomicfoundation/hardhat-ethers@3.0.0(ethers@6.3.0)(hardhat@2.9.9): + resolution: {integrity: sha512-0A2hs39YUta//O9EcITnFw/iGzUztJ4FB4UIc2mgdZ2nXvDZUmkQO+Vtdt/guJ6gP66EPbwvFW7t1SRReMGrvg==} peerDependencies: - ethers: ^5.0.0 + ethers: ^6.1.0 hardhat: ^2.0.0 dependencies: - ethers: 5.6.0 - hardhat: 2.9.9(ts-node@10.7.0)(typescript@4.6.2) + ethers: 6.3.0 + hardhat: 2.9.9(ts-node@10.7.0)(typescript@4.9.5) dev: true /@nomiclabs/hardhat-etherscan@2.1.8(hardhat@2.9.9): @@ -2325,22 +2076,6 @@ packages: - web3-utils dev: true - /@nomiclabs/hardhat-waffle@2.0.3(@nomiclabs/hardhat-ethers@2.0.5)(ethereum-waffle@3.4.0)(ethers@5.4.0)(hardhat@2.9.9): - resolution: {integrity: sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg==} - peerDependencies: - '@nomiclabs/hardhat-ethers': ^2.0.0 - ethereum-waffle: ^3.2.0 - ethers: ^5.0.0 - hardhat: ^2.0.0 - dependencies: - '@nomiclabs/hardhat-ethers': 2.0.5(ethers@5.4.0)(hardhat@2.9.9) - '@types/sinon-chai': 3.2.8 - '@types/web3': 1.0.19 - ethereum-waffle: 3.4.0(typescript@4.9.5) - ethers: 5.4.0 - hardhat: 2.9.9(ts-node@10.7.0)(typescript@4.9.5) - dev: true - /@nomiclabs/hardhat-web3@2.0.0(hardhat@2.9.9)(web3@1.7.1): resolution: {integrity: sha512-zt4xN+D+fKl3wW2YlTX3k9APR3XZgPkxJYf36AcliJn3oujnKEVRZaHu0PhgLjO+gR+F/kiYayo9fgd2L8970Q==} peerDependencies: @@ -3616,17 +3351,6 @@ packages: '@types/json-schema': 7.0.9 optional: true - /@types/underscore@1.11.4: - resolution: {integrity: sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==} - dev: true - - /@types/web3@1.0.19: - resolution: {integrity: sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==} - dependencies: - '@types/bn.js': 5.1.0 - '@types/underscore': 1.11.4 - dev: true - /@types/web3@1.2.2: resolution: {integrity: sha512-eFiYJKggNrOl0nsD+9cMh2MLk4zVBfXfGnVeRFbpiZzBE20eet4KLA3fXcjSuHaBn0RnQzwLAGdgzgzdet4C0A==} deprecated: This is a stub types definition. web3 provides its own type definitions, so you do not need this installed. @@ -6285,6 +6009,13 @@ packages: type-detect: 4.0.8 dev: true + /deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 + dev: true + /deep-equal@1.1.1: resolution: {integrity: sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==} dependencies: @@ -7470,44 +7201,6 @@ packages: uuid: 2.0.1 xmlhttprequest: 1.8.0 - /ethers@5.4.0: - resolution: {integrity: sha512-hqN1x0CV8VMpQ25WnNEjaMqtB3nA4DRAb2FSmmNaUbD1dF6kWbHs8YaXbVvD37FCg3GTEyc4rV9Pxafk1ByHKw==} - dependencies: - '@ethersproject/abi': 5.4.0 - '@ethersproject/abstract-provider': 5.4.0 - '@ethersproject/abstract-signer': 5.4.0 - '@ethersproject/address': 5.4.0 - '@ethersproject/base64': 5.4.0 - '@ethersproject/basex': 5.4.0 - '@ethersproject/bignumber': 5.4.0 - '@ethersproject/bytes': 5.4.0 - '@ethersproject/constants': 5.4.0 - '@ethersproject/contracts': 5.4.0 - '@ethersproject/hash': 5.4.0 - '@ethersproject/hdnode': 5.4.0 - '@ethersproject/json-wallets': 5.4.0 - '@ethersproject/keccak256': 5.4.0 - '@ethersproject/logger': 5.4.0 - '@ethersproject/networks': 5.4.0 - '@ethersproject/pbkdf2': 5.4.0 - '@ethersproject/properties': 5.4.0 - '@ethersproject/providers': 5.4.0 - '@ethersproject/random': 5.4.0 - '@ethersproject/rlp': 5.4.0 - '@ethersproject/sha2': 5.4.0 - '@ethersproject/signing-key': 5.4.0 - '@ethersproject/solidity': 5.4.0 - '@ethersproject/strings': 5.4.0 - '@ethersproject/transactions': 5.4.0 - '@ethersproject/units': 5.4.0 - '@ethersproject/wallet': 5.4.0 - '@ethersproject/web': 5.4.0 - '@ethersproject/wordlists': 5.4.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: true - /ethers@5.6.0: resolution: {integrity: sha512-00FP71jt6bW3ndO5DhgH9mLIZhoCGnAKFLu8qig5KmV03ubEChKf2ilB3g6fX512tTYo+tSMDJ5WpCJWdBHkBQ==} dependencies: @@ -7559,6 +7252,21 @@ packages: - bufferutil - utf-8-validate + /ethers@6.3.0: + resolution: {integrity: sha512-CKFYvTne1YT4S1glTiu7TgGsj0t6c6GAD7evrIk8zbeUb6nK8dcUPAiAWM8uDX/1NmRTvLM9+1Vnn49hwKtEzw==} + engines: {node: '>=14.0.0'} + dependencies: + '@adraffy/ens-normalize': 1.9.0 + '@noble/hashes': 1.1.2 + '@noble/secp256k1': 1.7.1 + aes-js: 4.0.0-beta.3 + tslib: 2.4.0 + ws: 8.5.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + /ethjs-unit@0.1.6: resolution: {integrity: sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=} engines: {node: '>=6.5.0', npm: '>=3'} @@ -11624,6 +11332,10 @@ packages: wcwidth: 1.0.1 optional: true + /ordinal@1.0.3: + resolution: {integrity: sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==} + dev: true + /original-require@1.0.1: resolution: {integrity: sha1-DxMEcVhM0zURxew4yNWSE/msXiA=}