當“活躍賬戶”很容易被偽造時,Nxt 如何在鏈上達成一致?
據我了解,在 Nxt 中,區塊是使用基於 Proof-of-Stake 的系統來探勘(或偽造)的,其中區塊創建的工作方式類似於彩票:人們有票,你擁有的票越多,獲得的機會就越大贏得併因此鍛造一個塊。Nxt 中的門票只是您在系統中擁有的硬幣。
我不明白的是,對於每個區塊創建,獲勝者都是從“活躍賬戶”池中找到的,而這些“活躍賬戶”恰好是當時線上的人。根據具體的事情(比如一個人有多少硬幣),然後找到獲勝者。我擔心的是有人可以在不關心“活躍賬戶”的情況下偽造一個新區塊,他有點假裝沒有其他人線上。所以他肯定會探勘它,因為他是唯一的一個,然後他會廣播它。他在接下來的街區一直這樣做,依此類推。
是什麼阻止其他同行接受他的鏈?
連結到 NXT 論壇上的討論<https://nxtforum.org/general-discussion/academic-questions-regarding-pos-and-nxt>
正如您從上一個問題中知道的那樣,節點有權在以下情況下鍛造一個塊並將其送出給網路。
命中 < BaseTarget * EffectiveBalance * TimeSinceLastBlock
其中新的命中和 BaseTarget 值是從最後一個塊計算的,命中值實際上是隨機的,並且 BaseTarget 被調整以保持穩定的區塊鏈增長率,約為每分鐘一個新塊。
執行 NRS(Nxt 參考軟體)的所有節點都使用相同的公式來計算這些值,因此如果所有這些節點都位於區塊鏈的同一個分支上,它們都會就這些值達成一致。檢查從另一個節點接收到的任何新塊以確保遵循上述規則。如果不是,則拒絕該塊。
即使所有節點都遵守規則,區塊鏈也有可能分叉,因為幾個節點幾乎同時有資格進行鍛造,再加上網路延遲。或者,一部分節點可能會與主網路隔離一段時間。
一旦發生分叉,競爭區塊鏈將具有不同的尾部,並且構成尾部的所有塊將具有不同的命中和 BaseTarget 值。所有執行 NRS 的節點都會選擇累積難度最大的區塊鏈,其中
累積難度 = 累積難度OfPreviousBlock + (2^64 / BaseTarget)
累積難度隨著每個新塊的增加而增加,當 BaseTarget 較小時更是如此(更難獲得成功)。
如果某個節點子集被隔離了一段時間,這些節點將繼續鍛造;但是由於它們的組合餘額較小,因此最初鍛造需要更長的時間。BaseTarget 會調整更大以縮短塊之間的時間,因此累積難度不會增長得那麼快。
當該節點子集與主網路重新連接時,主網路會考慮其區塊鏈的分叉(如果在隔離期間鍛造的區塊少於 1440 個)。但由於主網綜合餘額更大,累積難度更大,因此拒絕競爭區塊鏈。同樣,節點子集將考慮主分叉並接受它,除非在其分叉上添加了超過 1440 個塊,在這種情況下需要區塊鏈回滾或新的區塊鏈下載。
這就是在網路上達成共識的方式:它由具有最大組合餘額的節點管理。