以太坊:如何部署稍大的智能合约?

时间:2018-07-07 13:58:24

标签: size ethereum smartcontracts

如何部署大型智能合约?我在Kovan和Ropsten上尝试过,但都遇到问题。我有250行代码+导入的所有ERCBasic和Standard文件。

已编译的bin文件的大小为 23kB 。如此规模的合同有人遇到过类似的问题吗?

更新:

可以通过如下编译来减小已编译合约的大小:

solc filename.sol --optimize

就我而言,它变为 23kB 10kB

2 个答案:

答案 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