Ist es sicher, den Modifikator „view“ aus der Funktion „getTokenAmount“ im OpenZeppelin-Crowdsale-Vertrag zu entfernen?

Diese Funktion aus dem Openzeppelin-Crowdsale-Beispiel ist als Ansicht markiert, wie hier zu sehen:

 // Override this method to have a way to add business logic to your crowdsale when buying

  function getTokenAmount(uint256 weiAmount) internal view 
returns(uint256) {
    return weiAmount.mul(rate);
  }

Wenn ich Logik hinzufügen möchte, um die Rate basierend auf der Zeit zu ändern (für ein gestaffeltes ICO), ist es dann sicher, die Ansichtsbeschränkung zu entfernen und diese Logik in diese Funktion zu platzieren?

Ich bin mir nicht sicher, ob es aus Leistungs-/Kostengründen einen Ansichtsmodifikator hatte oder ob es sich um eine Sicherheitsfunktion handelt, die Probleme verursachen könnte, wenn ich sie entferne.

Ich möchte Logik implementieren und denke, dass sie für die Funktion, die den Tokenbetrag berechnet, besser geeignet wäre als anderswo?

Ich bin jedoch sehr neu in diesem Bereich und freue mich über jede Hilfe oder Antwort, die Sie möglicherweise haben.

Danke schön.

Antworten (2)

viewwird verwendet, um anzuzeigen, dass eine Funktion den Zustand nicht ändert.

Sofern Sie nicht den Status selbst ändern, was für eine Getter-Funktion nicht empfohlen wird, ist es eigentlich in Ordnung, ihn beizubehalten.

Wenn Ihre Funktionsbearbeitung den Zustand ändert, empfehle ich, einfach eine neue Funktion zu erstellen und aus praktischen Gründen nicht get als Anfang des Funktionsnamens zu verwenden (was normalerweise Getter darstellt).

So oder so, gehen Sie ... es ist relativ sicher zu entfernen.

Weitere Informationen hier: http://solidity.readthedocs.io/en/develop/contracts.html#view-functions

Das Schlüsselwort viewbedeutet, dass es das Verhalten zukünftiger Interaktionen mit keinem Vertrag ändert (es ändert den Status nicht). Um Ihre Frage zu beantworten, müssen Sie es also nicht entfernen, und ja, dies ist der richtige Ort, um Logik hinzuzufügen berechnet den Token-Betrag abhängig von Ihren ICO-Stufenbeschränkungen.

Ich vermute, Sie möchten zusätzliche Token geben, je nachdem, ob nowzwischen einem bestimmten Datum / einer bestimmten Uhrzeit liegt, also würden Sie diese Funktion einfach in Ihrem Crowdsale-Vertrag überschreiben, indem Sie diese Logik hinzufügen, zum Beispiel:

function getTokenAmount(uint256 weiAmount) internal view returns(uint256) {
    uint256 tokens = weiAmount.mul(rate);
    if(now <= 1519858800){ //March 1st, 2018
        tokens = tokens.add(25); //25 extra tokens
    }
    return tokens;
}