Was ist "Atomic Transaction"?

IOTA 1.0 verwendete das Konzept der Bundles zur Erstellung von Transfers. Bundles sind eine Reihe von Transaktionen, die über ihre Stamm-Referenz (trunk) miteinander verbunden sind. Diese Transaktionen haben ein festes Layout und eine feste Größe - unabhängig von ihrem "Inhalt". Eine Signatur mit Security Level 1 würde in nur eine Transaktion passen, standardmäßig werden jedoch Security Level 2-Signaturen verwendet. Da also die Level 2-Signatur von Wert-Transaktionen nicht in eine einzelne Transaktion passt, müssen mind. drei Transaktionen verwendet werden, um eine vollständige Übertragung zu gewährleisten: Zwei Transaktionen inkl. der Signatur für die Eingabe und eine weitere Transaktion ohne Signatur. Mit einem weiteren Nachteil von Bundles haben vor allem die Entwickler zu kämpfen: Es ist wesentlich komplizierter, alle Transaktionen von einem Bundle zu erhalten und diese richtig zu ordnen, als nur eine einzelne Nachricht (message) zu verarbeiten.

Mit dem Update auf IOTA 1.5 wurde das alte Bundle-Konstrukt entfernt. Stattdessen wurden die einfacheren Atomic-Transactions eingeführt. Dieser Wechsel bringt folgende Vorteile mit sich:

Weniger Netzwerk-Overhead: Das Transaktions-Format kann so angepasst werden, dass nur die wirklich notwendigen Daten übertragen werden. Auf unnötige Informationen, wie z.B. die 2. Signaturtransaktion der aufeinanderfolgenden Transaktionen eines Bundles, kann verzichtet werden. Der Einsatz des UTXO Modells hätte diese Situation noch verschlimmert und noch mehr Transaktionen verwendet, um eine einfache Übertragung durchzuführen.

Weniger Signaturüberprüfungen: Nach dem Coordicide muss jede Transaktion die Node-ID und die Signatur der Node enthalten, welche die Transaktion ausgestellt hat. Das bedeutet, dass für eine einfache Übertragung die Signaturen von mind. drei Transaktionen überprüft werden müssen. Die Signaturüberprüfung ist jedoch der aufwendigste Teil der Transaktionsverarbeitung, sodass die Einführung von Node-IDs unter Beibehaltung des ursprünglichen Bundle-Ansatzes die Leistung der Nodes um mind. 300% reduziert hätte. Unter dem Strich würden die Nodes hunderte, vielleicht sogar tausende von Transaktionen weniger verarbeiten können, als dies bei Atomic-Transactions, welche nicht in Bundles aufgeteilt sind, der Fall ist.

Besserer Spamschutz und Überlastungskontrolle: Die Größe des Bundles ist erst bekannt, wenn die letzte Transaktion eingetroffen ist und geprüft werden kann, ob es sich um ein valides Bundle handelt. Dies kann dazu führen, dass erst einmal einige Transaktionen akzeptiert und weitergeleitet werden um später feststellen zu müssen, dass die ausgebende Node ihre Quote (rate control) bereits überschritten hat und alle weiteren Transaktionen ignoriert werden. Somit werden Transaktionen geroutet und verarbeitet, die eigentlich schon zu Beginn hätten herausgefiltert werden müssen, da sie insg. die maximale Bundle-Größe überschreiten. Dies bietet schlimmstenfalls sogar eine Angriffsfläche, in dem eine Node verschiedene Bundles an verschiedene Personen ausgibt und diese beginnen, die Transaktionen des Bundles zu verarbeiten, um sie dann zu einem späteren Zeitpunkt wieder fallen zu lassen. Die Last im Netzwerk würde unnötig erhöht werden.

Kürzere Merkle-Proofs (für Sharding): Die Merkle-Proofs für Inter-Shard-Transaktionen werden viel kürzer (mind. 300%), wenn nicht alle Transaktionen in einem Bundle durchlaufen werden müssen, um zum nächsten Transfer zu gelangen. Dadurch werden Inter-Shard-Transaktionen viel schneller und leichtgewichtiger.

Entwicklerfreundlich: Einzelne Nachrichten lassen sich viel einfacher verarbeiten.

Schlussfolgerung: Atomic-Transactions sind durch die variable Transaktionsgröße wesentlich schneller bzw. flexibler und belasten das Netzwerk somit weniger. Zudem sind sie für das spätere Sharding/Slicing besser geeignet als Bundles.