Ошибка развертывания смарт-контракта в моей частной сети ethereum - PullRequest
0 голосов
/ 03 июля 2018

Я продолжаю получать сообщение об ошибке ": код контракта не может быть сохранен, проверьте ваше количество газа. " сообщение, когда я пытаюсь развернуть свой контракт в блокчейне.

Я прочитал, что это общая ошибка, поэтому я хотел бы попросить вас помочь вам найти проблему.

Вот код моего контракта, я пытаюсь сохранить в массиве byte32 некоторые хэши sha256 и затем проверить, существует ли уже какой-то хэш в массиве.

pragma solidity ^0.4.0;

contract Mortal {
   address owner;

   function Mortal() public { owner = msg.sender; }

   function kill() public { if (msg.sender == owner) selfdestruct(owner); }
}

contract Log is Mortal {
    bytes32[] id;

    function Log (string data) public Mortal(){
        id.push(sha256(abi.encodePacked(data)));
    }

    function mainId() public view returns (bytes32) {
        return id[0];
    }

    function check(string data) public view returns (bool){
        bytes32 d = sha256(abi.encodePacked(data));
        uint i = 0;
        bool enc = false;
        while(!enc && i < id.length){
            if(id[i] == d){
                enc = true;
            }
            i++;
        }

        return enc;
    }
    function add(string data) public {
        id.push(sha256(abi.encodePacked(data)));
    }
}

А вот мой код web3deploy:

var data = "12345";
var logContract = web3.eth.contract([{"constant":true,"inputs":[],"name":"mainId","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"data","type":"string"}],"name":"add","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"data","type":"string"}],"name":"check","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"data","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]);
var log = logContract.new(
   data,
   {
     from: web3.eth.accounts[0], 
     data: '0x608060405234801561001057600080fd5b506040516106f83803806106f883398101806040528101908080518201929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016002826040516020018082805190602001908083835b6020831015156100b0578051825260208201915060208101905060208303925061008b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310151561011957805182526020820191506020810190506020830392506100f4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506020604051808303816000865af115801561015d573d6000803e3d6000fd5b5050506040513d602081101561017257600080fd5b8101908080519060200190929190505050908060018154018082558091505090600182039060005260206000200160009091929091909150906000191690555050610536806101c26000396000f300608060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806314d6d2141461006757806341c0e1b51461009a578063b0c8f9dc146100b1578063b6f921ad1461011a575b600080fd5b34801561007357600080fd5b5061007c61019b565b60405180826000191660001916815260200191505060405180910390f35b3480156100a657600080fd5b506100af6101bd565b005b3480156100bd57600080fd5b50610118600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061024e565b005b34801561012657600080fd5b50610181600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610390565b604051808215151515815260200191505060405180910390f35b6000600160008154811015156101ad57fe5b9060005260206000200154905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561024c576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b565b60016002826040516020018082805190602001908083835b60208310151561028b5780518252602082019150602081019050602083039250610266565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b6020831015156102f457805182526020820191506020810190506020830392506102cf565b6001836020036101000a0380198251168184511680821785525050505050509050019150506020604051808303816000865af1158015610338573d6000803e3d6000fd5b5050506040513d602081101561034d57600080fd5b8101908080519060200190929190505050908060018154018082558091505090600182039060005260206000200160009091929091909150906000191690555050565b6000806000806002856040516020018082805190602001908083835b6020831015156103d157805182526020820191506020810190506020830392506103ac565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310151561043a5780518252602082019150602081019050602083039250610415565b6001836020036101000a0380198251168184511680821785525050505050509050019150506020604051808303816000865af115801561047e573d6000803e3d6000fd5b5050506040513d602081101561049357600080fd5b8101908080519060200190929190505050925060009150600090505b801580156104c1575060018054905082105b156104ff5782600019166001838154811015156104da57fe5b90600052602060002001546000191614156104f457600190505b8160010191506104af565b8093505050509190505600a165627a7a7230582010ec72b950c87e36e8b36c492e1c6087adf278c914cae12487acc2669cbf87b50029', 
     gas: '50000000'
   }, function (e, contract){
    console.log(e, contract);
    if (typeof contract.address !== 'undefined') {
         console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
    }
 })

У меня достаточно средств на моем счете, поэтому я не знаю, что происходит. Я использую Remix для создания и компиляции кода и Geth для развертывания контракта в блокчейне. Я предполагаю, что проблема может быть в коде солидности, но я не вижу ничего плохого.

Обновление

Это мой Genesis Json, возможно, у меня неправильные настройки или что-то в этом роде. Как вы видите, я установил лимит газа на очень высокое значение, поэтому я не должен достигать ограничения блока с этим контрактом.

{
    "config": {  
        "chainId": 1297827, 
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
    "difficulty": "0x400",
    "gasLimit": "0x8000000000",  
    "alloc": {
        "0000000000000000000000000000000000000001": {
          "balance": "1"
        },
        "0000000000000000000000000000000000000002": {
          "balance": "1"
        },
        "0000000000000000000000000000000000000003": {
          "balance": "1"
        },
        "0000000000000000000000000000000000000004": {
          "balance": "1"
        }
    }
}

Обновление 2.0

Я обнаружил, что проблема заключается в конструкторе Log. Если я уберу строку id.push (sha256 (abi.encodePacked (data)));; , я действительно смогу развернуть контракт в цепочке, но я не знаю, почему и как заставить его работать именно так это. Определенно, проблема в вызове sha256, но я не знаю, почему он не работает.

...