簡體   English   中英

如何在不使用設置 msg.value 的情況下將資金從 msg.sender(amount) 轉移到收件人地址

[英]how to transfer fund from msg.sender(amount) to recipient address without using setting msg.value

我們可以將資金從地址(這個)轉移到收件人。 但是有沒有辦法將資金直接轉移到 msg.sender 錢包給收件人? 我無法在調用 payoutBonus 時設置 msg.value。 因為我只能在 payoutBonus 方法中獲得金額。

function payoutBonus(address recipient) public payable returns (bool) {
    // bonus = calculateBonus();
    //transfer this bonus to recipient from msg.sender;
    return true;
}

msg.value是一個只讀屬性,反映傳入事務的值。 如果您想發送 ETH 金額,您可以通過以下兩種方式之一進行。

筆記:

  • 這些示例適用於 Solidity 0.8。 一些以前的版本還允許現在不推薦使用的send()方法,不需要payable類型,並且call()方法的語法略有不同。
  • bonus是 wei 的數量(1 ETH 是 10^18 wei)

transfer()方法

uint256 bonus = calculateBonus();
payable(msg.sender).transfer(bonus);

transfer()方法只允許消耗 2300 gas,這對於非合約接收者來說已經足夠了。 如果接收方是需要超過 2300 個 gas 才能接收 ETH 的合約(例如,它設置了一些局部變量),則交易將恢復。

低級call()

uint256 bonus = calculateBonus();
msg.sender.call{value: bonus}("");

使用低級call()方法,您還可以指定要調用的氣體限制 function,它是 arguments。 僅當您知道自己在做什么時才使用此方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM