8

I know this issue was discussed before several times, but I cant get the solution to my problem from any of the answers,

My contract got deployed fine before adding the following function,

function setApproval(address addr, bool approved)payable returns(string, uint, uint) {

       //some logical operations and assignments

    }

as soon as I add the function and try to deploy the contract, I got this error

Error encountered, bailing. Network state unknown. Review successful transactions manually. Error: The contract code couldn't be stored, please check your gas amount.

test rpc server shows following logs

Transaction: 0xd5791ac0c6059cbd43e00a7fabe566ada3f0572966f12ff25da6e04215840f39 Contract created: 0x9062592c5dd06340401c1e750ddb025defabf5be Gas usage: 4712388 Block Number: 16 Block Time: Sat Jul 22 2017 03:30:30 GMT+0530 (India Standard Time) Runtime Error: out of gas

again after removing this function contract deployed without errors

what is wrong with this function?

My contract code is around 250 lines, is there any limit on contract code size??

Thanks in advance

  • 1
    How are you deploying the contract? Try to increase the gasLimit setting, if any. – jeff Jul 21 '17 at 23:48
  • 1
    How are you deploying your contract? If you put your code we can help you with a modified version. To modify the gas amount for a single transaction you do something like this eth.sendTransaction(params...., { gas: 10000000 }). – Ismael Jul 22 '17 at 1:54
  • @jeff I am deploying the code using truffle console, Is it possible to increase the gas limit in Azure Ethereum Consortium Blockchain – SwapnilKumbhar Jul 23 '17 at 1:46
  • @Ismael I am getting the error while deploying contract, Its not about single transaction, the contract without setApproval() funnction is getting deployed without any error and I can call the functions with the method you have suggested, but as soon as I add this particular function and try to redeploy the contract I get the error message which I have specified in the question – SwapnilKumbhar Jul 23 '17 at 1:52
  • 1
    @pabloruiz55 code inside the setApproval () doesn't affect the result I have tried commenting the code, finally after reading some articles I came to assumption that the size of code is limited in Azure ethereum consortium blockchain, as the max. gas limit for a block is 4712388. – SwapnilKumbhar Oct 23 '17 at 12:43
2

In your 2_deploy_contracts.js file, change the gas price defaults to a higher number, i.e.:

// 2_deploy_contracts.js

const MyContract = artifacts.require('./MyContract.sol')

module.exports = function (deployer) {
  deployer.deploy(MyContract, { gas: 5000000 })
}

I had the same issue and this worked for me.

  • this works with testrpc, I have tried using this with Azure etherum consortium blockchain network, its doesn't work, finally after reading some articles I came to the assumption that the size of code is limited in Azure ethereum consortium blockchain, as the max. gas limit for a block is 4712388. I believe this is the limitation of Azure ethereum consortium blockchain. – SwapnilKumbhar Oct 23 '17 at 12:46
  • @SwapnilKumbhar, I'm using also Azure Ethereum Consortium Blockchain network and encounter this error when I try to deploy a contract throw my dApp. But it works well for the same contract if I deploy it throw Remix. I don't know what's my problem, but it seems something with the process of deploy and not the contract size or gas required – dchang Jan 24 at 18:12
  • @dchang Can you share your contract code here? that will be helpful to debug your issue, For Now I will suggest try to reduce Lines Of Code and try to deploy. Better try removing some heavy function, If it works then logically divide your contract in to multiple contracts and deploy them individually, I have applied this solution when I faced the issue with some large contracts. – SwapnilKumbhar Jan 25 at 6:47
  • @SwapnilKumbhar As already stated, the problem it's not the contract it self, as I can deploy with remix. And to discard it I'm trying with a very simple contract: "pragma solidity ^0.5.3; contract TestContrato{ }". You can't have simpler than that. Additional note: I'm not using truffle, instead I'm trying to user only web3 (version 1.0.0-beta.36), using deploy() method or sending a raw transfer with data: bytecode – dchang Jan 28 at 10:51
1

When a contract inherits from interface and doesn't implement a function this error will be issued.

Truffle 4.0.4 solc 0.4.18

interface IF { 
    function doSomething() external view returns(uint); 
}

contract Inherit is IF {
    Inherit() public; 
}

when deployed. will issue error:

The contract code couldn't be stored, please check your gas amount

solution is to implement the function.

contract Inherit is IF {
    doSomething() external view returns(uint) {
        return 5;
    }
}
1

I have used @rhlsthrm solution with extra modification because his solution gave me

Error: exceeds block gas limit

My solution is for Geth.

First, get gas limit from latest block

using

eth.getBlock("latest").gasLimit

copy the gas limit and then paste it like this

var Identity = artifacts.require("./Identity.sol");

module.exports = function(deployer) {
  deployer.deploy(Identity, { gas: 794722 });
};
1

The problem which happens rarely but causes exactly the same error message is the following:

Currently, contract code size is limited to 24KB, and sometimes, your bytecode can be greater than it, which will cause the exact same issue.

Go to your contract build json file, and check if the deployed bytecode size is greater than 24Kb.

Solution: This can be solved by various contract optimizations such as removing sufficient getters, public declarations, etc.

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.