繁体   English   中英

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

[英]Ethereum: How to deploy slightly bigger smart contracts?

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

编译的bin文件的大小为23kB 在这种规模的合同中,有人遇到过类似的问题吗?

更新:

可以通过按以下方式进行编译来减小已编译合同的大小:

solc filename.sol --optimize

就我而言,它变成了23kB10kB

像以太坊中的其他所有内容一样,交易所消耗的天然气也施加了限制。 虽然目前还没有确切的大小限制一个块限气和天然气的您提供有是限度内的金额。

部署合同时,将产生内部气体成本,构造函数执行成本和字节码存储成本。 天然气的固有成本是静态的,而其他两个不是。 构造函数中消耗的气体越多,可用于存储的气体就越少。 通常,构造函数内部没有很多逻辑,所消耗的绝大部分气体将基于合同的大小。 我只是在此处添加这一点,以说明这不是确切的合同规模限制。

轻松地,大部分气体消耗来自将您的合同字节码存储在区块链上。 以太坊黄皮书 (见第9页)指出,合同的存储成本为

成本= Gcodedeposit * o

其中o是优化合约字节码的大小(以字节为单位), Gcodedeposit为200 gas /字节。

如果您的字节码为23kB,那么您的成本约为460万汽油。 加上固有气体成本和构造函数执行成本,您可能正在接近块状气体尺寸限制。

为避免此问题,您需要将合同分解为库/拆分合同,删除重复的逻辑,删除非关键功能等。

有关部署成本的一些更底层的示例,请参阅此答案在Hackernoon上查看此有用的文章

通过实施透明合同标准可以避免最大合同规模的限制: https : //github.com/ethereum/EIPs/issues/1538

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM