Ethers.js,向智能合约汇款(接收功能)

Posted

技术标签:

【中文标题】Ethers.js,向智能合约汇款(接收功能)【英文标题】:Ethers.js, send money to a smart contract (receive function) 【发布时间】:2021-12-17 20:31:51 【问题描述】:

我有一个带有接收功能的智能合约:

receive() external payable 
    Wallets[msg.sender] += msg.value;

我有一个前端,我想使用 receive() 函数将以太币发送到这个智能合约。

async function transfer() 
if(typeof window.ethereum !== 'undefined') 
  const accounts = await window.ethereum.request( method: 'eth_requestAccounts' );
  const provider = new ethers.providers.Web3Provider(window.ethereum);
  const signer = provider.getSigner();
  const contract = new ethers.Contract(WalletAddress, Wallet.abi, signer);

  const transaction = await contract.send(
    from: accounts[0],
    value: amount
  )
  await transaction.wait();
  alert('ok');
  setAmount('');
  getBalance();

Saldy,没有“发送”功能,我需要在那里使用什么功能? 非常感谢!

【问题讨论】:

【参考方案1】:

当你想调用receive()函数时,你需要向合约地址发送一笔交易,其中data字段为空。就像您将 ETH 发送到非合约地址一样。

// not defining `data` field will use the default value - empty data
const transaction = signer.sendTransaction(
    from: accounts[0],
    to: WalletAddress,
    value: amount
);

【讨论】:

以上是关于Ethers.js,向智能合约汇款(接收功能)的主要内容,如果未能解决你的问题,请参考以下文章

我如何将 eth 值发送到在 ethers.js 中支付的特定智能合约功能?

使用ethers.js部署Solidity智能合约

使用ethers.js直接读取智能合约中插槽内容

Web3 开发系列教程—创建你的第一个智能合约与智能合约交互

使用ethers.js执行读函数与写函数

如何使用 waffle 和 ethers.js 测试应付/外部方法