Bugs sind ein normaler Teil von Software, aber auf Ethereum können sie eindeutig gefährlich sein.

Das könnte der Ausweg aus einem Ethereum-Programmiersprachen-Bug sein, der diese Woche einen bestimmten Stil von Smart Contract beeinflusst hat, und aufgrund dessen, wie Ethereum funktioniert (es verspricht, dass Anwendungen genau so laufen, wie programmiert), können die meisten betroffenen Verträge ' t abgebaut oder geändert werden.

Kurz gesagt, Besitzer von dezentralisierten Smart-Contracts (die nicht von einem Eigentümer aufgerüstet werden können) können nichts tun, um den Bug zu beheben.

Zwei Tage nach der Veröffentlichung des Fehlerberichts haben die Entwickler einen Fix in Solidity Version 0 veröffentlicht. 4. 4. Der Fehler betrifft jedoch einige Adressen und Datentypen in diesen Verträgen, so dass sie immer noch nicht geändert werden können mit dem Upgrade.

Die gute Nachricht ist, dass der Fehler viele intelligente Verträge nicht beeinflusst hat.

Solidity Creator Christian Reitwiessner erzählte CoinDesk, er habe eine "halbautomatische" Analyse jedes Ethereum-Programms durchgeführt, das von einem populären Block-Explorer aufgelistet wurde, und fand heraus, dass von 12.000 Kontrakten nur vier auswertbar waren.

Reitwiessner sagte, keiner dieser Verträge habe einen Äther in sich, da sie wahrscheinlich zu Testzwecken verwendet wurden. Aber es ist erwähnenswert, dass nicht alle Verträge auf Etherscan, dem ausgewählten Block-Explorer, angezeigt werden. (Es gibt mehr als 200.000 Verträge insgesamt, also ist es schwer zu sagen, wie sicher die restlichen Vertragsfonds sind).

Insgesamt scheint es ein kleiner Fehler im Vergleich zu DAO zu sein, dem bemerkenswertesten Beispiel für einen Smart-Vertrag, der nicht wie vorgesehen funktioniert. Es führte jedoch zu Diskussionen darüber, was im Falle anderer wichtiger Fehler passieren könnte, da nicht alle intelligenten Verträge einen zentralen Eigentümer haben, der sie aktualisieren kann, wenn etwas schief geht.

Ein Beobachter in sozialen Medien argumentierte beispielsweise, dass es sich um einen "Maulwurfhügel auf der Seite eines großen Berges" mit ähnlichen Problemen handeln könnte.

Eine der radikaleren Ideen zur Behebung dieses Problems besteht darin, Ethereum-Verträge kurzfristig aufrüstbar zu machen, damit die Besitzer im Falle eines Missgeschicks eine Möglichkeit haben, den Code zu deaktivieren oder zu ändern. Aber die Befürchtung ist, dass dies das Abstreifen dessen, was Ethereum (oder andere dezentrale Plattformen) einzigartig macht, bedeuten könnte.

National University of Singapore Doktorandin Loi Luu sagte, dass es besser wäre, wenn die Benutzer dezentral sichere, intelligente Verträge auf die harte Tour bringen würden.

Luu sagte:

"Ich persönlich denke nicht, dass es eine gute Idee ist. Es ist grundsätzlich gegen alles, für das intelligente Verträge entwickelt werden. Wenn ethereum ein Beta-Netzwerk ist, lassen Sie intelligente Verträge scheitern, lassen Sie die Leute ihre Lektionen lernen."

Aber während Luus Kommentare darauf hindeuten, dass es möglicherweise keine gute Idee ist, alle Verträge aufrüstbar zu machen, gibt es einige Möglichkeiten, sich auf potentielle zukünftige Fehler vorzubereiten, insbesondere während ethereum noch eine neue Technologie ist.

Behebung des Problems

Programme, die in den höheren Ebenen von Ethereum geschrieben wurden, wie zum Beispiel Solidity oder Serpent, werden in Code auf Byte-Ebene kompiliert, bevor sie der Blockchain hinzugefügt werden. Das Problem lag hier bei der Technologie, die das Kompilieren durchführt.

Um das Problem zu beheben, empfahl Reitweissner, dass Entwickler zwei Dinge tun. Erstens, wenn ein neuer Vertrag erstellt wird, müssen Entwickler auf die neue Version von Solidity aktualisieren, um den Fehler zu vermeiden.

Die zweite Möglichkeit, das Problem zu vermeiden, ist das etwas kuriosere Beispiel, da es die Aktualisierung oder das Smart-Contracting von bereits vorhandenen Smart Contracts erfordert - etwas, was Sie vielleicht nicht erwarten würden, ist mit ethereum möglich.

