-
Notifications
You must be signed in to change notification settings - Fork 375
Open
Description
I have a contract named Provider
. When I generate Typechain with target=ethers-v6
, Provider_factory
will unnecessarily import Provider
from ethers
. I checked other contracts, but there’s no Provider
imported.
This is my contract:
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.20;
contract Provider {
uint public someNumber;
event SomethingChanged(uint newNumber);
event Withdrawal(uint amount, uint when);
constructor() {}
function changeSomething(uint newNumber) public {
someNumber = newNumber;
emit SomethingChanged(newNumber);
}
}
Import part of Provider__factory.ts
:
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import {
Contract,
ContractFactory,
ContractTransactionResponse,
Interface,
} from "ethers";
import type {
Signer,
ContractDeployTransaction,
Provider,
ContractRunner,
} from "ethers";
import type { NonPayableOverrides } from "../common";
import type { Provider, ProviderInterface } from "../Provider";
const _abi = [
{
inputs: [],
stateMutability: "nonpayable",
type: "constructor",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "uint256",
name: "newNumber",
type: "uint256",
...
I think this is a bug in Typechain. This incorrect import will lead to an error and an ambiguous type for the Provider when used in other scripts. 2 errors in Provider__factory.ts
Duplicate identifier 'Provider'.
Property 'deploy' in type 'Provider__factory' is not assignable to the same property in base type 'ContractFactory<any[], BaseContract>'. Type '(overrides?: (NonPayableOverrides & { from?: string | undefined; }) | undefined) => Promise<Provider & { deploymentTransaction(): ContractTransactionResponse; }>' is not assignable to type '(...args: ContractMethodArgs<any[]>) => Promise<BaseContract & { deploymentTransaction(): ContractTransactionResponse; } & Omit<...>>'. Type 'Promise<Provider & { deploymentTransaction(): ContractTransactionResponse; }>' is not assignable to type 'Promise<BaseContract & { deploymentTransaction(): ContractTransactionResponse; } & Omit<BaseContract, keyof BaseContract>>'. Type 'Provider & { deploymentTransaction(): ContractTransactionResponse; }' is not assignable to type 'BaseContract & { deploymentTransaction(): ContractTransactionResponse; } & Omit<BaseContract, keyof BaseContract>'. Type 'Provider & { deploymentTransaction(): ContractTransactionResponse; }' is missing the following properties from type 'BaseContract': target, interface, runner, filters, and 11 more.
My environment:
"@typechain/ethers-v6": "^0.5.1",
"ethers": "^6.13.2",
"hardhat": "^2.22.8",
Metadata
Metadata
Assignees
Labels
No labels