IOTA Proof of Work

IOTA Proof of Work

Der PoW bei Iota dient nur als Spamschutz und wird nicht für den Konsensus benötigt. Der Schlüssel zum PoW ist, dass er schwierig zu produzieren, aber einfach zu überprüfen ist. Für jede Transaktion muss der PoW gemacht werden, damit sie von den Nodes akzeptiert wird.
Dabei wird die Nonce (die letzten 27 Trytes einer Transaktion) verändert und dann die Transaktion mit der geänderten Nonce gehasht. Wenn der Hash der Transaktion, in Trits umgewandelt, am Ende so viele Nullen hat, wie für das jeweilige Netzwerk benötigt werden, ist die Transaktion gültig. Falls nicht, wird der Prozess wiederholt, bis genug Nullen vorhanden sind.

Die Anzahl der mind. benötigten Nullen wird in MWM (minimum weight magnitude) angegeben, beim Mainnet sind es 14, im Devnet 9. Je höher die Zahl ist, umso aufwendiger ist es.

3 Trits mit dem Wert 0 sind eine 9 in Trytes, deswegen sind am Ende von einem gültigen Hash in Trytes immer mehrere 9en zu sehen.
Beispielhash: TRSJAIDFMDPA9DRRVMTQPSIKIWHJMEEUXTASVRKWGJCFASU99UFBVKFBJZSNQXMDXTL9YS9EFBRMA9999

Die letzten 9 Trytes des Hashes in Trits umgewandelt, mit 14 Nullen am Ende:
0, -1, 1, -1, 1, 0, 0, 0, -1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

Der PoW kann entweder lokal auf dem Gerät gemacht werden, oder remote auf einem anderen Gerät. Der Vorteil von lokalem PoW ist, dass man von niemandem abhängig ist. Wenn man aber kein leistungsstarkes Gerät hat kann der PoW lange dauern, wodurch die Wahrscheinlichkeit einer Bestätigung der Transaktion sinken kann. In Trinity kannst du das in den Einstellungen selbst festlegen (remote PoW funktioniert nur bei Nodes, die das auch unterstützen).

Wenn du remote PoW verwenden willst kannst du dafür entweder öffentliche Nodes oder z.B. einen Service wie https://powsrv.io/ oder https://tanglebay.com/ nutzen, welche FPGAs nutzen und dadurch den PoW sehr schnell und effizient erledigen.
https://powsrv.io/ erledigt den PoW besonders schnell (ca. 50 ms/Transaktion), ist aber nicht ganz kostenlos. Auf der Webseite ist unten ein Slider mit den Preisen.
Da kann man einfach den PoW für eine Anzahl an Transaktionen kaufen und das dann nutzen wann man will, über mehrere Monate verteilt oder schnell bis zu ca. 70 TPS zur Zeit.

Wenn du den PoW lokal erledigen willst kannst du dafür einen Proxy Server installieren. Der übernimmt nur den PoW und leitet alle anderen Anfragen an einen IRI Node weiter. Eine Anleitung dazu findest du hier: https://docs.iota.org/docs/node-software/0.1/iri/how-to-guides/install-a-pow-proxy

Im Browser gibt es die Möglichkeit den PoW mit WebGL2 (GPU) zu erledigen, das wird aber nicht von Edge und dem IE unterstützt.
Dafür kannst du curl.lib.js und iota.js für den Browser importieren und dann attachToTangle (die Funktion für den PoW) überschreiben:

var iota = core.composeAPI({
    provider: 'https://nodes.thetangle.org:443',
    attachToTangle: curl.localPoW
})

Hier kannst du es ausprobieren indem du einfach eine Transaktion mit einer Nachricht schickst. Klicke dazu auf den "localPoW", danach auf den "message tx" und dann den "Run" Button. An der Auslastung der GPU kann man dann sehen, dass es auch wirklich lokal berechnet wird.

Ein Beispiel mit React findest du hier: https://gist.github.com/obany/c4065b33bfe78932a485010f5029979b

Es gibt auch Ideen den PoW in der Zukunft durch einen anderen Spamschutz zu ersetzen, dafür könnte man z.B. die Transaktionen pro Sekunde auf die physikalische Position limitieren, was vor allem für das IoT interessant ist. Einen Artikel dazu findest du hier.

Wenn du Fragen hast schau einfach bei uns im Discord vorbei.