So finden Sie den Soliditätscode für eine Vertragsadresse

Ich muss den öffentlichen Auftragscode herausfinden, dh den Soliditätscode für eine Vertragsadresse.

Hier gibt es zum Beispiel eine Registerkarte für Vertragscode, aber nur im Assembly- und Byte-Code, was nicht nützlich ist.

Ich muss Methodensignaturen herausfinden, damit ich Themen bilden kann.

Antworten (1)

Hauptsächlich aufgrund von Optimierungen, die beim Kompilieren des Quellcodes durchgeführt werden, ist es nicht möglich, den Quellcode aus dem Bytecode/Opcode selbst zu erhalten. Verweisen Sie auf diese Frage .

Eine Rückkompilierung in den ursprünglichen Quellcode ist unmöglich, da alle Variablennamen, Typnamen und sogar Funktionsnamen entfernt werden. Es könnte technisch möglich sein, zu einem Quellcode zu gelangen, der dem ursprünglichen Quellcode ähnelt, aber sehr kompliziert ist, insbesondere wenn der Optimierer während der Kompilierung verwendet wurde. Ich kenne keine Tools, die mehr tun, als Bytecode in Opcodes umzuwandeln

Wenn der Vertragscode also Closed-Source ist, ist es nicht möglich, den Quellcode zu finden. Wenn der Vertrag jedoch öffentlich ist, besteht möglicherweise die Möglichkeit, den Quellcode zu finden. Sie können diese Frage weiterleiten .

Dafür gibt es keine generelle Lösung, da der Solidity-Code nicht auf der Blockchain veröffentlicht wird. Auf der Blockchain wird nur der resultierende Bytecode veröffentlicht. Es gibt verschiedene Block-Explorer wie ether.camp , die die Möglichkeit bieten, den Solidity-Code hochzuladen. Sie können den Soliditätscode verwenden, um zu überprüfen, ob er tatsächlich mit dem Bytecode der Adresse übereinstimmt.

Es gibt ein Projekt , das darauf abzielt, dies automatisch zu tun, indem Github-Repositories nach Quellcode durchforstet werden, der zum veröffentlichten Bytecode passt

AFAIK besteht keine Verpflichtung zur Veröffentlichung des Vertragsquellcodes. Es ist Sache des Benutzers, es vor der Verwendung überprüfen zu lassen. Wenn also ein Smart-Contract-Entwickler die Anziehungskraft der meisten Menschen erreichen möchte, liegt es an ihm, den Code offenzulegen, damit der andere ihm vertrauen kann. Anhand des Soliditätscodes und seiner Adresse kann jeder den bereitgestellten Vertrag mit dieser Methode überprüfen .

Gibt es keinen Konsens, es zur Prüfung auf GitHub zu veröffentlichen?
Eigentlich ist ein "Vertrag" jetzt nur noch eine codierte Logik. Ich denke, dass die Bedeutung am Anfang eher auf die normale Bedeutung von "Vertrag" beschränkt war - dh eine Vereinbarung zwischen zwei Parteien, was impliziert, dass beide Parteien gesehen haben, was die Vereinbarung ist, und unterzeichnet haben. Im aktuellen Sinne der codierten Logik ist ein „Vertrag“ nicht wirklich ein Vertrag, wenn der Entwickler den Quellcode nicht offengelegt hat. Ist der Inhalt nur einer Partei bekannt, handelt es sich nicht um einen Vertrag im eigentlichen Sinne.