Solidity
如何在眾籌或 ICO 合約中實施最高投資限額?
我有一個眾籌合約,它創建代幣並將它們分配給眾籌地址。然後投資者可以將乙太幣發送到該地址並從眾籌中接收代幣。
在這種情況下,我該如何設置最高投資限額?是否有可能使只能從特定地址購買一定數量的代幣?
同樣,是否可以在智能合約中實施任何形式的 KYC,以便只有驗證過身份的人才能進行投資?(如果這個問題應該是一個單獨的文章,我將編輯此文章以將其刪除並重新送出)。
感謝您在設置限制方面提供的任何幫助。我很感激。
我建議看一下OpenZeppelin和Crowdsale 範例的庫和契約。
這些都經過了良好的測試、審核並遵守安全最佳實踐。
覆蓋您自己的 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 }