Ich kann den Vertrag in etherscan.io nicht überprüfen. Ich konnte denselben Solidity-Code in (Geth, Mist) einsetzen. Aber den gleichen Code kann ich in etherscan.io nicht verifizieren. Welchen Fehler mache ich hier?
Beim Deployment des Codes auf Mist habe ich die Compiler-Version verwendet:
pragma solidity ^0.4.16;
Ich habe die gleiche Compiler-Version in etherscan.io ausgewählt:0.4.16+commit.d7661dd9
Hier ist die Transaktion:
Vertrag wurde während Txn# erstellt0x9832deb04d2900f97c0434588038f573ee066c0a095c1c0a0af07225d0068a9d
Ergebnis: Stimmt nicht mit dem Bytecode für die Eingabeerstellung überein, der an dieser Adresse gefunden wurde. Es tut uns leid! Der kompilierte Vertrags-ByteCode für „Kauf“ stimmt NICHT mit dem Vertragserstellungscode für [0x89d236a8387e6fE94e27D674D856e09f4dEE1302] überein.
Versuchen Sie, Ihre pragma
Aussage zu ändern
pragma solidity 0.4.16
(ohne ^
).
Aufgrund der pragma...
Anweisung kann es zu Problemen kommen, da Sie mit der ^
Version 0.4.16 zulassen
oder etwas Neueres, das die Funktionalität nicht beeinträchtigt (bis einschließlich Version 0.5.0)
(von solidity.readthedocs.io). Dies kann zu unterschiedlichem Bytecode führen, was zu einer fehlgeschlagenen Überprüfung führt.
Bis zu einem gewissen Punkt stimme ich @gisdev_p zu. Das Karottensymbol ^
erzeugt genau die Art von Mehrdeutigkeit, die wir in diesem Stadium nicht wollen. Ihr Vertrag ist bereits bereitgestellt und kann basierend auf dem Quellcode mit einem beliebigen Solidity-Compiler >= 0.4.16 kompiliert worden sein.
Jetzt müssen Sie die Version des Compilers ermitteln, die tatsächlich verwendet wurde, um den Bytecode in der Kette zu erstellen.
Alles unter 0.4.16 ist ausgeschlossen.
Sie sollten an das Tool denken, mit dem Sie die Kompilierung durchgeführt haben, und es nach der Versionsnummer abfragen, z . B. solc --version
oder truffle version
). Wenn Sie sich bei der Optimierungsoption nicht sicher sind, probieren Sie beide Möglichkeiten aus.
Wenn Sie die magische Kombination finden (Vertragsname + Compiler-Version + Optimierungsoption), stellt Etherscan eine perfekte Übereinstimmung zwischen dem Bytecode in der Kette und dem Ergebnis der Kompilierung Ihres Vertrags mit Ihren Parametern fest. Auf diese Weise bestätigen sie, dass der Quellcode, den sie haben, eine echte Darstellung des kompilierten Vertrags in der Kette ist.
Ich hoffe es hilft.
solc --version
hilft mir.
pabloruiz55
rüpel
Rick Park