Wie setze ich eine maximale Investitionsgrenze in einem Crowdsale- oder ICO-Vertrag um?

Ich habe einen Crowdsale-Vertrag, der Token erstellt und sie der Crowdsale-Adresse zuweist. Investoren können dann Ether an die Adresse senden und Token aus dem Crowdsale erhalten.

Wie kann ich in diesem Fall eine maximale Anlagegrenze festlegen? Ist es möglich, dass nur eine bestimmte Anzahl von Token von einer bestimmten Adresse gekauft werden kann?

Ist es in ähnlicher Weise möglich, jede Form von KYC in einem Smart Contract zu implementieren, sodass nur Personen investieren können, die ihre Identität verifiziert haben? (Wenn diese Frage ein separater Beitrag sein sollte, werde ich diesen Beitrag bearbeiten, um ihn zu entfernen und erneut einzureichen).

Vielen Dank für jede Hilfe beim Festlegen eines Limits. Ich schätze es.

Antworten (2)

Ich würde vorschlagen, einen Blick auf die Bibliotheken und Verträge von OpenZeppelin und Crowdsale zu werfen .

Diese wurden ausgiebig getestet, geprüft und entsprechen den Best Practices für die Sicherheit.

Überschreiben Sie die validPurchase-Methode in Ihrem eigenen Crowdsale-Vertrag, um Ihre benutzerdefinierte Logik und Teilnahmebedingungen zu implementieren.

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;
}

Die Implementierung einer Whitelist kann auf verschiedene Weise erfolgen. Ein sehr einfaches Beispiel könnte wie folgt aussehen.

    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;
    }

Oder klicken Sie hier für weitere Beispiele ;

Sehen Sie sich dieses Beispiel für einen Crowdsale-Vertrag an

Überschreiben Sie die validPurchase-Funktion in Ihrem eigenen Crowdsale-Vertrag, um ein maximales Investitionslimit zu implementieren.

function validPurchase() internal returns (bool) {
    bool lessThanMaxInvestment = msg.value <= 10 ether; // change the value to whatever you need
    return super.validPurchase() && lessThanMaxInvestment
}
Dies würde nur ein maximales Limit pro Transaktion implementieren, ja? Es würde eine Adresse nicht daran hindern, unbegrenzt Tokens über mehrere Transaktionen zu kaufen?
Das stimmt nicht. Man müsste die Kaufadresse in einer schwarzen Liste speichern, um zukünftige Transaktionen von dieser Adresse zu verhindern, aber andererseits könnte ein Investor, der versucht, mehr zu kaufen, immer mehrere Brieftaschen erstellen und von diesen kaufen