Gestern habe ich einen Vertrag mit Ropsten ( https://ropsten.etherscan.io/address/0x1fe59c223fa4e9781237f0f49a15ca598069cc30 ) bereitgestellt, der auf V2 des ABI-Encoders basiert. Daher enthält es eine Aussage
pragma experimental ABIEncoderV2;
Ich habe versucht, die Code-Verifizierung von Etherscan ( https://ropsten.etherscan.io/verifyContract2 ) mit einer abgeflachten Version meines Solidity-Codes, passender Compiler-Version, Optimierungs-Flag, Optimiererläufen usw. auszuführen. Das Ergebnis der Code-Verifizierung ist jedoch negativ.
Als ich im Juni auch Verträge mit demselben Pragma implementierte, erhielt ich eine Nachricht vom Etherscan-Helpdesk, dass sie ABIEncoderV2 nicht unterstützen. Dies trotz der Tatsache, dass die Kompilierung bei Remix nur eine Warnung ausgibt und Etherscan behauptet, Verträge zu unterstützen, die bei Remix kompilieren.
Also suche ich nach Alternativen. Kann jemand die Hypothese stützen, dass die fehlende Unterstützung für ABIEncoderV2 immer noch Probleme bei der Codeüberprüfung verursacht? Gibt es auch andere Alternativen für die Überprüfung des öffentlichen Codes von Smart Contracts?
Beifall,
Jens Ivar
Das Verifizieren des Quellcodes hat bei mir nicht funktioniert, als ich versuchte, den Quellcode in eine einzelne Datei zu reduzieren und auf etherscan.io hochzuladen. Ich denke, das liegt daran, dass pragma experimental ABIEncoderV2;
ein Projekt mit mehreren Dateien nur auf einige Dateien angewendet wird, aber wenn Sie Dateien auf einzelne Dateien reduzieren, wird es auf den gesamten Quellcode angewendet.
Dieses Problem wurde durch Bereitstellen einer Binärdatei behoben, die durch Kompilieren einer vorab reduzierten Version erhalten wurde:
truffle-flattener
oder glättenetherlime flatten
Hast du versucht mit zu kompilieren 0.4.25
? Danach konnte ich entfernen ABIEncoderV2
und meine Überprüfungen begannen zu funktionieren.
Stellen Sie sicher, dass Sie die pragma experimental ABIEncoderV2;
Zeile nach der Zeile mit der Solidity-Version einfügen. Aus irgendeinem Grund wird es anders kompiliert, wenn es vor der Versionsnummer steht.
JBrouwer
jijordre