Benötige ich einen ausgearbeiteten Vertrag, nur um die ABI-Definition zu erhalten?

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)

Antworten (2)

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.)

Bedeutet dies, dass der Autor nach dem Erstellen eines Vertrags möglicherweise die Methodennamen für immer verlieren könnte? Ich meine, wenn sie sie nicht lokal auf ihrem eigenen Computer gespeichert haben ...
Ja, genau wie wenn Sie ein normales Programm schreiben, es kompilieren und den Quellcode verlieren.

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 greeterVertrags zu generieren greet, können Sie diesen Vertrag einfach neu kompilieren:

contract Greeter {
  function greet() constant returns(string);
}

mit solcoder dem Online-Compiler . Suchen Sie Interfaceim Online-Compiler nach dem Feld. Das ist die ABI-Definition.

Wo Interfaceexistiert ein Feld im neuen Solidity-Browser ( ethereum.github.io/browser-solidity/… ) @Tjaden Hess♦
@Alper hattest du Glück bei der Suche nach dem ABI eines Vertrags aus der aktuellen Version von Remix?
Ja, Sir, unter CompileTab und klicken Sie auf detailsfür den gewünschten Vertrag. Dann sollten Sie den ABIAbschnitt sehen, klicken Sie auf das Kopiersymbol daneben. @JohnMurphy