Wo sind meine Tokens: Sicherheitsprobleme bei ERC20

Gastblog

Autor Bio: Eugene Kyselev, Blockchain Software Entwickler bei Mobilunity. Eugene hilft Unternehmen rund um den Globus, ihre technischen Träume und Geschäftsprozesse zu „dezentralisieren“. Er sieht die Integration von Blockchain in die Politik und Geschäftswelt als eine gute Chance dafür, um die ganze Welt zu verändern.

Vielen von Ihnen ist der ERC20-Token bekannt und vielleicht besitzen Sie sogar ein paar von ihnen. Seitdem der ERC20-Token-Standard eingeführt wurde, scheint es, als ob der ERC20-Standard keine wesentlichen Bugs hat, aber es gibt natürliche einige Nachteile, die erwähnt werden müssen. Doch wie viele Ethereum-basierte Token und Standards gibt es neben dem ERC20? Hier werden der ERC223 und andere Standards ins Gespräch kommen.

Quelle: Eugene Kyselev, Anastasia Stefanuk | mobilunity.ch.
Quelle: Eugene Kyselev, Anastasia Stefanuk | mobilunity.ch.

ERC20. Kritischer Bug 

ERC20 (Ethereum Request for Comments) ist das erste Etherium-Token. Dies ist ein offizielles Protokoll, um Verbesserungen im Ethereum-Netzwerk vorzuschlagen. ERC20 definiert eine Reihe von Regeln, die erfüllt sein müssen, damit ein Token akzeptiert und als „ERC20-Token“ bezeichnet wird. Die Standardregeln gelten für alle ERC20-Tokens, da diese Regeln im Ethereum-Netzwerk miteinander interagieren müssen. Diese Tokens sind Blockchain-Assets, die einen Wert haben und wie Bitcoin, Litecoin, Ethereum oder jede andere Kryptowährung gesendet und empfangen werden können.

Wie bei jedem neuen Code enthält er eine gewisse Anzahl von Bugs und logischen Fehlern. Dieser Standard beinhaltet zwei Arten von Token-Transaktionen. Die erste Art beinhaltet das Senden von Tokens an eine andere Adresse.

Wenn wir eine Anzahlung für einen Smart-Vertrag leisten möchten, sollten wir die Kombination „approve + transferFrom“ verwenden. Wir müssen diesen Vertrag genehmigen, um Tokens mithilfe der Genehmigungsfunktion abzuheben. Dann müssen wir eine Vertragsfunktion aufrufen, die das Auffüllen und Abheben von Tokens mit der Funktion transferFrom verwaltet.

Was passiert aber, wenn Sie versehentlich Tokens für einen Vertrag mit einer Transferfunktion übergeben haben?

Die Transaktion ist gültig, wird aber vom Vertrag des Nutzers nicht anerkannt. Wenn Sie beispielsweise Tokens zu einem dezentralen Börse-Vertrag senden, erhält der Börse-Vertrag Ihre Tokens, diese werden jedoch nicht Ihrem Konto gutgeschrieben. Wenn die Funktion der Notfall-Tokens im dezentralen Austauschvertrag nicht implementiert ist, wird in diesem Fall die Rückgabe der Tokens unmöglich sein, was zu einem dauerhaften Verlust von Tokens führen wird. Aufgrund dieses Fehlers hat das Währungssystem Ether bereits Millionen von Dollar verloren.

Warum wird ERC20 noch verwendet?

Der Reddit’s User u/Dexaran war der Erste, der die Community über diesen Fehler informierte. Auf die Frage, warum der ERC20 so weit verbreitet ist, nannte er die folgenden Gründe, auch wenn der Community dieser kritische Fehler bekannt war:

  1. Verantwortungslosigkeit von Entwicklern
  2. Weil die Ethereum Foundation den ERC20-Standard fördert, auch wenn er Fehler enthält. Genau die gleiche Situation wie zuvor mit TheDAO.
  3.  Der Hauptgrund ist die Entwicklung von Tokens, um Investitionen anzuziehen, anstatt ein tolles Produkt für Menschen zu erstellen.
  4. Die Verwendung eines anderen Standards zu noch mehr Konsequenzen im Netzwerk führt. Wie Sie wissen, sah sich das Ether-Netzwerk bereits mit den Problemen der Erweiterung / Skalierung konfrontiert.
Quelle: Eugene Kyselev, Anastasia Stefanuk | mobilunity.ch.
Quelle: Eugene Kyselev, Anastasia Stefanuk | mobilunity.ch.

ERC223-Standard

 ERC223-Standard wurde vom Benutzer Reddit u/Dexaran erfunden. Dies ist der Token-Standard, der die Transaktion von Tokens auf die gleiche Weise wie die Ether-Transaktionen ermöglicht.

ERC223 führt eine Ereignisbehandlung durch, um den Verlust von Tokens in nicht verarbeiteten Transaktionen zu verhindern. Dieser verbesserte Standard löst den kritischen Hauptfehler vom ERC20, was bewirkt, dass die Übertragungsfunktion einen Fehler bei fehlgeschlagenen Transaktionen verursacht und Transaktionen storniert, um den Verlust von Tokens zu verhindern. Mit einem Wort, ERC223 konzentriert sich auf die Sicherheit von Übertragungen.

Add-ons und Probleme

Im ERC223 wurde der Übertragungsfunktion ein zusätzlicher Datenparameter hinzugefügt, um komplexere Operationen wie die einfache Übertragung des Tokens bereitzustellen.

