Ich erhalte die folgende Fehlermeldung, wenn ich meinen Vertrag in Remix bereitstelle:
Die Initialisierung der Vertragserstellung gibt Daten mit einer Länge von mehr als 24576 Byte zurück. Die Bereitstellung wird wahrscheinlich fehlschlagen. Weitere Informationen: eip-170
Der Vertrag wird auf 2 Verträge aufgeteilt. A mit 250 Zeilen und B (B ist A) mit 500 Zeilen. Ich habe auch eine Bibliothek erstellt und einige meiner Funktionen in diese Bibliothek exportiert. Ich lade gerade in die Javascript-VM-Umgebung hoch. Beachten Sie, dass es immer noch nicht funktioniert, wenn ich das Kontrollkästchen „Optimierung aktivieren“ auf der Registerkarte „Kompilieren“ gültig mache. Ich habe ein paar Fragen:
1) Wie kann ich die Größe der Daten in Remix überprüfen? Ich bekomme eine Fehlermeldung, dass es über 24 KB ist, wie kann ich überprüfen, wie viel es genau ist?
2) Woran liegt das? Bezieht sich dies auf die Länge des Codes oder die Menge an Gas, die ausgeführt wird? Wenn es das Gas ist, wie kommt es, dass ich immer noch den gleichen Fehler bekomme, wenn ich dem Gaslimit auf der Registerkarte „Ausführen“ im Remix viel mehr Gas hinzufüge?
3) Gibt es gängige Methoden, um die Größe der Daten zu verringern, damit ich sie tatsächlich bereitstellen kann?
Danke
Das von Ihnen gemeldete Codegrößenproblem bedeutet einfach, dass Ihr Code in einem zu großen Low-Level-Programm kompiliert wird. Zu viele Bytes drin.
Nichts im Zusammenhang mit Benzin oder Gasmangel: Es ist einfach größer als erlaubt.
Normalerweise treten solche Probleme bei sehr langen Listen und/oder bei Vorhandensein sehr großer statischer Konstanten (Arrays, Tabellen usw.) auf. In diesem Fall sollten Sie einige separate SW-Einheiten haben (wie Sie es anscheinend bereits getan haben) und den erforderlichen Speicherplatz reduzieren.
ABER es kann ein Problem im Zusammenhang mit der Remix-IDE sein. Bevor Sie fortfahren, speichern Sie Ihre Dateien, leeren Sie den Browser-Cache und starten Sie den Browser neu. (Übrigens scheint Chrome eine bessere Beziehung zu Remix zu haben als andere Browser ...)
Wenn Sie andererseits Ihren Code schrittweise entwickeln, neue Funktionen hinzufügen und sie testen, bevor Sie fortfahren, versuchen Sie einfach, einen Schritt zurück zu setzen, der die letzte hinzugefügte Funktion löscht, und stellen Sie sicher, dass der Fehler nicht mehr auftritt. Danach vereinfachen Sie alles, was Sie können.
Wenn der Fehler beim Löschen Ihrer letzten Hinzufügung nicht auftaucht, kann das Gesamtdesign von Natur aus schlecht und zu speicherintensiv sein.
Siehe Wie schätze ich die Größe meines Vertragscodes? es ist zu groß, um es jetzt auch einzusetzen !
Es ist wichtig zu betonen, dass das Aufteilen des Vertrags in mehr als einen Vertrag/Bibliotheken die Bytecodegröße reduziert, wenn und nur wenn sie separat bereitgestellt werden können und Sie sie separat bereitstellen. Andernfalls ist der resultierende Bytecode größer!
Überprüfen Sie auch Ihre öffentlichen Variablen: Es kann sein, dass einige von ihnen "privat" werden. In diesem Fall erstellt der Compiler keinen Getter für sie (das Nettoergebnis dieses Eingriffs hängt der Übersichtlichkeit halber von vielen anderen Dingen ab ... versuchen Sie es trotzdem).
Aktivieren Sie die Optimierung für Smart Contracts in Remix. Es wird erfolgreich sein
sp4c3
Inhaltop
sp4c3
Inhaltop
sp4c3