Warnung: „throw“ ist zugunsten von „revert()“, „require()“ und „assert()“ veraltet. Wurf;

Meine Frage ist, ob "THROW" veraltet ist, was muss ich dann stattdessen in den folgenden Solidity-Code einfügen?

// This function creates Tokens  
     function createTokens() payable {
        if(isMinting == true){
            require(msg.value > 0);
            uint256  tokens = msg.value.div(100000000000000).mul(RATE);
            balances[msg.sender] = balances[msg.sender].add(tokens);
            _totalSupply = _totalSupply.add(tokens);
            owner.transfer(msg.value);
        }
        else{
            throw;
        }
    }

also sollte der code so aussehen:

// This function creates Tokens  
 function createTokens() payable {
 require(isMinting == true && msg.value > 0);
 uint256  tokens = msg.value.div(100000000000000).mul(RATE);
 balances[msg.sender] = balances[msg.sender].add(tokens);
 _totalSupply = _totalSupply.add(tokens);
 owner.transfer(msg.value);
    }
    else{
        throw;
    }
}

Oder ich muss die löschen

else{ throw;

letztes Update:

function createTokens() payable public {
    if(isMinting == true){
       require(isMinting, "Not allowed");
       require(msg.value > 0, "No funds");
        uint256  tokens = msg.value.div(100000000000000).mul(RATE);
        balances[msg.sender] = balances[msg.sender].add(tokens);
        _totalSupply = _totalSupply.add(tokens);
        owner.transfer(msg.value);
    }
    else{
        revert();
    }

danke AK

Antworten (2)

Wenn Sie nach einer Alternative zu suchen throw, können Sie revertauf ähnliche Weise verwenden. Die revertFunktion kann verwendet werden, um einen Fehler zu kennzeichnen und den aktuellen Aufruf rückgängig zu machen. Wie in den Solidity-Dokumenten angegeben:

Notiz

Früher gab es ein Schlüsselwort namens throw mit derselben Semantik wie revert(), das in Version 0.4.13 veraltet und in Version 0.5.0 entfernt wurde.

Aus Code-Sicht können Sie requireFolgendes verwenden:

 function createTokens() payable {
        require(isMinting == true && msg.value > 0);
        uint256  tokens = msg.value.div(100000000000000).mul(RATE);
        balances[msg.sender] = balances[msg.sender].add(tokens);
        _totalSupply = _totalSupply.add(tokens);
        owner.transfer(msg.value);
  }

Wenn isMintingalso nicht gleich ist true, wird es direkt von dort ausgelöst, ohne Änderungen am Zustand vorzunehmen.

Weitere Informationen: https://solidity.readthedocs.io/en/v0.5.0/control-structures.html#error-handling-assert-require-revert-and-exceptions

Könntest du mir bitte ein Beispiel im Code geben? Ich bin Anfänger und möchte den richtigen Weg gehen. und danke AK
Hoffe, die bearbeitete Antwort hilft.
Abschnitt löschen else, da dies in der Funktionalität liegt require, die ausgelöst wird, wenn eine der übergebenen Bedingungen fehlschlägt, verwenden Sie denselben Code, den ich in der Antwort hinzugefügt habe.
Schauen Sie, ob es in Ordnung ist, und sagen Sie mir, ob es in meiner Frage unter dem letzten Update so ist
Antwort aktualisiert. Sie können auch den Online-Solidity-IDE-Remix verwenden: remix.ethereum.org/…
@upracha in Ihrem letzten fraglichen Update können Sie require(isMinting, "Not allowed");Rest is fine entfernen, es funktioniert auf die gleiche Weise
@upracha Wenn es gelöst ist, können Sie es als richtige Antwort für die Community markieren
Entschuldigung, wo kann ich die richtige Antwort markieren, ich bin neu hier
Klicken Sie links oben in der Antwort auf das rechte Häkchen. Überprüfen Sie andere Fragen

Für Ihren Fall und die meisten Fälle sollten Sie verwenden require(isMinting, "Unallowed");. require(false)Bedingung setzt den aktuellen Aufruf zurück, dh Speicheränderungen werden rückgängig gemacht und msg.value wird nicht in den Vertrag übernommen.

throwVerhalten ist äquivalent zu assert(false, "Reason"), sie verursachen einen Transaktionsfehler und verschwenden auch das gesamte verbleibende Gas, wodurch der gesamte Aufrufstapel zurückgesetzt wird.

Erfahren Sie mehr über fehlgeschlagene Transaktionen anhand dieses Beispiels https://gist.github.com/3esmit/8954425d2ed0322505245803d6c045e4

function createTokens() payable { require(isMinting, "Not allowed"); require(msg.value > 0, "No funds"); uint256 tokens = msg.value.div(100000000000000).mul(RATE); balances[msg.sender] = balances[msg.sender].add(tokens); _totalSupply = _totalSupply.add(tokens); owner.transfer(msg.value); }

Hallo, können Sie mir bitte ein Beispiel mit dem Code in meiner Frage geben?
bearbeitete Antwort mit spezifischem Vorschlag für Ihren Code.
Ich bearbeite den Frage-Look unten zuletzt aktualisiert, in Remix zeigt dieser Code keine Warnungen, also überprüfen Sie bitte und sagen Sie mir, ob es gut ist und Sie einen Fehler in Ihrer Antwort machen, danke
Ich kann die Arbeit nicht für Sie erledigen. Sehen Sie, ob es kompiliert, wenn ja, testen Sie es. Erwägen Sie die Installation des Embake-Frameworks und erstellen Sie Testskripte.