I am unsure why I keep getting this error:

Using network 'development'.

Running migration: 2_deploy_contracts.js
  Deploying Token...
  ... 0x02f042faec7c36c74bb0df346ccda5339ea653eb55c79996a3af81a9be055992
Error encountered, bailing. Network state unknown. Review successful transactions manually.
Error: The contract code couldn't be stored, please check your gas amount.

I am simply trying to deploy the standard ERC20 example from Consensys.

From what I understand this error occurs when a function is abstract, but I can't seem to find any of those, unless I get my definition of abstract wrong.

The ProToken contract inherits from Token one, which just follows ERC20 standards, what could be wrong ?

contract ProToken is Token {

    mapping (address => uint256) balances;
    mapping (address => mapping (address => uint256)) allowed;
    uint256 constant MAX_UINT256 = 2**256 - 1;

    function transfer(address _to, uint256 _value) returns (bool success) {
        require(balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]);
        balances[msg.sender] -= _value;
        balances[_to] += _value;
        Transfer(msg.sender, _to, _value);
        return true;

    function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {
        uint256 allowance = allowed[_from][msg.sender];
        require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]);
        balances[_to] += _value;
        balances[_from] -= _value;
        if (allowance < MAX_UINT256) {
            allowed[_from][msg.sender] -= _value;
        Transfer(_from, _to, _value);
        return true;

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

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

    function allowance(address _owner, address _spender) constant returns (uint256 remaining) {
        return allowed[_owner][_spender];

contract Token {
    /// total amount of tokens
    uint256 public totalSupply;

    /// @param _owner The address from which the balance will be retrieved
    /// @return The balance
    function balanceOf(address _owner) public constant returns (uint256 balance);

    /// @notice send `_value` token to `_to` from `msg.sender`
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transfer(address _to, uint256 _value) returns (bool success);

    /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`
    /// @param _from The address of the sender
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transferFrom(address _from, address _to, uint256 _value) returns (bool success);

    /// @notice `msg.sender` approves `_spender` to spend `_value` tokens
    /// @param _spender The address of the account able to transfer the tokens
    /// @param _value The amount of tokens to be approved for transfer
    /// @return Whether the approval was successful or not
    function approve(address _spender, uint256 _value) returns (bool success);

    /// @param _owner The address of the account owning tokens
    /// @param _spender The address of the account able to transfer the tokens
    /// @return Amount of remaining tokens allowed to spent
    function allowance(address _owner, address _spender) constant returns (uint256 remaining);

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
  • I tried deploying your code in a testrpc network and it work as expected. A few thing to try: 1) Ensure the gas limit is at least 4700000 in your private network. 2) Update to a more recent version of truffle. 3) Remove or rename build/ directory with the project artifacts to force truffle to start from scratch.
    – Ismael
    Oct 8 '17 at 16:48
  • @Ismael Do you know how to set the gas limit to 4700000 in a private network? I am having a similar issue and maybe I am setting it wrong?
    – stone.212
    Oct 17 '17 at 4:52
  • @stone212 In geth you can modify your genesis.json file, but you will have to discard all existing blocks and start from an empty blockchain. Another option is to pass --targetgaslimit <new_limit> to geth, this will causes to slowly increase the block gas limit with each new mined block, the increment is small around 1/1000 of previous block, so it will take lots a block for a large increase. Parity has a similar option --gas-floor-target. See Gas limit exceeded on private chain
    – Ismael
    Oct 17 '17 at 5:11
  • 1
    @stone212 This my provide a better explanation how gas can be configured in both geth and parity and the motivation behind Accounts, Transactions, Gas, and Block Gas Limits in Ethereum
    – Ismael
    Oct 17 '17 at 5:13
  • @Ismael I have read that link so many times I think I might be able to recite it from memory. But it is terrible as an explanation, so I am still in the same place I have been for months. I keep trying things, but no one has definitive answers. I start to think no one understands gas.
    – stone.212
    Oct 17 '17 at 5:15

I Had the same Issue, Downgrading Truffle worked for me fine.

sudo npm uninstall -g truffle
sudo npm install -g truffle@beta

For More Info on that subject try https://github.com/trufflesuite/truffle/issues/660

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.