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

Posted

技术标签:

【中文标题】如何以编程方式将 ethers.js 库与 Rinkeby 连接?【英文标题】:How to connect ethers.js library with Rinkeby programmatically? 【发布时间】:2021-08-28 17:10:53 【问题描述】:

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

 const provider = ethers.getDefaultProvider(network, 
    etherscan: ETHERSCAN_API_KEY,
    infura: INFURA_API_KEY,

此外,这将是获取签名者以签署交易的方式:

 const signer = provider.getSigner()

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

TypeError:provider.getSigner 不是函数

如何使用 ethers.js 来实现?

【问题讨论】:

【参考方案1】:

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);

【讨论】:

到 2021 年仍然如此,而且这个解决方案有效【参考方案2】:

ethers.getDefaultProvider 似乎以某种方式损坏或过时。反而, 您应该直接连接到特定的 Provider,例如 Alchemy:

const provider = new ethers.providers.AlchemyProvider("rinkeby", apiKey)

或对于 Infura:

const provider = new ethers.providers.InfuraProvider("rinkeby", apiKey)

在这之后,很容易得到一个签名者:

const signer = provider.getSigner()

const walletSigner = wallet.connect(provider);

您可以阅读有关此here 的更多信息。

【讨论】:

我也一直在尝试从 InfuraProvider 获取签名者,但不断收到错误消息“API 提供者不支持签名 (operation="getSigner", code=UNSUPPORTED_OPERATION, version=providers/5.4. 3)" 知道为什么会发生这种情况吗? @Vlad 请在下面查看我的答案。

以上是关于如何以编程方式将 ethers.js 库与 Rinkeby 连接?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 ethers.js 与元掩码连接起来?

如何使用 Ethers.js 制作自定义链连接按钮

ethers.js读写合约里的状态变量

ethers.js:provider.getGasPrice()

Web3 系列开发教程——创建你的第一个 NFT使用 Ethers.js 铸造 NFT | 测试用例

如何使用来自独立 node.js 应用程序的 ethers.js 连接到 Metamask 钱包?