我知道
msg.value
是只读的,但我想在用户调用函数时创建一个代码,我将随机设置额外值,并且该值应该添加到总付款中,平均值+天然气。
pragma solidity ^0.8.0;
contract Test {
function testFunction() public payable {
payable(msg.sender).transfer(2200000000000000);
}
}
这个功能当然不起作用,但是有没有办法从合约内部做到这一点?
简短的回答是否定的。
这是因为
msg.value
来自用户。用户已经签署了他们想要随交易一起发送的金额,并且您无法更改它,因为这将是一个巨大的安全漏洞。
即使合约可以使用的gas也是预先确定的,因为它是经过计算的,并且用户签署了他们愿意支付费用的金额。
想象一个用户签名发送 1 ETH,然后将其更改为 2 ETH。额外的 1 ETH 从哪里来?