hardhat-deploy-ethers
Version:
Hardhat TypeScript plugin boilerplate
101 lines (67 loc) • 3.38 kB
Markdown
[](https://hardhat.org)
[ ](https://hardhat.org) plugin extension for `@nomicfoundation/hardhat-ethers` and its integration with [ethers.js](https://github.com/ethers-io/ethers.js/).
The extension add support for [hardhat-deploy](https://github.com/wighawag/hardhat-deploy).
`hardhat-deploy-ethers` require the installation of `hardhat-deploy` and `@nomicfoundation/hardhat-ethers`
Note that you cannot use `@nomicfoundation/hardhat-toolbox` for installing `@nomicfoundation/hardhat-ethers` as this interfere with the typing extensions provided by `hardhat-deploy-ethers`
```bash
npm install --save-dev @nomicfoundation/hardhat-ethers ethers hardhat-deploy hardhat-deploy-ethers
```
Which means you then add the following statement to your `hardhat.config.js`:
```js
require("@nomicfoundation/hardhat-ethers");
require("hardhat-deploy");
require("hardhat-deploy-ethers");
```
Or, if you are using TypeScript, add this to your `hardhat.config.ts`:
```ts
import '@nomicfoundation/hardhat-ethers';
import 'hardhat-deploy';
import 'hardhat-deploy-ethers';
```
Note that if you were using `@nomicfoundation/hardhat-toolbox` you can simply add the dependencies it added for you with
```bash
npm install --save-dev @nomicfoundation/hardhat-chai-matchers @nomicfoundation/hardhat-ethers @typechain/hardhat hardhat-gas-reporter solidity-coverage
```
and add them to your hardhat.config.js
```js
require('@nomicfoundation/hardhat-chai-matchers');
require('@nomicfoundation/hardhat-ethers');
require('@typechain/hardhat');
require('hardhat-gas-reporter');
require('solidity-coverage');
```
or hardhat.config.ts (typescript)
```ts
import '@nomicfoundation/hardhat-chai-matchers';
import '@nomicfoundation/hardhat-ethers';
import '@typechain/hardhat';
import 'hardhat-gas-reporter';
import 'solidity-coverage';
```
This plugin creates no additional tasks.
This object has add some extra `hardhat-deploy` specific functionalities to the `hre.ethers` added already by `@nomicfoundation/hardhat-ethers`
These helpers are added to the `ethers` object:
```ts
interface HardhatEthersHelpers {
getContractAtWithSignerAddress: <ContractType extends ethers.BaseContract = ethers.BaseContract>(nameOrAbi: string | any[], address: string, signer: string) => Promise<ContractType>;
getSignerOrNull: (address: string) => Promise<SignerWithAddress | null>;
getNamedSigners: () => Promise<Record<string, SignerWithAddress>>;
getNamedSigner: (name: string) => Promise<SignerWithAddress>;
getNamedSignerOrNull: (name: string) => Promise<SignerWithAddress | null>;
getUnnamedSigners: () => Promise<SignerWithAddress[]>;
getContract: <ContractType extends ethers.BaseContract = ethers.BaseContract>(name: string, signer?: ethers.Signer | string) => Promise<ContractType>;
getContractOrNull: <ContractType extends ethers.BaseContract = ethers.BaseContract>(name: string, signer?: ethers.Signer | string) => Promise<ContractType | null>;
}
```
There are no additional steps you need to take for this plugin to work.
It automatically integrate with the `hardhat-deploy` plugin if detected and let you do the following:
```js
const contract = await hre.ethers.getContract('<deploymentName>');
```