You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 19:45:58