Ich schreibe einige ziemlich umfangreiche Solidity-Smart-Contracts und glaube, dass ich die EIP170-24k-Bytecode-Größenbeschränkung erreiche. hab ich schon
(a) meinen Code in Bibliotheken faktorisiert
(b) heute meinen Vertrag in zwei Teile aufgeteilt.
Nichts scheint zu helfen, unter die Grenze zu kommen. Verdammt, die Aufteilung in zwei Verträge -erhöhte- -stark- den Code eines der beiden resultierenden Verträge -- viel größer als der ursprüngliche All-in-One-Vertrag.
Gibt es Tools, mit denen Sie herausfinden können, woher das Code-Bloat kommt? Andere Methoden zum Aufteilen, um die Größe zu reduzieren?
Höchstwahrscheinlich kommt das Aufblähen des Bytecodes von den neuen Anweisungen in Ihrem Code. Sie sind oft der Störenfried, weil sie den Code des zu instanziierenden Vertrages enthalten. Sie können Vertragsfabriken erstellen, die Sie im Vorfeld bereitstellen können. Auf diese Weise können Sie die Bytecode-Größe Ihres Hauptvertrags reduzieren.
Z.B
contract X {}
contract XFactory {
function createX() returns (X) {
return new X();
}
}
contract Main {
XFactory xFactory;
...
Main(XFactory _xFactory) {
xFactory = _xFactory;
}
...
function someMethod() {
X x = xFactory.create();
}
...
}
Es ist möglich, die Beschränkung der maximalen Vertragsgröße zu umgehen, indem der Transparent Contract Standard implementiert wird: https://github.com/ethereum/EIPs/issues/1538
ivicaa
Chet
ivicaa