我们可以将资金从地址(此)转移到收件人。但是有没有什么方法可以将资金直接从 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;
}
Run Code Online (Sandbox Code Playgroud)
msg.value
是反映传入交易值的只读属性。如果您想发送 ETH 金额,可以通过以下两种方式之一进行。
笔记:
send()
现在已弃用的方法,不需要payable
类型,并且该方法的语法略有不同call()
。bonus
是 wei 的数量(1 ETH 是 10^18 wei)transfer()
uint256 bonus = calculateBonus();
payable(msg.sender).transfer(bonus);
Run Code Online (Sandbox Code Playgroud)
该transfer()
方法只允许消耗 2300 Gas,这对于非合约接收者来说已经足够了。如果接收者是一个需要超过 2300 Gas 才能接收 ETH 的合约(例如它设置了一些本地变量),则交易将恢复。
call()
uint256 bonus = calculateBonus();
msg.sender.call{value: bonus}("");
Run Code Online (Sandbox Code Playgroud)
使用低级call()
方法,您还可以指定气体限制、要调用的函数及其参数。仅当您知道自己在做什么时才使用此方法。
归档时间: |
|
查看次数: |
7531 次 |
最近记录: |