UNPKG

hardhat-typechain

Version:
131 lines (91 loc) 3.45 kB
# hardhat-typechain _Zero-config Typechain support_ _Updated for Hardhat!_ _Now supports Ethers v5 and Truffle v5!_ _Updated for TypeChain v3!_ Add [Typechain](https://www.github.com/ethereum-ts/TypeChain) tasks to your hardhat project! ## What [TypeChain](https://www.github.com/ethereum-ts/TypeChain) gives you Typescript bindings for your smart contracts. Now, your tests and frontend code can be typesafe and magically autocomplete smart contract function names! ## Installation ```bash npm i hardhat-typechain typechain ts-generator # choose plugin for required target, only need to install one of these npm i @typechain/ethers-v5 @typechain/truffle-v5 @typechain/web3-v1 ``` And add the following statement to your `hardhat.config.js`: ```js require("hardhat-typechain"); ``` Or, if you are using TypeScript, add this to your `hardhat.config.ts`: ```js import "hardhat-typechain"; ``` ## Zero Config Usage Run the _compile_ task as normal, and Typechain artifacts will automatically be generated in a root directory called `typechain`. Further configuration options are detailed below. ## Tasks This plugin overrides the _compile_ task and automatically generates new Typechain artifacts on each compilation. There is an optional flag `--no-typechain` which can be passed in to skip Typechain compilation. This plugin adds the _typechain_ task to hardhat: ``` Generate Typechain typings for compiled contracts ``` ## Configuration This plugin extends the `hardhatConfig` optional `typechain` object. The object contains two fields, `outDir` and `target`. `outDir` is the output directory of the artifacts that TypeChain creates (defaults to `typechain`). `target` is one of the targets specified by the TypeChain [docs](https://github.com/ethereum-ts/TypeChain#cli) (defaults to `ethers`). This is an example of how to set it: ```js module.exports = { typechain: { outDir: "src/types", target: "ethers-v5", }, }; ``` ## Usage `npx hardhat compile` - Compiles and generates Typescript typings for your contracts. Example Waffle + Ethers test that uses typedefs for contracts: ```ts import { ethers, waffle } from "@nomiclabs/hardhat"; import chai from "chai"; import { Wallet } from "ethers"; import CounterArtifact from "../artifacts/Counter.json"; import { Counter } from "../typechain/Counter"; const { deployContract } = waffle; const { expect } = chai; describe("Counter", () => { let counter: Counter; beforeEach(async () => { // 1 const signers = await ethers.signers(); // 2 counter = (await deployContract( <Wallet>signers[0], CounterArtifact )) as Counter; const initialCount = await counter.getCount(); // 3 expect(initialCount).to.eq(0); expect(counter.address).to.properAddress; }); // 4 describe("count up", async () => { it("should count up", async () => { await counter.countUp(); let count = await counter.getCount(); expect(count).to.eq(1); }); }); describe("count down", async () => { // 5 it("should fail", async () => { await counter.countDown(); }); it("should count down", async () => { await counter.countUp(); await counter.countDown(); const count = await counter.getCount(); expect(count).to.eq(0); }); }); }); ``` See this [starter kit](https://github.com/rhlsthrm/typescript-solidity-dev-starter-kit) for a full example!