
- 區塊鏈教程
- 區塊鏈 - 首頁
- 區塊鏈基礎
- 區塊鏈 - 簡介
- 區塊鏈的歷史
- 區塊鏈 - 技術
- 區塊鏈與密碼學
- 區塊鏈超越加密貨幣
- 區塊鏈 - 高階概念
- 區塊鏈 - 去中心化
- 區塊鏈 - DApp
- 區塊鏈 - DeFi
- 區塊鏈 - 未來展望
- 區塊鏈中的智慧合約
- 區塊鏈 - 裡卡迪安合約
- 區塊鏈 - 預言機
- 區塊鏈 - DAO
- 比特幣
- 比特幣 - 無形的黃金
- 比特幣是如何運作的?
- 比特幣 - 網路
- 比特幣 - 錢包
- 比特幣 - 創新
- 以太坊
- 以太坊替代加密貨幣
- 以太坊生態系統
- 以太坊虛擬機器
- 高階以太坊
- 以太坊錢包
- 以太坊礦工節點
- 其他
- 區塊鏈 - 雙重支付
- 公鑰密碼學
- 區塊鏈 - 雜湊
- 比特幣 - 挖礦
- 區塊鏈 - 區塊鏈
- 區塊鏈 - 工作量證明
- 區塊鏈 - 網路與挖礦
- 區塊鏈 - 礦工激勵
- 區塊鏈 - 梅克爾樹
- 區塊鏈 - 支付驗證
- 區塊鏈 - 解決衝突
- 區塊鏈 - 隱私
- 比特幣 - 緩解攻擊
- 區塊鏈 - 結論
- 區塊鏈資源
- 區塊鏈 - 快速指南
- 區塊鏈 - 資源
- 區塊鏈 - 討論
比特幣網路
比特幣網路作為一個點對點 (P2P) 系統執行,節點參與交易活動。這些節點負責驗證和傳播交易和區塊。其中,礦工是建立新區塊的專門節點。該網路包含各種型別的節點,主要分為兩類:完整節點和簡單支付驗證 (SPV) 節點。
完整節點使用比特幣核心客戶端軟體,處理錢包功能、挖礦、完整區塊鏈儲存和網路路由。但是,並非比特幣網路中的每個節點都需要執行所有這些角色。SPV 節點或輕客戶端僅專注於錢包操作和網路路由。
識別比特幣網路
比特幣網路以其獨特的魔術值為特徵,用於表示訊息的源網路。下表列出了這些值:

一個完整的比特幣節點執行四個功能。分別是錢包、礦工、區塊鏈和網路路由。我們已經在前面的章節中討論了挖礦和區塊鏈。在這裡,我們從比特幣網路繼續之前的內容。
比特幣網路中的協議訊息
目前有幾種不同的協議訊息型別,隨著協議的發展,這種型別的數量可能會增加。以下是最常用的協議訊息及其描述的列表:
- 版本 - 此初始訊息由節點發送到網路,指示其版本和區塊數量。遠端節點以相同的資訊進行響應,建立連線。
- Verack - 此訊息確認版本訊息並接受連線請求。
- Inv - 節點使用此訊息來宣佈它們知道哪些區塊和交易。
- Getdata - 此訊息是對 inv 的響應,請求由其雜湊標識的特定區塊或交易。
- Getblocks - 這將返回一個 inv 資料包,其中包含從最後一個已知雜湊開始或最多 500 個區塊的所有區塊的列表。
- Getheaders - 此訊息請求指定範圍內的區塊頭。
- Tx - 這用於在響應 getdata 協議訊息時傳輸交易。
- Block - 此訊息在回覆 getdata 協議訊息時傳送區塊。
- Headers - 此資料包可以作為對 getheaders 請求的響應返回多達 2,000 個區塊頭。
- Getaddr - 傳送此訊息以請求有關已知對等節點的資訊。
- Addr - 這提供了有關網路上節點的資訊,包括地址數量和格式為 IP 地址和埠號的地址列表。
- Ping - 此訊息用於驗證 TCP/IP 網路連線的活動。
- Pong - 此訊息是對 ping 的響應,確認網路連線正常。
比特幣網路中發生了什麼?
透過協議傳輸訊息的過程在比特幣網路中執行。這按時間順序發生,如下所示:
- 在比特幣網路中,該過程從客戶端傳輸稱為版本訊息的協議訊息開始,該訊息包含多個欄位,例如版本、服務、時間戳、網路地址、隨機數和其他資訊。
- 作為響應,遠端節點發送其自己的版本訊息,然後兩個節點之間交換verack訊息,確認連線已成功建立。
- 隨後,交換getaddr和addr訊息以識別客戶端尚不知道的對等節點。
- 在此過程中,任一節點都可能傳送 ping 訊息以驗證連線的持續狀態。getaddr 和 addr 訊息型別在比特幣協議中指定。
此網路協議序列圖說明了兩個比特幣節點在初始連線階段的通訊。

在給定的示例中,節點 A 位於左側,而節點 B 位於右側。節點 A 透過傳送包含版本號和當前時間戳的版本訊息到遠端對等節點節點 B 來啟動連線。然後,節點 B 以其自己的版本訊息進行回覆,其中也包含版本號和當前時間。
在此之後,節點 A 和節點 B 交換 verack 訊息,表示連線已成功建立。連線確認後,對等節點可以交換 getaddr 和 addr 訊息以發現網路中的其他對等節點。
此時,可以開始下載區塊的過程。如果節點已經同步了所有區塊,它將使用 inv 協議訊息偵聽新區塊。否則,它首先檢查對 inv 訊息的響應以及它是否擁有清單。如果有清單,它將使用 getdata 協議訊息請求區塊;如果沒有,它將透過 getblocks 訊息請求清單。
完整客戶端和 SPV 客戶端
比特幣網路節點可以以兩種主要模式執行:作為完整客戶端或作為輕量級SPV 客戶端。完整客戶端,也稱為胖客戶端或完整節點,下載整個區塊鏈,為驗證交易提供最高級別的安全性。
相反,SPV 客戶端允許使用者驗證支付,而無需下載完整的區塊鏈。這些 SPV 節點僅維護最長有效區塊鏈的區塊頭。透過檢查 Merkle 分支來實現驗證,該分支將交易連線到記錄它們的原始區塊。這種方法可能有些不切實際,需要更有效的解決方案,這透過BIP37引入。
布隆過濾器
布隆過濾器是一種專門的資料結構,特別是具有索引位置的位向量,旨在機率性地評估元素的成員資格。它允許進行可能產生誤報但保證不會產生漏報的機率查詢。這意味著,雖然過濾器可能會錯誤地指示某個元素是測試集的一部分,但它永遠不會錯誤地聲稱現有元素不存在。本質上,可能會發生誤報,但漏報是不可能的。
要將元素合併到布隆過濾器中,會對其進行多次雜湊,並根據結果索引將位向量中的相應位設定為 1。要驗證元素的存在,會應用相同的雜湊函式,並檢查位向量中的位是否都設定為 1。
布隆過濾器主要由簡單支付驗證 (SPV) 客戶端用於請求特定交易和相關的Merkle 塊。
Merkle 塊作為區塊的緊湊表示,包含區塊頭、幾個雜湊、一個 1 位標誌列表和交易計數。此資料可用於構建Merkle 樹。過濾器經過定製,僅匹配 SPV 客戶端已請求的那些交易和區塊。在交換版本訊息並在對等節點之間建立連線後,節點可以根據其特定需求配置過濾器。