Solidity

如何使用 ethers.js 在函式呼叫中設置 msg.value?

  • January 19, 2022

我的智能合約中有一個函式,我希望它接受一個設置 msg.value 的參數,然後將其支付給合約:

function deposit(uint256 amount) public payable {
   msg.value = amount
}

我正在嘗試在網站上製作一個按鈕,將固定金額發送到契約中,如下所示:

async function sendTransaction() {
  if (typeof window.ethereum !== 'undefined') {
     await requestAccount()
     const provider = new ethers.providers.Web3Provider(window.ethereum);
     const signer = provider.getSigner();
     const contract = new ethers.Contract(contractAddress, contract.abi, signer);
     const transaction = await contract.deposit()
     await transaction.await()
  }

我的問題是,有沒有辦法從函式內部設置 msg.value,所以我可以呼叫 contract.deposit(value),或者有沒有更簡單的方法來使用 ether.js 設置值?

您不能更改合約中的 msg.value,它代表發送的乙太幣數量。

在前端:

const transaction = await contract.deposit({ value: ethers.utils.parseEther("0.1") })
//sends 0.1 eth
await transaction.wait()

將 0.1 更改為您要發送的乙太幣數量。

引用自:https://ethereum.stackexchange.com/questions/102544