Solidity通过支票/效果/图案确保用户提款安全



检查/效果/交互模式是否可以用于安全地向用户退款(代替单独的提款功能(?

EG在投标系统的情况下,如果用户2出价高于用户1,而用户1收到了他们的退款,那么支票/效果/模式是否足够安全,可以将用户1的钱退回?

例如,类似的东西

contract auction {
address highestBidder;
uint highestBid;
function bid() payable external {
require(msg.value >= highestBid);
prevHighestBidder = highestBidder
prevHighestBid = highestBid
highestBidder = msg.sender;
highestBid = msg.value;
(bool success, ) = prevHighestBidder.call.value(prevHighestBid)("");
require(success, "Transfer failed.")
}
}

我知道创建一个单独的提款功能是首选,但我希望能降低用户的汽油成本。

如果接收方(prevHighestBidder(是一个拒绝交易的合同,该怎么办?这将有效地破坏你的游戏,因为在他们之后没有人能够成功地调用bid()函数。

他们的合同可能和一样简单

contract BlockBids {
function callBid() payable {
// call the bid() function with value
address(<yourContract>).call{value: msg.value}('0x1998aeef');
}
receive () external payable {
revert();
}
}

我的建议是NOT检查prevHighestBidder是否收到ETH。或者添加一个后备机制,在接收者拒绝交易的情况下将ETH提取到您的地址,以便您可以在他们证明获胜地址的所有权后将其发送给他们(例如,通过签署消息(。

相关内容

  • 没有找到相关文章

最新更新