Ключевое слово Solidity require (false) исчерпает мой бензин, почему?

Я сталкиваюсь со странной проблемой, когда тестирую свой контракт в Remix-ide + geth

  • 1、Я управляю частной сетью в Гете
  • 2、Я подключаюсь к узлу с помощью web3provider в Remix-ide
  • 3、Я развертываю контракт следующим образом

:

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

Когда я тестирую это в Remix-id Java EVM, это показывает следующее:

введите описание изображения здесь

Но когда я развертываю контракт в частной цепочке с помощью web3provder и запускаю функцию func plus(), у него кончается газ следующим образом:

введите описание изображения здесь

введите описание изображения здесь

Ответы (1)

Вероятно, вам не хватает опкодов byzantium в вашей приватной цепочке.

Код операции Revert был представлен вместе с форком Byzantium . В цепочках без форка он будет вести себя как недопустимый код операции и приведет к потреблению всего газа.

Чтобы включить коды операций Byzantium, вы должны включить их в своем генезис-файле.

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

Вы должны заменить BLOCK_NUMBER первым блоком, в котором вы хотите включить коды операций byzantium.

О Боже, это сработало. Это потрясающе, спасибо. Это решает проблему, на которую я не могу найти ответ в гугле.