是否存在一些testRPC限制?我经常遇到“无气体”例外的合同,与适量的方法。例如,让我们有合同:
contract TestSize{
event Test1(uint param1, string param2); function test1(uint param1, string param2){ Test1(param1, param2);}
event Test2(uint param1, string param2); function test2(uint param1, string param2){ Test2(param1, param2);}
event Test3(uint param1, string param2); function test3(uint param1, string param2){ Test3(param1, param2);}
...
event Test87(uint param1, string param2); function test87(uint param1, string param2){ Test87(param1, param2);}
}本合同适用于testRPC无问题松露,所用气体为6614230。
但是,当我在test88/Test88 88中增加一行时:
contract TestSize{
event Test1(uint param1, string param2); function test1(uint param1, string param2){ Test1(param1, param2);}
event Test2(uint param1, string param2); function test2(uint param1, string param2){ Test2(param1, param2);}
event Test3(uint param1, string param2); function test3(uint param1, string param2){ Test3(param1, param2);}
...
event Test87(uint param1, string param2); function test87(uint param1, string param2){ Test87(param1, param2);}
event Test88(uint param1, string param2); function test88(uint param1, string param2){ Test88(param1, param2);}
}部署结束时没有气体异常,基本上消耗了我给它的任何数量的气体:
eth_sendTransaction
Transaction: 0x5b838c29352638fc360302f9b15920359feb4d107837684e2ff2a4637e2c2c89
Contract created: 0x7703276d61ff3a1e081d1ed1d3bbf1738cb0d554
Gas usage: 9000000000
Block Number: 24
Block Time: Thu Jan 25 2018 19:12:53 GMT+0100 (CET)
Runtime Error: out of gas有什么想法吗?它严重限制了甚至更大的合同的发展。
发布于 2018-01-27 04:15:44
Ganache-cli (以前称为testrpc)允许使用-l参数设置任意的大量气体。
例如,要将气体限制设置为100米,可以使用
-l 100000000
您可以查看其github上的自述文件页面,以获得更多选项https://github.com/trufflesuite/ganache-cli。
发布于 2018-03-03 01:04:10
我最近跟你说的一样。一直到“同一个平凡函数的N个副本,foo_NNNN()”。我的结论是,问题是字节码大小,似乎罪魁祸首是EIP170,它将字节码大小限制在24k字节。
其他人建议将代码分解到库中,我想这很有帮助。这是Ethereum中代码复杂性的一个基本且不可避免的限制,我不知道如何处理它。因为有时代码体太复杂了,找到一个插入两个的位置只会增加它的大小(b/c太多的跨切分平面的调用)。
对不起,我没有什么可提的,但我在同一个位置,这就是原因。
https://ethereum.stackexchange.com/questions/37485
复制相似问题