首页 > 解决方案 > 减少合同规模的最简单方法

问题描述

我的合同几乎完成了,但我已经(几乎)做了一切来减少合同的字节大小,但我仍然缺少两个功能。这就是为什么我需要拆分合同以进一步缩小规模。我已经将我的部分代码提取到另外两个合同中。Bar是抽象的,将由我的主合约扩展,Baz并将被初始化并从主合约调用。例子:

contract Foo extends Bar {
  Baz baz;

  constructor() {
    baz = new Baz();
  }
}

那成功了,但我的合同规模并没有真正减少。我应该注入Baz而不是在主合约上初始化它吗?既然这样,我该怎么做

contract Foo extends Bar {
  Baz baz;

  constructor(address barAdress) {
    baz = address;
  }
}

Type address is not implicitly convertible to expected type contract Baz.显然会抛出。

扩展的抽象合约是否会减少字节码,还是会在编译中组合并产生相同的大小?

标签: ethereumsoliditysmartcontracts

解决方案


扩展的抽象合约是否会减少字节码,还是会在编译中合并并产生相同的大小?

编译器仍然需要包含抽象合约,因此它不会减少最终字节码的大小。

减少字节码大小的一种有效方法是使用编译器优化选项。该值指定了它应该优化的合约运行次数(而不是优化迭代的次数)。因此,每次执行函数时,较低的值将导致更小的字节码,但也会导致更高的 gas 费用。


推荐阅读