Block
是否僅在找到 nonce 後才發送塊?
增加塊大小的問題之一是,由於發送大塊的網路延遲,它可能會更頻繁地被孤立。為什麼礦工一開始工作就不能在沒有隨機數的情況下發送區塊。當他們找到隨機數時,他們可以發送帶有塊頭的隨機數,這會很快。其他節點驗證也很快,因為他們只需使用隨機數檢查一個雜湊即可知道該塊是否有效。他們之前已經驗證了交易,並且在很久之前就已經驗證了 merkleroot。
這實際上已經在多個層面上發生了,儘管沒有直接的礦工互動。比特幣核心和比特幣中繼網路都有自己的區塊驗證前向準備實現,目的是盡可能加快區塊傳播。一種專注於驗證延遲,一種專注於頻寬和延遲。
- 比特幣核心有一個它在網路上看到未經確認的交易的驗證記憶體,這允許最昂貴的操作(執行腳本和驗證簽名)在它們被包含在任何塊之前很久就發生了。很多時候,一個在網路上活躍了幾分鐘的節點已經驗證了大部分到達的新塊。當看到一個新塊時,未記憶體的事務被驗證,輸入被檢查,並且塊被連接,而無需對內容進行廣泛、昂貴的驗證。
- 比特幣中繼網路將這一概念更進一步,它跟踪節點已經驗證的交易並傳輸不包括這些交易的區塊,以節省線上時間。對於許多塊,這意味著網路只需要推送標頭(80 字節)和一個 2 字節整數來引用所有包含的交易。一個完整的區塊總共可能只有幾百字節,並且可以在網路中快速洗牌,然後由客戶端使用他們在其記憶體池中已有的交易重新組裝。與僅使用 P2P 網路來中繼塊相比,大部分礦工和服務使用它來大幅減少網路延遲和隨後的陳舊塊率。
礦工不會傳輸未解決的區塊純粹是因為這將是一個大規模的拒絕服務問題,並且每小時可能有數十萬個候選區塊沒有得到解決。最終,中繼網路實現了與您建議的結果相同的結果(只是傳輸一個隨機數),並且實際上使用的頻寬比普通 P2P 網路要少得多。