[英]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 金額,您可以通過以下兩種方式之一進行。
筆記:
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.