Warum funktioniert mein proofOfWork() jedes Mal?

Ich führe den Nachweis der Arbeitsfunktion von meinem bereitgestellten Vertrag in der Ethereum-Brieftasche aus, indem ich eine beliebige Zufallszahl als Nonce angebe. Nach meinem Verständnis sollte PoW() nicht bei jeder Nonce funktionieren, aber in meinem Fall jedes Mal, wenn die Transaktion ausgeführt wird ( PoW funktioniert für jede Nonce ). Wie überprüfe ich, dass es immer funktioniert - indem ich das Gleichgewicht von msg.sender, Schwierigkeitsgrad und aktuellen Herausforderungsparametern überwache. Bitte korrigieren Sie mich, wenn ich an irgendeinem Punkt falsch liege, und schlagen Sie eine Lösung oder eine Erklärung vor, was passiert.

Antworten (4)

Ich denke, Sie beziehen sich darauf: https://www.ethereum.org/token#proof-of-work . Wenn es also jedes Mal durchgeht, muss der relevante Code sein:

if (n < bytes8(difficulty)) throw;       

Hast du versucht, den Schwierigkeitsgrad höher einzustellen?

uint public difficulty = 10**52;                         // Difficulty 

Sie können die Ausführung auch mit Protokollereignissen verfolgen, zlog0('here')

Ich führe den Nachweis der Arbeitsfunktion von meinem bereitgestellten Vertrag in der Ethereum-Brieftasche aus, indem ich eine beliebige Zufallszahl als Nonce angebe.

Bitte posten Sie den Code für die Funktion und, was noch wichtiger ist, den Grund, warum Sie eine solche Funktion überhaupt definieren.

Nach meinem Verständnis sollte PoW() nicht bei jeder Nonce funktionieren, aber in meinem Fall jedes Mal, wenn die Transaktion ausgeführt wird ( PoW funktioniert für jede Nonce ).

Ihr Verständnis ist ausgeschaltet (zumindest vom Inhalt dieser Frage). Eine PoW-Funktion soll den dezentralen Aspekt einer Blockchain stärken, indem der Erfolg eines potenziellen Angreifers auf der Blockchain (z. B. bei der Verhinderung von Transaktionen, doppelten Ausgaben usw.) nicht durch die Anzahl der Peers des Angreifers definiert wird steuert aber seine Rechenleistung. Lesen Sie diesen Artikel für ein klareres Bild.

Wie überprüfe ich, dass es immer funktioniert - indem ich das Gleichgewicht von msg.sender, Schwierigkeitsgrad und aktuellen Herausforderungsparametern überwache. Bitte korrigieren Sie mich, wenn ich an irgendeinem Punkt falsch liege, und schlagen Sie eine Lösung oder eine Erklärung vor, was passiert.

Das Gleichgewicht hat nichts mit dem PoW zu tun. Der PoW soll zeigen, dass derjenige, der die Transaktion durchgeführt hat, dies einzigartig und nur einmal getan hat.

Folgen Sie diesem Link für den Code: ethereum.org/token#proof-of-work . Ich habe über das Gleichgewicht gesprochen, da sich das Gleichgewicht von msg.sender in diesem Code jedes Mal erhöht, wenn die Herausforderung gelöst wird

Sie verwechseln zwei nicht verwandte Nonces.

Einer wird vom Miner eines Blocks für den PoW verwendet. Diese Nonce wird sehr selten einen Block mit ausreichendem Schwierigkeitsgrad erzeugen und wie erwartet zufällig aussehen.

Die Nonce, die Sie manipulieren, ist die Transaktions-Nonce. Dadurch wird einfach verhindert, dass dieselbe Transaktion wiederholt wird. Der Wert erhöht sich jedes Mal, wenn das Konto eine Transaktion sendet.

Wenn ich mir dieses Beispiel ansehe, komme ich nicht umhin zu denken, dass es so sein sollte:

if (n >= bytes8(difficulty)) throw;       

Auf diese Weise wird die Transaktion NUR durchgeführt, wenn Sie einen Hash gefunden haben, der kleiner als der Hash der Schwierigkeit ist. Übersehe ich etwas?

Wenn Sie eine andere Frage haben, stellen Sie diese bitte, indem Sie auf die Schaltfläche „ Frage stellen“ klicken .