📝

ethersのContractにJsonRPCProvider食わせたら怒られる

2021/10/23に公開

環境

  • ethers@5.4.4
  • @ethersproject/providers@5.5.0
  • typescript@4.4.4

再現コード

import { Contract } from 'ethers';
import { JsonRpcProvider } from '@ethersproject/providers';
const abi = [];
const provider = new JsonRpcProvider('');
const contract = new Contract('', abi, provider);
// Argument of type 'JsonRpcProvider' is not assignable to parameter of type 'Provider | Signer | undefined'.
// Type 'JsonRpcProvider' is not assignable to type 'Provider'.
//    The types returned by 'resolveName(...)' are incompatible between these types.
//     Type 'Promise<string | null>' is not assignable to type 'Promise<string>'.
//     Type 'string | null' is not assignable to type 'string'.
//     Type 'null' is not assignable to type 'string'.ts(2345)

原因

ethersのバージョンミスマッチだと思われる。

eslintに @ethersproject/providers をimportしてるのにdependenciesに追加されてないと言われて、雑に入れたらprovidersだけ最新バージョンが入って、元のethersはちょい古いバージョン使ってたので発生した。

解決方法

ethers@5.5.1 にアップデートしてバージョンを一致させた。

Discussion