Warum brauche ich eine kompilierte Version des Vertrags, nur um die ABI-Definition zu erhalten? Anscheinend sollte die Vertragsadresse ausreichen.
Ich bin sehr verwirrt, weil ich einfach versuche, einen Vertrag auszuführen, vorausgesetzt, er wurde auf einem anderen Computer erstellt. Es sieht so aus, als ob ich zuerst den gesamten Code benötige, der zum Erstellen des Vertrags verwendet wird, was ich glaube ich nicht hypothetisch hätte. (Ich folge buchstäblich nur dem „Begrüßer“-Beispiel)
Anscheinend sollte die Vertragsadresse ausreichen.
Du hast recht, es wäre besser, wenn man das ABI nur durch einen Blick in den Vertrag bekommen könnte.
Warum also müssen Vertragsschreiber neben der Vertragsadresse auch die ABI angeben ?
Ein Grund dafür ist, dass die Funktions -Methoden-IDs in einem Vertrag unter Verwendung einer Hash-Funktion berechnet werden. Daher ist es für ein Tool nicht möglich, den Bytecode des Vertrags zu untersuchen und die Namen der Funktionen/Methoden innerhalb dieses Vertrags zu extrahieren. (Das Tool müsste erraten, was die Funktionsnamen sind, sie hashen und prüfen, ob die ersten 4 Bytes mit der Methoden-ID übereinstimmen – es gibt zu viele mögliche Funktionsnamen.)
Sie brauchen nicht den Quellcode, nur die ABI. Die ABI wird erstellt, wenn der Code kompiliert wird, kann aber separat verteilt werden und wird dies normalerweise auch.
Die ABI ist im Wesentlichen nur eine Liste der Funktionsnamen in einem Vertrag und welche Arten von Argumenten sie verwenden. Sie brauchen nicht einmal das gesamte ABI, sondern nur die Teile, mit denen Sie interagieren möchten. Um beispielsweise die ABI für die Funktion des greeter
Vertrags zu generieren greet
, können Sie diesen Vertrag einfach neu kompilieren:
contract Greeter {
function greet() constant returns(string);
}
mit solc
oder dem Online-Compiler . Suchen Sie Interface
im Online-Compiler nach dem Feld. Das ist die ABI-Definition.
Interface
existiert ein Feld im neuen Solidity-Browser ( ethereum.github.io/browser-solidity/… ) @Tjaden Hess♦Compile
Tab und klicken Sie auf details
für den gewünschten Vertrag. Dann sollten Sie den ABI
Abschnitt sehen, klicken Sie auf das Kopiersymbol daneben. @JohnMurphy
ZMitton
eth