我几乎完成了我的合同,但我已经做了(几乎)所有的事情来减少我的合同的字节大小,我仍然缺少两个功能。这就是为什么我需要拆分合同,以进一步缩小规模。我已经将一部分代码提取到另外两个契约中。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.
。
扩展的抽象契约甚至会减少字节码,还是会在编译时组合起来并产生相同的大小?
扩展的抽象契约是否甚至减少了字节码,或者在编译时将它们组合在一起并产生相同的大小?
编译器仍然需要包含抽象契约,所以它不会减少最终字节码的大小。
减小字节码大小的有效方法是使用编译器优化选择。该值指定应该优化的合约运行次数(而不是优化迭代次数)。因此,较低的值将导致更小的字节码,但每次执行函数时也会产生更高的gas费用。