Nxt

Nxt 中的下一個偽造者是如何決定的?

  • July 22, 2015

我已經閱讀了Nxt 白皮書和 wiki 上的許多其他資源,但我似乎仍然無法理解鍛造過程是如何運作的。據我了解,有很多線上使用者的帳戶“已解鎖”(因此,如果他們贏了,他們可以簽署下一個區塊)。我不明白獲勝者(或下一個偽造者)是如何決定的。它是隨機的,還是基於一個人有多少 nxt 硬幣?

例如,假設有三個使用者線上,他們的賬戶“解鎖”:Alice(擁有 40 nxt)、Bob(擁有 55 nxt)和 Fred(擁有 13 nxt)。維基

你鍛造一個區塊的機率取決於你在網路上活躍的硬幣總數中所佔的份額。

如果這是真的,那麼 Bob(比 Alice 和 Fred 擁有更多硬幣)不會每次都贏得區塊生成嗎?但那怎麼可能即使是很少硬幣的賬戶也能在鍛造中獲勝呢?這是否與獲勝的偽造者必須等待 1440 個區塊才能再次偽造有關?這就是有時給不那麼富有的使用者一個“機會”獲勝的原因嗎?

另外,如果 Bob 每次都贏,他就不能回到最後 10 個左右的塊並用不同的塊替換它們嗎?

哪個賬戶有權偽造下一個區塊取決於幾件事。

添加到區塊鏈的最後一個塊包括一個 32 字節的“生成簽名”(實際上是一個雜湊)。這個簽名與每個試圖偽造下一個區塊的賬戶的公鑰連接,然後經過 sha256 雜湊處理以生成一個新的簽名,以包含在下一個區塊中,即目前正在偽造的區塊。新簽名的 8 個最高有效字節以相反的順序(小端序)組合成一個 64 位整數,以確定每個帳戶的“命中”值。

這些命中值實際上是隨機的,並且在將最新塊添加到區塊鏈之前無法知道,但之後它們在整個網路中都是已知的。任何從網路接收到新偽造區塊的賬戶都可以驗證生成(偽造)賬戶是否有資格偽造,因為它知道最後一個區塊的生成簽名和偽造者的公鑰,這兩者都包含在新區塊中,因此可以計算任何帳戶的命中值。

因為命中值實際上是隨機的,所以每個具有非零 EffectiveBalance 的賬戶都有機會偽造。較低的命中值是可取的,因為這樣即使是餘額較低的帳戶也可能受到打擊。獲得命中的公式是

命中 < BaseTarget * EffectiveBalance * TimeSinceLastBlock

BaseTarget 會隨著每個新塊動態調整,以便大約每分鐘在網路上的某個地方發生一次命中。即使命中值偶然非常高,最終也會發生命中,因為由於 TimeSinceLastBlock(以秒為單位)術語,每經過一秒就更容易獲得命中。

引用自:https://bitcoin.stackexchange.com/questions/38724