2

私は受信機能を持つスマートコントラクトを持っています:

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

フロントエンドがあり、 receive() 関数を使用してこのスマート コントラクトに Ether を送信したいと考えています。

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、「送信」機能はありません。そこで使用する必要がある機能は何ですか? ありがとう !

4

1 に答える 1

2

関数を呼び出す場合は、フィールド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
});
于 2021-11-03T20:49:52.813 に答える