Solidity
限制智能合約接收乙太幣的次數
我將如何限制可以向合約發送乙太幣的人數?我在 google 或 youtube 上找不到任何東西。理想情況下,合約會在 2 個(或許多)不同的人發送了一筆金額後停止接受輸入。
下面是來自https://solidity-by-example.org/sending-ether/的簡單程式碼,用於將乙太幣發送到一個地址,但我不確定我會做什麼。我正在使用 remix 並在我的機器上使用 ganache 執行它。是否可以在 X 事務後使其只讀?
https://github.com/CrazybutSolid/ethereum-lottery/blob/master/contracts/lottery.sol有一種類似的例子,但它似乎太複雜了,我還是個菜鳥。
pragma solidity ^0.5.16; contract Receive { function () external payable {} function getBalance() public view returns (uint) { return address(this).balance; } } contract Send { function sendViaCall(address payable _to) public payable { (bool sent, bytes memory data) = _to.call.value(msg.value)(""); require(sent, "Failed to send Ether"); } }
謝謝
如果您想將其限制為最多 2 次傳輸,那麼您可以執行以下操作:
uint256 public count; function () external payable { require(count < 2); count++; }
如果您想將其限制為最多來自 2 個不同的發件人的傳輸,那麼您可以執行以下操作:
uint256 public count; mapping (address => bool) public senders; function () external payable { if (senders[msg.sender] == false) { require(count < 2); senders[msg.sender] = true; count++; } }