Solidity

如何在眾籌或 ICO 合約中實施最高投資限額?

  • November 18, 2018

我有一個眾籌合約,它創建代幣並將它們分配給眾籌地址。然後投資者可以將乙太幣發送到該地址並從眾籌中接收代幣。

在這種情況下,我該如何設置最高投資限額?是否有可能使只能從特定地址購買一定數量的代幣?

同樣,是否可以在智能合約中實施任何形式的 KYC,以便只有驗證過身份的人才能進行投資?(如果這個問題應該是一個單獨的文章,我將編輯此文章以將其刪除並重新送出)。

感謝您在設置限制方面提供的任何幫助。我很感激。

我建議看一下OpenZeppelinCrowdsale 範例的庫和契約。

這些都經過了良好的測試、審核並遵守安全最佳實踐。

覆蓋您自己的 Crowdsale 合約中的 validPurchase 方法以實現您的自定義邏輯和參與條件。

function validPurchase() internal returns (bool) {
   bool lessThanMaxInvestment = msg.value <= 10 ether; // change the value to whatever you need
   bool whitelisted = addressIsWhitelisted(msg.sender); // implement your whitelist function
   return super.validPurchase() && lessThanMaxInvestment && whitelisted;
}

白名單的實施可以通過多種方式完成。一個非常簡單的例子如下。

   mapping (address => bool) public whitelist;

   modifier onlyWhitelistAddress() {
       require(whitelist[msg.sender] == true);
       _;
   }

   function addressIsWhitelisted(address _address) public returns (bool) { 
       return whitelist[_address] == true;
   }

   function addWhitelistAddress (address _address) public onlyOwner {
       whitelist[_address] = true;
   }

   function removeWhitelistAddress (address _address) public onlyOwner {
       whitelist[_address] = false;
   }

點擊這裡查看更多範例

看看這個例子眾籌合約

覆蓋您自己的 Crowdsale 合約中的 validPurchase 函式以實現最大投資限制。

function validPurchase() internal returns (bool) {
   bool lessThanMaxInvestment = msg.value <= 10 ether; // change the value to whatever you need
   return super.validPurchase() && lessThanMaxInvestment
}

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