Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Generated factory import unnecessary Provider from ethers when there is a contract named Provider #904

Open
trongthanht3 opened this issue Aug 29, 2024 · 0 comments

Comments

@trongthanht3
Copy link

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",
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant