Solidity

限制智能合約接收乙太幣的次數

  • May 7, 2020

我將如何限制可以向合約發送乙太幣的人數?我在 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++;
   }
}

引用自:https://ethereum.stackexchange.com/questions/83156