Litecoin widersteht der GPU-Beschleunigung, indem es eine Verschlüsselungs-basierte Hash-Funktion verwendet, deren Generierung und Überprüfung etwas Speicher benötigt. Das Problem dabei ist, dass der r
Parameter hoch genug eingestellt werden muss, dass es schwierig ist, eine GPU zu verwenden, aber niedrig genug, dass Clients mit wenig Speicher (z. B. Smartphones) immer noch effizient Blöcke verifizieren können.
Gibt es einen Arbeitsnachweis, der erheblich mehr Speicher benötigt, um einen Arbeitsnachweis für einen Block zu generieren, als um zu überprüfen, ob ein Block einen ausreichenden Arbeitsnachweis enthält?
Ich habe von zwei möglichen Ansätzen gehört: Zeit-Speicher-Kompromiss mit Scrypt und einem Hash-Algorithmus der Graphentheorie, der viel Speicher benötigt, um Lösungen zu finden.
Ich denke, ein Mining-Prozess, der stochastische Stichproben aus einem großen Datensatz verwendet, würde die von Ihnen festgelegten Anforderungen erfüllen. Dafür liefert die Blockchain sogar einen tollen Datensatz. Nehmen wir zum Beispiel an, jede Nonce erfordert, dass Sie die Blockchain zufällig abtasten, um ein paar Bytes herauszusuchen. Da Sie beim Mining viele Nonces verwenden und nicht vorhersagen konnten, welche Daten Sie aus der Blockchain benötigen würden, müssten Sie im Grunde die gesamte Blockchain (jeden öffentlich vereinbarten Datensatz, wirklich) während des Minings verfügbar haben. Die Lösung kann dann mit einer kleinen Stichprobe dieses Datensatzes und einem Beweis dafür, dass die Daten in dem Datensatz enthalten sind, verifiziert werden. Wenn Sie das Blockchain-Beispiel verwenden, benötigen Sie wahrscheinlich eine Kette von Block-Headern und einen Merkle-Zweig für die ausgewählten Transaktionsdaten.
Eine andere Möglichkeit, dies zu tun, wäre die Verwendung eines großen zufälligen Merkle-Baums . Nehmen wir an, jemand hat einen Merkle-Baum mit 2^31 zufälligen 32-Byte-Werten erstellt. Wenn man bedenkt, dass auch die Merkle-Zweige gespeichert werden müssen, sind das (1 + 2 + 2^2 + 2^3 + ... + 2^31) * 32 bytes
, oder (2^32-1)*32 ~= 137.4 GB
von Daten insgesamt. Diese Daten sind sehr öffentlich für jeden verfügbar, der sie wirklich herunterladen und den Merkle-Root überprüfen wollte. Die Merkle-Wurzel würde als Mining-Merkle-Wurzel bekannt gemacht, und sie ist eine bekannte und vereinbarte Konstante. Beim Mining wird dieser zufällige Merkle-Baum abgetastet und gehasht, und mit dem Finden einer erfolgreichen Lösung wird der Merkle-Baum-Zweig bereitgestellt, der beweist, dass sich die abgetasteten Daten tatsächlich im öffentlich vereinbarten Merkle-Baum befinden.
In diesem Schema werden ~137,4 GB Speicher zum Schürfen benötigt, aber nur ~1 kB an Daten, um eine Lösung gegen die öffentlich vereinbarte Mining-Merkle-Root zu verifizieren.
Und die Zahlen könnten hier offensichtlich angepasst werden, damit die Leute schürfen können, ohne 137,4 GB ihrer Festplatte aufzugeben. Es müsste ein Ausgleich erreicht werden.
Das gefällt mir eigentlich viel besser, wenn ich darüber nachdenke, weil es nicht den Nebeneffekt hat, dass das Mining länger dauern kann, wenn die Blockchain wächst. Sie könnten wahrscheinlich sogar einen Snapshot der Bitcoin-Blockchain erstellen und diesen als öffentlich überprüfbaren Datensatz verwenden. Aber die Blockchain-Methode zwingt Knoten im Wesentlichen dazu, auch vollständige Knoten zu sein, was interessant ist, also ist es ein Kompromiss.
Bearbeiten: Bei einer schnellen Suche bin ich auf dieses Papier gestoßen, das im Wesentlichen dasselbe Problem mit einer anderen stochastischen Stichprobenmethode löst, die das Geburtstagsparadoxon beinhaltet. Ihre Lösung ist interessant, weil sie jedes Mal den Aufbau eines eigenen großen Datensatzes beinhaltet. Dies ist jedoch möglicherweise keine gute Sache, da es den Wiederaufbau von Blöcken verhindert, wenn neue Transaktionen eingehen.
http://www.hashcash.org/papers/momentum.pdf
Eine relevante Bitcointalk-Diskussion zum Momentum-Algorithmus:
https://bitcointalk.org/index.php?topic=313479.0
Ich finde es lustig, wie der „Momentum“-Aspekt (Merkle nicht aktualisieren zu können, nachdem er zum ersten Mal erstellt wurde) als das definierende Merkmal des Algorithmus angepriesen wird, obwohl es eigentlich ein ziemlich bedeutender Nachteil ist, der die Bestätigung aller Transaktionen um 1 Block verzögert . Es kann auch das Problem verschärfen, dass Bergleute keine großen Blöcke abbauen wollen, weil sie lange brauchen, um sich zu verbreiten. Das heißt, es kann rentabler sein, mit Ihrem winzigen Block weiter zu schürfen, auch nachdem Sie von einem neuen Block im Netzwerk gehört haben, da die Dynamik, die Sie bereits haben, es einfacher macht. Ich denke, die Tatsache, dass der PoW-Algorithmus von Bitcoin keine Dynamik hat, ist eigentlich eine großartige Funktion, die es ermöglicht, Transaktionen schnell zu bestätigen.
Die Verwendung eines unveränderlichen Datensatzes, wie in der oben bereitgestellten Lösung, bietet die gewünschten asymmetrischen Speicheranforderungen beim Arbeiten/Verifizieren der Arbeit und vermeidet gleichzeitig das Problem der Dynamik.
Dagger soll viel Speicher zum Erstellen, aber wenig zum Verifizieren benötigen.
Mein "Cuckoo Cycle" https://github.com/tromp/cuckoo ist ein speichergebundener graphentheoretischer Proof-of-Work, der trivial zu verifizieren ist und AFAIK der einzige ist, dessen Laufzeit von Speicherlatenz dominiert wird.
Amaclin
Nick Odell
Amaclin
Nick Odell
There is no such thing as "verify hash function"
Sicher gibt es das.But to verify it we should calculate the value
Ich habe den Zeit-Speicher-Kompromiss mit scrypt als Beispiel gegeben, also ist es eindeutig möglich.Jannes
Nick Odell
Litecoin doesn't 'resist' GPU. Not even ASICs.
Es ist zumindest besser als Bitcoin. Wenn Sie eine alternative Formulierung haben, können Sie meine Frage gerne bearbeiten.Also: finding and verifying a hash are the same thing, only difference is that when verifying you only need to do the calculation once instead of billions of times.
Mir ist bewusst, dass SHA256 so ist. Könnte es ein Nicht-SHA256- oder Nicht-Hashcash-basiertes Proof-of-Work-System geben, das die von mir festgelegten Anforderungen erfüllt?Jannes
Zauberer von Ozzie
Nick Odell
Jannes
CodesInChaos