ethers.js中如何使用from关键字指定交易发送方
ethers.js指定交易发送方的等效实现
和web3.js在send()入参中显式传入from字段指定发送方的逻辑不同,ethers.js的交易发送方和签名器(Signer)强绑定,不需要、也不推荐在交易参数中手动传递from字段,对应web3示例的等效写法如下:
- 推荐标准写法:提前用绑定了目标发送方地址的Signer初始化合约实例,后续调用合约写方法时,会自动以该Signer对应的地址作为交易发送方,无需额外传参
// 获取绑定了目标发送地址this.state.account的签名器 const targetSigner = provider.getSigner(this.state.account) // 用签名器初始化可写合约实例 const aggregator = new ethers.Contract(contractAddress, aggregatorAbi, targetSigner) // 发起withdraw交易,发送方自动为this.state.account,和web3示例效果完全一致 const txRes = await aggregator.withdraw() // 等待交易上链确认 await txRes.wait()
- 临时指定发送方写法:如果当前持有的是Provider初始化的只读合约实例,可以在调用写方法前临时连接对应发送方的Signer,不需要重新初始化合约
// 已有的只读合约实例(用provider初始化) const aggregatorReadOnly = new ethers.Contract(contractAddress, aggregatorAbi, provider) // 临时绑定发送方签名器后发起交易 const txRes = await aggregatorReadOnly .connect(provider.getSigner(this.state.account)) .withdraw() await txRes.wait()
注意:不要模仿web3.js的写法,在
withdraw()的传参对象里手动加from字段。ethers.js会自动从Signer实例读取匹配的发送地址,手动传入from大概率会触发地址校验失败、签名不匹配的报错。
内容的提问来源于stack exchange,提问作者Azzor
相关产品推荐
相关产品推荐

