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?
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.
eth
Nicolas Massart
eth