如何以编程方式将 ethers.js 库与 Rinkeby 连接?

del*_*ete 9 ethereum web3js ethers.js

根据ethers.js官方文档,这应该是使用自定义数据连接到特定网络(如Rinkeby -testnet)的方式:

 const provider = ethers.getDefaultProvider(network, {
    etherscan: ETHERSCAN_API_KEY,
    infura: INFURA_API_KEY,
Run Code Online (Sandbox Code Playgroud)

此外,这也是获得签名者来签署交易的方法:

 const signer = provider.getSigner()
Run Code Online (Sandbox Code Playgroud)

但是,现在默认提供程序提供了“getSigner”方法。

类型错误:provider.getSigner 不是函数

如何使用 ethers.js 实现这一点?

Sil*_*des 9

InfuraProvider 的 getSigner() 不起作用,请使用:

const infuraProvider = new ethers.providers.InfuraProvider(network, API_KEY);
const wallet = new ethers.Wallet(privateKey, infuraProvider);
const signer = wallet.connect(infuraProvider);
contract = new ethers.Contract(smartContractAddress, abi, signer);
Run Code Online (Sandbox Code Playgroud)


iti*_*nce 7

ethers.getDefaultProvider似乎有些破损或过时了。相反,您应该直接连接到特定的提供程序,对于 Alchemy 如下所示:

const provider = new ethers.providers.AlchemyProvider("rinkeby", apiKey)
Run Code Online (Sandbox Code Playgroud)

或对于 Infura:

const provider = new ethers.providers.InfuraProvider("rinkeby", apiKey)
Run Code Online (Sandbox Code Playgroud)

之后,很容易获得签名者:

const signer = provider.getSigner()
Run Code Online (Sandbox Code Playgroud)

或者

const walletSigner = wallet.connect(provider);
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读有关此内容的更多信息。

  • 我也一直在尝试从 InfuraProvider 获取签名者,但不断收到错误“API 提供程序不支持签名(操作 =“getSigner”,代码 = UNSUPPORTED_OPERATION,版本 =providers/5.4.3)” 知道为什么这可能正在发生? (2认同)

Pra*_*har 5

这对我有用:

const provider = new ethers.providers.JsonRpcProvider(url)
const signer = provider.getSigner()
Run Code Online (Sandbox Code Playgroud)

从 Alchemy文档中了解这一点

ethers.js文档