Das Hauptproblem besteht darin, dass zu viele Leute ihre Tokens verlieren können, indem sie sie über eine Transferfunktion (ein Problem mit der Netzwerkskalierbarkeit) an Verträge senden, anstatt über die Funktion approve und transferFrom, wie schon oben erwähnt wurde.

Die Lösung besteht darin, das Übertragungsverfahren so zu ändern, dass überprüft wird, ob die Empfangsadresse ein Vertrag ist, d. h. ob Daten enthalten sind oder nicht. Wenn dies ein Vertrag ist, schlägt der Standard vor, tokenFallback zu verwenden. Der Hauptnachteil besteht darin, dass, wenn tokenFallback nicht existiert, die Sicherungsfunktion des empfangenden Vertrags aufgerufen wird und die gesendeten Tokens verloren gehen können.

ERC777-Standard

Dies ist ein neuer Standard für bessere Token-Kompatibilität, der auf dem ERC820 basiert und versucht, ERC20-Probleme zu lösen, wie zum Beispiel das Fehlen von Transaktionsverarbeitungsmechanismen, die zum Verlust von Millionen Dollars im Ether-Währungssystem führten. Der ERC777 konzentriert sich auf das Akzeptieren von Transaktionen und bietet eine größere Bandbreite an Transaktionsverarbeitungsmechanismen als bei Ether.

Vorteile – ERC777-Standard

Der Hauptvorteil von ERC777 besteht darin, dass eine neue Methode zur Erkennung des Contract-Interfaces verwendet wird. Dieser Standard geht davon aus, dass es im Ether-Netzwerk ein zentrales Vertragsregister gibt (wie in ERC820 definiert), und jeder kann dieses Register aufrufen, um zu sehen, ob eine bestimmte Adresse existiert und ob ein bestimmter Satz von Funktionen (Interface) unterstützt wird.

Eines der Hauptprobleme des Ethers ist die Unfähigkeit zu überprüfen, welche Funktionen der Vertrag ausführt. ERC820 wurde speziell zur Lösung dieses Problems entwickelt. ERC777 verwendet diesen Ansatz ebenfalls, was eine sehr gute Idee ist.

Was ist dann der Unterschied? Dieser Token-Standard definiert einen völlig neuen Satz von Funktionen. Die Funktionen „send“ statt „transfer“, „authorizeOperator“ statt „approve“ oder die Funktion „tokensReceived“ anstelle des Bearbeiters „tokenFallback“.

Dieser Ansatz kann sicherstellen, dass die Funktionen dieses Standards nicht durch die Funktionen eines anderen Token-Standards außer Kraft gesetzt werden. Daher können Sie ein Token erstellen, das gleichzeitig mit den Standards ERC777 und ERC820 kompatibel ist.

Sicherheitsprobleme 

ERC777 implementiert die Funktion authorizeOperator, die es ermöglicht, Token in Ihrem Namen zu verwalten.

Diese Lösung beeinträchtigt die Netzwerkbandbreite und erfordert mehr Leistung. authorizeOperator stellt zwar eine Transaktion bereit, für die Ausgabe ist jedoch eine andere Transaktion erforderlich. Aus diesem Grund sind zwei Transaktionen erforderlich, um die Übertragung durchzuführen, zu einem Zeitpunkt, zu dem dies durch eine Transaktion erfolgen könnte.

Außerdem enthält der ERC777 eine Funktion, die verhindert, dass das Token hängenbleibt (es führt einige Prüfungen am ITokenRecipient-Interface durch) und prüft, ob diese Adresse in der Whitelist enthalten ist. Da dieser Standard netzwerkorientiert ist und Tokens im Wert von mehreren Millionen Dollars verarbeitet, halte ich es für äußerst unerwünscht, solche Überprüfungen als optional zu betrachten.

Andere Standards

 Es gibt eine große Anzahl anderer Standards, z. B. ERC827, der einige der Vorteile von ERC220 mit den veralteten ERC20-Funktionen kombiniert.

Der ERC664-Standard konzentriert sich auf die Modularität des Token-Standards. Dieser Standard ermöglicht es Ihnen, Token-Verträge zu aktualisieren. Er hat jedoch den kritischen Fehler von ERC20 geerbt, der bereits erwähnt wurde. Andere Standards umfassen den ERC721, ERC677 und ERC820, aber sie sind allgemein nicht so bekannt.

Kompatibilität zwischen Standards 

ERC20- und ERC223-Tokens sind mit ERC20 kompatibel. Alles, was erstellt wird, um mit ERC20 korrekt zu funktionieren (z. B. Wallets), kann auch mit ERC223 arbeiten. Ausnahmen sind Verträge, die auf den Vorlagen approve + transferFrom beruhen. Trotzdem kann dieses Muster mit ERC223 implementiert werden, auch wenn es momentan nicht im Standard enthalten ist.

Andere Wallets und Drittanbieterdienste, die keine Smart Contracts sind, unterstützen ERC223.

Die ERC20- und ERC777-Standards können mit dem Begriff „Rückwärtskompatibilität“ beschrieben werden. Diese EIP stellt keine inversen Inkompatibilitäten dar und ist mit dem alten ERC20-Token-Standard kompatibel.

Fazit

Alle Tokens werden für einen einzigen Zweck freigegeben – ICO. Ich würde sagen, dass ERC223 und ERC777 versuchen, ein ERC20-Problem zu lösen, aber auf unterschiedliche Weise. ERC223 hat bereits seine Nische in Ethereum Classic anstelle des ERC20 besetzt.

Autor: Eugene Kyselev, Anastasia Stefanuk, Quelle: mobilunity.ch

Veröffentlicht am: 17.04.2018