Solidity keyword require (false) wird mir das Benzin ausgehen, warum?

Ich stoße auf ein seltsames Problem, wenn ich meinen Vertrag in Remix-ide + geth teste

  • 1. Ich betreibe eine private Kette in Geth
  • 2. Ich verbinde mich mit web3provider in Remix-ide mit dem Knoten
  • 3. Ich stelle den Vertrag so bereit

:

pragma solidity ^0.4.22;

contract aPlusb{
    function aPlusb(){}
    uint a=1;
    event happen(uint input,uint output);
    function plus(uint a,uint b) returns (uint){
        require(a==2);
        happen(a,a+1);
        return a+1;
    }
}

Wenn ich dies in Remix-id Java EVM teste, wird Folgendes angezeigt:

Geben Sie hier die Bildbeschreibung ein

Aber wenn ich den Vertrag mit dem web3provder für die private Kette bereitstelle und die Funktion func plus() ausführe, geht ihr das Benzin wie folgt aus:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Antworten (1)

Wahrscheinlich fehlen Ihnen die Byzanz-Opcodes in Ihrer privaten Kette.

Der Revert-Opcode wurde mit dem Byzantium-Fork eingeführt . In Ketten ohne Gabel verhält es sich wie ein ungültiger Opcode und verursacht den Verbrauch des gesamten Gases.

Um Byzantium-Opcodes zu aktivieren, müssen Sie sie in Ihrer Genesis-Datei aktivieren

{
    "config": {
      ...
      "byzantiumBlock": BLOCK_NUMBER
    },
    ...
}

Sie müssen BLOCK_NUMBER durch den ersten Block ersetzen, in dem Sie die Byzanz-Opcodes aktivieren möchten.

Oh Gott, es hat funktioniert. Es ist erstaunlich, danke. Es löst das Problem, das ich in Google nicht finden kann.