Reitwiessner erläuterte diesen Rat und erklärte, dass es zwei Arten von Verträgen gebe: zentral gesteuert und dezentral, wo niemand "besondere Privilegien" habe.

Der erste Typ bietet wahrscheinlich einen Upgrade-Mechanismus oder eine Möglichkeit, Mittel aus dem Vertrag zu entfernen.

Der zweite Typ ist komplizierter. Auf der anderen Seite, da vertrauenswürdige Ethereum-Smart-Contracts nach ihrer Implementierung nicht entfernt oder modifiziert werden können, gibt es nicht viel, was Entwickler tun können, wenn sie von Anfang an keinen zentralisierten Smart-Contract verwenden.

Reitwiessner sagte jedoch, dass Entwickler sich gegen zukünftige Probleme (wie diejenigen mit Solidität) schützen können, indem sie ein paar Dinge tun.

"Meine Empfehlung für solche Verträge wäre, sie entweder kurzlebig zu halten, so dass die möglichen negativen Auswirkungen gering sind, oder den Bytecode des Vertrags formell zu analysieren. Wir entwickeln derzeit Tools, um dabei zu helfen, " er sagte.

Upgradefähige Verträge

Es gibt jedoch einige Möglichkeiten, dies zu umgehen.

Externe Beziehungen der Ethereum Foundation führen Hudson Jameson beschrieb eine Möglichkeit, intelligente Verträge zu aktualisieren, die potenziell dezentralisiert werden könnten, und argumentierte, dass es eine Notwendigkeit sei, einen Weg zur Aktualisierung von Live-Code hinzuzufügen.

"Das allgemeine Gefühl unserer Entwickler ist, dass es in diesem frühen Stadium wichtig ist, einen Fail-Safe in Ihrem Code zu haben, um Verträge, die einen hohen Wert haben, sicher zu deaktivieren oder zu aktualisieren", sagte er.

Jameson beschrieb einige potentielle Smart-Contract-Fail-Safes, in denen Besitzer ihre Verträge upgraden können, selbst wenn sie in Ethereum eingesetzt werden, oder wo intelligente Verträge erkennen können, wann etwas faul ist.

Er sagte, sie müssten nicht unbedingt zentralisiert sein oder unter der Kontrolle eines einzelnen Eigentümers stehen. Zum Beispiel könnten Sie einen Smart-Vertrag haben, der eine Begrenzung für die Anzahl der zu einem bestimmten Zeitpunkt entnommenen Vermögenswerte vorsieht.

"Wenn also ein Angreifer versucht, den Geldvertrag oder einen Vermögenswert zu leeren, kann dies eine dezentrale Reaktion auslösen, z. B. die Sperrung und die Benachrichtigung anderer Personen, die den Vertrag nutzen, um ihr Geld abzuheben", sagte er.

Er beschrieb einige andere Methoden, einschließlich Hacker-Erkennung, Abschalt-Schalter und Multi-Signatur-Transaktionen, bei denen mehr als eine Person sich bei einer Transaktion abmelden muss, bevor Ether ausgegeben werden kann.

Wir freuen uns

Smart Contracts auf ethereum classic (die Gruppe, die aufgrund einer ideologischen Meinungsverschiedenheit von Ethereum abgespalten wurde) sind ebenfalls von dem Bug betroffen, da ihre Blockchain auf demselben Werkzeugset beruht.

Laut dem leitenden Organisator Arvicco untersuchen die Entwickler jedoch eine andere, langfristige Art, eine Programmiersprache zu entwickeln, die weniger anfällig für Fehler ist.

"Einer der möglichen Wege ist es, die Entwicklung intelligenter Vertragssprachen von einem Objekt / Prozedur zu einem funktionalen Paradigma zu bewegen", sagte er.

Was auch immer der mögliche Fehler ist, die Diskussion impliziert, dass Ethereum-Entwickler noch nicht erwarten sollten, dass ihre Smart Contracts ohne potentiell gefährliche Konsequenzen funktionieren, was für diejenigen, die bereits Code im Netzwerk implementiert haben, offensichtlich ist.

Insbesondere im Hinblick auf die Solidität könnte ein weiterer unaufhaltbarer Bug andere intelligente Verträge in der Zukunft potenziell beeinträchtigen.

Reitwiessner bemerkte, dass es für einen Compiler immer möglich ist, einen Fehler einzuführen, und es ist möglich, dass Solidity oder Serpent (ethereums andere intelligente Vertragssprache) andere unentdeckte Fehler hat.

Allerdings stellte er fest, dass dies in über zwei Jahren Entwicklungszeit der erste schwere Fehler war, der in der intelligenten Vertragssprache gefunden wurde.

Konstruktionsbild über Shutterstock