将智能合约部署到我的私有以太坊网络时出错

时间:2018-07-02 21:42:01

标签: ethereum solidity contract

当我尝试将合同部署到区块链时,我不断收到此错误消息:错误:无法存储合同代码,请检查您的加油量。”消息。

我读到这是一个一般性错误,所以我想请您帮忙找出问题所在。

这是我合同的代码,我试图将一些sha256哈希存储在byte32数组中,然后检查数组中是否已存在某些哈希。

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

这是我的web3部署代码:

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将合同部署到区块链中。我想问题可能出在Solidity代码中,但我看不到任何错误。

更新

这是我的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调用中,但是我不知道为什么它失败了。

0 个答案:

没有答案