Mining-Theory

BIP34、BIP66 和 BIP65 應該在唯一的區塊高度執行。為什麼不同的來源要求不同的區塊高度來執行?

  • April 23, 2020

不一致的共識/啟動 BIP

BIP34

啟動區塊高度 227,835(BitMEX 參考

啟動區塊高度 227,930(比特幣開發者參考

啟動塊高度 227,931(Github 參考

BIP66

啟動塊高度 363,724(上一個問題

啟動塊高度 363,725(Github 參考

啟動區塊高度 363,731(BitMEX 參考

BIP65

啟動區塊高度 388,380(BitMEX 參考

啟動塊高度 388,381(Github 參考

令人困惑的文件

BIP34 表示當版本 2 的 1000 個塊中有 950 個發出信號時它會啟動。目前尚不清楚這是否包括目前塊或引用先前的塊

BIP66表示,目前 1000 個塊中的 950 個發出版本 3 的信號時,它會啟動。但是,客戶端指出前 1001 個塊中的 951 個。然後 BIP66 說它使用 BIP34 協議啟動。現在我們有三種可能的方法。他們不匹配。

關於這裡發生了什麼的任何建議?

我將從解釋令人困惑的文件開始。

BIP34 表示當版本 2 的 1000 個塊中有 950 個發出信號時它會啟動。目前尚不清楚這是否包括目前塊或引用先前的塊

它指的是以前的塊。為了確定在 height 的塊的規則是否有效n,我們檢查從 950 個塊是否n-1001發出n-1版本 2 或更高版本的信號。

BIP66 表示,目前 1000 個塊中的 950 個發出版本 3 的信號時,它會啟動。但是,客戶端指出前 1001 個塊中的 951 個。然後 BIP66 說它使用 BIP34 協議啟動。現在我們有三種可能的方法。他們不匹配。

只有兩種可能的方法,它們實際上是同一件事。前 1000 塊中的 950 與 BIP 34 方法相同。如果您考慮稍微不同的角度,這實際上與之前的 1001 中的 951 相同。無論哪種方式,BIP 66 都使用與 BIP 34 相同的機制。具體來說,它們使用一個名為 IsSuperMajority 的函式來確定它們是否處於活動狀態。所以兩者都使用相同的機制。問題在於我們如何描述這種機制。

BIP 中使用的“前 1000 個塊中的 950 個”措辭正如我之前描述的那樣。n它通過查看它之前的 1000 個塊來確定規則是否被強制執行。所以這裡n不包括在計數或序列中。

“951/1001”的措辭包括塊n。它從一個塊n-1001到另一個塊n(包括)查看塊,並檢查這些塊中的 951 個是否具有正確的版本號。這兩個措辭是相同的,因為 1001 包含啟動塊,而 1000 則不包含。

考慮 950/1000 的一種方式是:在看到 1000 個區塊序列(其中 950 個區塊表示新版本)之後,下一個要開采的區塊必須遵循新規則。新規則即將開始執行。

考慮 951/1001 的一種方式是:在看到 1001 個塊的序列(其中 951 個塊表示新版本)之後,該序列中的第 1001 個塊已經執行了新規則並且已經開始執行。

基本上,人類不擅長用文字來描述事物。當您查看程式碼時,一切都會變得更加清晰。


現在討論差異。我編寫了一個 python 腳本來執行 IsSuperMajority 檢查以驗證這些數字。

嗶聲 34

我不確定 BitMex 的區塊高度從何而來。檢查該高度以及它之前和之後的高度不會導致啟動。所以我認為這是不正確的。

現在對於 277930 與 277931,這是一個解釋問題。就像我之前談到的 950/100 與 951/1001 一樣,這取決於包容性和視角。在高度 277930 處,發現了 1000 個區塊序列,其中 950 具有區塊版本 2。因此這意味著在高度 277930 處,規則並未針對該區塊執行,而是針對下一個區塊,即 277931。比特幣核心使用 277931因為這是執行 BIP 34 規則的第一個塊,所以這是原始碼中的值。

嗶聲 66

363724 與 363725 的差異與 BIP 34 中的 277930 與 277931 的差異相同。

BitMex 的數字有點混亂。唯一有意義的方法是,如果他們正在查看 BIP 66 的稍微困難的啟動。由於礦工間諜挖礦,在 BIP 66 啟動時出現了不經意的鏈分叉。區塊 363725 是執行新規則的第一個區塊。但是一個沒有升級的礦工發現了一個區塊 363725。由於他沒有升級,這個區塊在新規則下是無效的,大部分網路都拒絕了它。但是許多礦工並沒有完全驗證該區塊並在其之上進行開採。結果證明這是雜湊率的重要組成部分,他們最終產生了一個長度為 6 個區塊的分叉,然後有效的主鏈趕上了並超越了它們。這發生在塊 363731 上。所以可以說那是 BIP 66 啟動的時候。

但這還不是故事的結局。第二天,由於同樣的問題,出現了 3 個區塊的分叉。所以你也可以說 BIP 66 在一天后啟動。

無論哪種方式,BIP 66 開始執行,區塊 363725 是新規則下的第一個區塊。

嗶聲 65

388380 與 388381 的差異與 BIP 34 中的 277930 與 277931 的差異相同。

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