Произошла ошибка оценки газа со следующим сообщением... Ошибка: требуемый газ превышает норму или транзакция всегда завершается с ошибкой.

Я создал смарт-контракт, но получил ошибку при его развертывании, после того как я указал лимит газа в 3000000 и случайное значение (wei) и нажал «Создать», я получил следующую ошибку:

(я использую Remix IDE, расширение Metatmask и сеть Ropsten. У меня на балансе 10 Eth, и я также пытался использовать компилятор Solidity 0.4.9 и 0.4.20, но все равно получаю ту же ошибку)

Ошибка :

Gas estimation errored with the following message (see below). The transaction execution will likely fail. Do you want to force sending? 
Error: gas required exceeds allowance or always failing transaction at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/background.js:1:1391377 at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/background.js:1:927906 at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/background.js:1:346093 at o (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/background.js:1:364324) at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/background.js:1:348923 at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/background.js:1:346093 at c (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/background.js:1:349199) at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/background.js:1:349237 at Ht (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/background.js:1:358606) at Object.<anonymous> (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/background.js:1:349326) at e.value (chrome-

Это мой код:

pragma solidity ^0.4.21;

contract admined{
    address public admin;

    function admined(){
        admin = msg.sender;
    }

    modifier onlyAdmin(){
        require(msg.sender == admin);
        _;
    }

    function transferAdminRol(address newAdmin)public onlyAdmin {
        admin = newAdmin;
    }

}

contract ERC20{

    mapping(address => uint256) public balanceOf;
    mapping(address => mapping(address => uint256)) public allowance;

    string public standard = "Test Africa v0.1";
    string public name;
    string public symbol;
    uint8 public decimal; 
    uint256 public totalSupply;

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    function ERC20(uint256 initialSupply, string _name, string _symbol, uint8 _decimal) public{
        balanceOf[msg.sender] = initialSupply;
        name = _name;
        symbol = _symbol;
        decimal = _decimal;
        totalSupply = initialSupply;
    }

    function transfer(address _to, uint256 _value)public returns (bool success){
       require(balanceOf[msg.sender] >= _value);
       require(balanceOf[_to] + _value >= balanceOf[_to]);

        balanceOf[msg.sender] -= _value;
        balanceOf[_to] += _value;
        emit Transfer(msg.sender, _to, _value);
        return true;
    }

    function approve(address _spender, uint256 _value) public returns (bool success){
        allowance[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value);
        return true;
    }

    function allowance(address _owner, address _spender) public returns (uint256 remaining) {
      return allowance[_owner][_spender];
    }
    function transferFrom(address _from, address _to, uint256 _value)public returns (bool success){
        require(balanceOf[_from] >= _value);
        require(balanceOf[_to] + _value >= balanceOf[_to]);
        require(_value <= allowance[_from][msg.sender]); 

        balanceOf[_from] -= _value;
        balanceOf[_to] += _value;
        allowance[_from][msg.sender] -= _value;
        emit Transfer(_from, _to, _value);

        return true;
    }

    function balanceOf(address _owner)public constant returns (uint256 balance) {
        return balanceOf[_owner];
    }
}

contract testaAFC is admined, ERC20{

    uint public minBalanceForAccounts = 50000000000000 wei;

    uint256 public sellPrice = 500;
    uint256 public buyPrice = 500;

    bytes32 public currentChallenge;                         
    uint public timeOfLastProof;                             
    uint public difficulty = 10**32;                            

    mapping (address => bool) public frozenAccount;
    event FrozenFunds(address target, bool frozen);

    function testaAFC(uint256 initialSupply, string _name, string _symbol, 
            uint8 _decimal, address _admin)public  ERC20(0, _name, _symbol, _decimal){

        if(_admin != 0)
            admin = _admin;
        else
            admin = msg.sender;

        balanceOf[admin] = initialSupply;
        totalSupply = initialSupply;

    }

    function transfer(address _to, uint256 _value)public returns (bool success){
       //
    }

    function transferFrom(address _from, address _to, uint256 _value)public returns (bool success){
     //
    }

    function setMinBalance(uint minimumBalanceInFinney)public onlyAdmin {
         minBalanceForAccounts = minimumBalanceInFinney * 1 wei;
    }



    function mintToken(address target, uint256 mintedAmount)public onlyAdmin {
        balanceOf[target] += mintedAmount;
        totalSupply += mintedAmount;
        emit Transfer(0, this, mintedAmount);
        emit Transfer(this, target, mintedAmount);
    }

    function setPrices(uint256 newSellPrice, uint256 newBuyPrice)public onlyAdmin {
        sellPrice = newSellPrice;
        buyPrice = newBuyPrice;
    }

    function buy()public payable returns (uint amount){
        amount = msg.value * buyPrice;                   
        require(balanceOf[this] >= amount);               
        balanceOf[msg.sender] += amount;                  
        balanceOf[this] -= amount;                        
        emit Transfer(this, msg.sender, amount);               
        return amount;                                  
    }

    function sell(uint amount)public returns (uint revenue){
        require(balanceOf[msg.sender] >= amount);         
        balanceOf[this] += amount;                        
        balanceOf[msg.sender] -= amount;                  
        revenue = amount / sellPrice;                     
        msg.sender.transfer(revenue);                     
        emit Transfer(msg.sender, this, amount);             
        return revenue;                                 
    }

}

ПОЖАЛУЙСТА, ПОМОГИТЕ, СПЕШУ СПАСИБО!!!

какой контракт вы пытаетесь развернуть?
Я успешно развернул testaAFCконтракт, используя метамаску и ремикс на Ropsten.
можешь рассказать как ты это сделал?
Я просто вставил ваш контракт, предоставил параметры конструктора, и это сработало как шарм.
какое значение вы использовали и какова ваша конфигурация ??
Я использовал компилятор Solidity версии 0.4.21 и значения конструктора как 100,"hello","HLO",18,"0x7f75e578b4c55a9f5c01eb7380149ed5e33987c8". Вот хэш транзакций: ropsten.etherscan.io/tx/…
я все еще получаю сообщение об ошибке, какой лимит газа и стоимость в (wei) вы использовали для развертывания контракта ??
Не нужно указывать значение вэй.

Ответы (1)

Нет необходимости вводить какое-либо значение в valueполе, если вы не хотите перевести некоторое количество ETH вместе с вашей транзакцией. Также не забывайте использовать payableключевое слово в любом таком случае.