如何部署大型智能合约?我在Kovan和Ropsten上尝试过,但都遇到问题。我有250行代码+导入的所有ERCBasic和Standard文件。
已编译的bin文件的大小为 23kB 。如此规模的合同有人遇到过类似的问题吗?
更新:
可以通过如下编译来减小已编译合约的大小:
solc filename.sol --optimize
就我而言,它变为 23kB 约 10kB
答案 0 :(得分:3)
与以太坊中的其他所有内容一样,交易所消耗的天然气也施加了限制。尽管没有确切的尺寸限制,但是限制气体块,您提供的气体量必须在该限制之内。
部署合同时,存在固有的天然气成本,构造函数执行成本和字节码存储成本。天然气的固有成本是静态的,而其他两个不是。构造函数中消耗的气体越多,可用于存储的气体就越少。通常,构造函数内部没有很多逻辑,所消耗的绝大部分气体将基于合同的大小。我只是在此处添加这一点,以说明这不是确切的合同规模限制。
轻松地,大部分耗气量来自将您的合同字节码存储在区块链上。 Ethereum Yellowpaper(请参阅第9页)规定存储合同的费用为
cost = Gcodedeposit * o
其中o
是优化合约字节码的大小(以字节为单位),Gcodedeposit
是200 gas /字节。
如果您的字节码为23kB,则您的费用约为460万汽油。再加上固有气体成本和构造函数执行成本,您可能正在接近块状气体尺寸限制。
为避免此问题,您需要将合同分解为库/拆分合同,删除重复的逻辑,删除非关键功能,等等。
有关一些更低成本的部署成本示例,请参见this answer并查看此useful article on Hackernoon。
答案 1 :(得分:1)
可以通过实施透明合同标准来避免最大合同规模的限制:https://github.com/ethereum/EIPs/issues/1538