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



如何部署大型智能合约?我在科万和罗普斯滕身上试过,两者都有问题。我有 250 行代码 + 导入的所有 ERCBasic 和标准文件。

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

更新:

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

solc filename.sol --optimize

在我的情况下,它在大约23kB 中变成了 10kB

与以太坊中的其他所有内容一样,限制是由交易消耗的气体施加的。虽然没有确切的大小限制,但有一个块状气体限制,您提供的气体量必须在该限制范围内。

部署合约时,存在固有的 gas 成本、构造函数执行的成本以及存储字节码的成本。固有气体成本是静态的,但其他两个不是。构造函数中消耗的 gas 越多,可用于存储的气体就越少。通常,构造函数中没有很多逻辑,消耗的绝大多数 gas 将基于合约的大小。我只是在这里添加这一点,以说明这不是一个确切的合约大小限制。

很容易,大部分gas消耗来自将您的合约字节码存储在区块链上。以太坊黄皮书(见第9页(规定存储合约的成本是

成本 = Gcodedeposit * o

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

如果你的字节码是23kB,那么你的成本将是~4.6M的gas。再加上固有气体成本和构造函数执行成本,您可能正在接近块气体大小限制。

为了避免这个问题,你需要将合约分解为库/拆分合约,删除重复逻辑,删除非关键函数等。

有关部署成本的一些更低级别的示例,请参阅此答案并查看这篇关于 Hackernoon 的有用文章。

可以通过实施透明合约标准来绕过最大合约大小限制: https://github.com/ethereum/EIPs/issues/1538

最新更新