如何以编程方式将 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:provider.getGasPrice()