Gibt es angesichts des kompilierten Bytecodes in der Blockchain eine Möglichkeit zu erkennen, welche Compiler-Version verwendet wird, um zu überprüfen, ob die Quelle mit dem Bytecode übereinstimmt, ohne alle verfügbaren Compiler-Versionen / Ausgaben bruteforcen zu müssen?
Nein , da es keinen Unterschied in der Ausgabe des Bytecodes von der einfach in den Browsercontract Test {}
gesteckten Solidity gibt , wenn verschiedene neuere Versionen des Solidity-Compilers verwendet werden.
Unter Wie kann ich überprüfen, ob ein Vertrag auf der Blockchain mit dem Quellcode übereinstimmt, finden Sie einige Informationen darüber, wie http://etherchain.org den Vertragsquellcode mit dem Vertragsbytecode vergleicht . einschließlich der Anmerkung, dass:
Die Übereinstimmung, die Sie überprüfen sollten, ist der kompilierte Bytecode mit den Daten der Vertragserstellungs-TX
Dies liegt daran, dass der Bytecode, der von der Vertragserstellungstransaktion ausgeführt wird, einen gewissen Vertragsinitialisierungscode enthält.
(Interessant) Die Frage Wie kann ich überprüfen, ob ein Vertrag auf der Blockchain mit dem Quellcode übereinstimmt? hat eine Antwort von @mKoeppelmann
mit einem Link zu EtherScrape , das versucht, Vertragsquellcode mit Bytecode abzugleichen, indem eine Musterabgleichstechnik verwendet wird, aber diese Site scheint nicht aktuell zu sein.
Es gibt zwei verschiedene Bytecodes, die vom Solidity-Compiler generiert werden:
Die folgende Solidity-Ausgabe wurde aus dem einfachen contract Test {}
Einstecken in Browser-solidity für verschiedene Versionen von Solidity generiert, und es gibt keinen Unterschied in der Ausgabe, was impliziert, dass im Bytecode keine Compiler-Versionsinformationen codiert sind:
Solidity-Version: 0.3.2-dd4300d5/.-Emscripten/clang/Interpreter (neueste Version auf der Website verfügbar):
6060604052600a8060106000396000f360606040526008565b00
60606040526008565b00
PUSH1 0x60 PUSH1 0x40 MSTORE PUSH1 0xA DUP1 PUSH1 0x10 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN PUSH1 0x60 PUSH1 0x40 MSTORE PUSH1 0x8 JUMP JUMPDEST STOP
Solidity-Version: 0.3.0-11d67369/.-Emscripten/clang/Interpreter verlinkt auf libethereum-:
6060604052600a8060106000396000f360606040526008565b00
60606040526008565b00
PUSH1 0x60 PUSH1 0x40 MSTORE PUSH1 0xA DUP1 PUSH1 0x10 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN PUSH1 0x60 PUSH1 0x40 MSTORE PUSH1 0x8 JUMP JUMPDEST STOP
Solidity-Version: 0.2.2-ef92f566/.-Emscripten/clang/int verlinkt auf libethereum-:
6060604052600a8060106000396000f360606040526008565b00
60606040526008565b00
PUSH1 0x60 PUSH1 0x40 MSTORE PUSH1 0xA DUP1 PUSH1 0x10 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN PUSH1 0x60 PUSH1 0x40 MSTORE PUSH1 0x8 JUMP JUMPDEST STOP
Solidity-Version: 0.1.6-c881d103/.-Emscripten/clang/int verlinkt mit libethereum-1.1.0-c61302f2/.-Emscripten/clang/int:
6060604052600a8060106000396000f360606040526008565b00
60606040526008565b00
PUSH1 0x60 PUSH1 0x40 MSTORE PUSH1 0xA DUP1 PUSH1 0x10 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN PUSH1 0x60 PUSH1 0x40 MSTORE PUSH1 0x8 JUMP JUMPDEST STOP
Solidity-Version: 0.3.2-0/Release-Linux/g++/Interpreter auf meinem Computer:
6060604052600a8060106000396000f360606040526008565b00
60606040526008565b00
PUSH1 0x60 PUSH1 0x40 MSTORE PUSH1 0xA DUP1 PUSH1 0x10 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN PUSH1 0x60 PUSH1 0x40 MSTORE PUSH1 0x8 JUMP JUMPDEST STOP
Bytecode
Ist es möglich, das aus dem zu reproduzieren Runtime bytecode
?
Bortzmeyer