Ist es möglich, den Go-Code in einen Solidity-Vertrag aufzunehmen?

Ich habe zuerst Solidity gelernt und jetzt lerne ich die Go-Sprache. Während meines gesamten Lernprozesses stelle ich fest, dass sich beide Sprachen sehr ähnlich sind. Ist es also in Zukunft möglich, Go-Code in einen Solidity-Vertrag aufzunehmen? Oder liege ich falsch?

@eth danke für den Link, das ist fast meine Antwort, aber mit viel mehr Details und von jemandem, der viel mehr weiß als ich. Sehr wertvolle Antwort.
@NicolasMassart Vielen Dank für Ihren Kommentar, da er die zugehörigen Fragen und Antworten stärker hervorhebt, von denen ich hoffe, dass die Leute sie nicht verpassen, da sie auch wertvoll sind, wie Sie angemerkt haben.

Antworten (1)

Mischen Sie zunächst nicht Go als Sprache, die zum Erstellen einiger Ethereum-Tools und Basisimplementierungen verwendet wird, und Sprachen zum Schreiben intelligenter Verträge wie Solidity, die in evm-Code kompiliert werden können.

Heute ist mir kein evm-Compiler bekannt, der Go-Code als Eingabe oder eine Mischung aus Go und Solidity verwenden könnte. Aber Sie können sich eine vorstellen, da einige in der Lage sind, JavaScript als intelligente Vertragssprache (Lisk) zu verwenden.

Der Hauptgrund, warum Smart Contracts für Ethereum in Solidity (oder weniger verwendetem Serpent) geschrieben werden, ist, dass es sich um eine deterministische Sprache handelt. Go ist nicht deterministisch und könnte zu fatalem Codeverhalten führen, oder Sie müssten Entwickler anweisen, einige Funktionen nicht zu verwenden, können sie aber nicht zwingen, diese Funktionen nicht zu verwenden. Denken Sie nur an die Verwendung der Zufallsfunktion: rand.Intn(100). Jedes Mal, wenn der Vertrag ausgeführt wird, sollte das Ergebnis anders sein. Wie können Sie sich also auf das Ergebnis der Vertragsausführung einigen? Kein Konsens bedeutet, dass der Vertrag überhaupt nicht nützlich ist, da Konsens der Hauptzweck von Blockchains ist. ( Zufälligkeit in Verträgen ist etwas möglich, aber es ist schwierig, sie sehr sorgfältig zu verwenden und nicht nur einfach eine Zufallsfunktion zu verwenden, siehe zum Beispiel diese Antwort )

Die Lisk-Kryptowährung hat gewettet, dass es wichtiger wäre, eine weithin bekannte Sprache zu haben, als eine deterministische. Ethereum hat die andere Wahl getroffen und eine deterministische Sprache bevorzugt, auch wenn es neu zu lernen ist (wir dachten, es sei am Anfang eine nicht so komplizierte Sprache, aber das war vor The DAO ...). Schauen Sie sich an, wie viele „Bugs“ in Verträgen geschrieben werden, selbst wenn eine einfache deterministische Sprache als Solidität verwendet wird, und stellen Sie sich das Chaos vor, wenn es mit einer anderen Sprache wie Go geschrieben wurde. Ich mag Go, es ist eine nette Sprache für viele Dinge, aber meiner Meinung nach nicht für Smart Contracts.

aber Sie können ein deterministisches Programm in go schreiben. Sie müssen nur die möglichen Quellen des Nichtdeterminismus eliminieren.
@SigTouri ja, wie Lisk es mit JS tut. Aber das ist fehleranfällig, da Sie eine Dokumentation zusätzlich zur ursprünglichen Go-Sprachdokumentation führen müssen, um anzugeben, was möglich ist oder nicht, und hoffen, dass die Leute dies berücksichtigen ...