最大塊大小的目的是什麼?
比特幣在每個區塊中最多有1 MB 的交易數據。
- 為什麼會有這個限制?
- 什麼時候添加的?
- 它是暫時的嗎?
為什麼會有這個限制?
- 維護共識
必須有明確定義的規則,關於哪些塊是有效的,哪些不是網路同意的。顯然,沒有一個節點會接受一個 1000 萬 TB 的塊,即使它是有效的,也幾乎不可能下載。那麼你在哪裡設置限制?如果一個節點設置的限制與網路上的其他節點不同怎麼辦?如果發生這種情況,當廣播一個滿足某些節點大小限制但不滿足其他節點大小限制的塊時,網路將不再就哪些塊是有效的達成共識。
對最大區塊大小設置網路限制可確保每個人都同意哪些區塊有效,哪些無效,從而達成共識。
- 避免(進一步)礦池中心化
假設我們完全移除 1 MB 的上限。一個大型礦池對自己說:“我希望我擁有更大比例的網路雜湊率,這樣我就可以獲得更多利潤。”
然後他們意識到,由於沒有塊大小限制,他們可以通過用廢話填充它來製作一個 4 GB 大的塊。他們和其他一些池的頻寬足夠大,可以在合理的時間內下載這種大小的塊,但較小的池沒有。然後,這個小礦池被卡住,試圖下載一個太大的塊,並繼續探勘他們之前的塊,直到他們完成下載新塊。這意味著小礦池現在正在浪費時間探勘即使解決了也可能永遠不會被接受的區塊,因為它們不會處於“最長”鏈中。由於浪費了他們的算力,原來的礦池運營商現在已經有效地將較小的礦池擠出網路,同時提高了它們在網路雜湊率中的百分比。
- 使全節點可行
從本質上講,更大的塊意味著可以下載和驗證鏈的人更少,這導致願意執行完整節點並儲存所有區塊鏈數據的人更少。
如果沒有塊大小限制,惡意者可以人為地用廢話來膨脹塊,並增加執行全節點的每個人的伺服器成本,此外,讓只有家用電腦的人甚至無法跟上網路的速度。
目標是找到一個塊大小限制,在資源限制(以便家用電腦上的某人仍然可以執行完整節點)和功能要求(每秒能夠處理 X 筆交易)之間進行正確權衡。最終,交易可能會使用小額支付渠道在鏈下完成,但目前不存在這樣的解決方案。
什麼時候添加的?
從 2010 年 7 月開始的這個 commit顯示了添加
MAX_BLOCK_SIZE
參數的實際送出。送出實際上甚至沒有提到添加了最大塊大小,這很奇怪。我懷疑它是作為修復關鍵錯誤的版本的一部分完成的,因此中本聰可以確定每個人都會升級。