比特幣的網絡基礎
比特幣使用了P2P網絡架構,“比特幣網絡”是按照比特幣P2P協議運行的一系列節點的集合。除此之外比特幣網絡中還有其他協議:
Stratum協議:一個擴展網絡的橋接協議,可以將其他網絡作為一個節點連入比特幣網絡中。應用于挖礦、以及輕量級或移動端比特幣錢包之中。礦池挖礦協議:這個協議有很多種,主要用來把多個礦機算力聚合起來成為一個礦池,整個礦池作為一個節點進行挖礦,而不是每一臺礦機都配備上錢包和硬盤存儲(下一周介紹)。
P2P概念
指位于同一網絡中的每臺計算機都彼此對等,各個節點共同提供網絡服務,不存在任何“特殊”節點。每個網絡節點以“扁平(flat)”的拓撲結構相互連通,節點之間交互運作、協同處理;在對外提供服務的同時也使用網絡中其他節點所提供的服務。具有可靠性、去中心化,以及開放性。
比特幣網絡中的節點
角色功能的介紹
比特幣中雖然各個節點都是平等的,但是根據所提供的功能不同,各節點可能具有不同的角色,可以分出四大功能:
路由:參與比特幣全網絡,發現其他節點并維持數據通訊,對交易信息的驗證(不是確認)與傳播,同時也可能包含其他功能。這是所有都節點必須具備的。區塊鏈數據庫:保存由一份完整的、最新的區塊鏈賬本信息的拷貝,這可能會占用上百GB的硬盤,有這個功能的節電池成為全節點,沒有的稱為輕節點(又稱為“SPV節點”)。挖礦:用計算硬件運行工作量證明pow算法,以相互競爭的方式對交易進行確認,并創建新的區塊,同時獲得新增比特幣的獎勵。錢包:使用錢包方便快捷的管理你的比特幣。
比特幣網絡中常見的節點類型
比特幣網絡中的節點都是由以上四種功能相互組合出的,除了必須具備路由功能進行傳遞信息外,其他三種功能都可以兒根據不同的應用場景進行自由的組合。
各種角色組成了比特幣網絡
運行比特幣P2P協議的比特幣主網絡,由不到5000個運行著比特幣核心客戶端、儲存了全部區塊鏈數據的監聽節點,以及幾百個運行著各類比特幣P2P協議的應用(例如Bitcoin Classic, Bitcoin Unlimited)的節點,以及成千上萬個只保存了部分區塊鏈的數據的輕錢包節點共同組成。
其中那幾百個應用節點,是指建立在比特幣上的應用,這個應用內部可能存在一個上萬節點的網絡,但是連入比特幣網絡是只顯示一個,也就是圍繞一個比特幣網絡中的邊緣路由器來建立應用、搭建其他服務,例如交易所、錢包、區塊瀏覽器、礦池等。這是比特幣的網絡擴展能力。
如何成為一個節點
安裝好比特幣的客戶端。客戶端查找最近一個比特幣的路由服務器,獲取現有比特幣節點的IP地址。根據IP地址找到這個節點,發送自己客戶端的版本號。如果你的客戶端可以兼容系統就會建立通訊,再發送自己的IP地址等信息。已有的節點會把你添加到“通訊錄”中,并把自己的的”通訊錄“發送給你,現在你知道了其他節點的IP,可以隨便訪問。如果你要成為一個全節點,向其他全節點申請,就會把完整的區塊鏈數據全部傳輸給你。SPV節點(輕節點)
并不是所有的節點都有能力儲存完整的區塊鏈。許多比特幣客戶端被設計成運行在空間和功率受限的設備上,如智能手機、平板電腦、嵌入式系統等。通過簡化的支付驗證(SPV)的方式可以使它們在不必存儲完整區塊鏈的情況下進行工作。這種類型的客端被稱為SPV客戶端或輕量級客戶端。
與需要下載一個區塊全部賬本數據的全節點不同,SPV節點只需下載一個區塊頭部的部分數據,而不用下載包含在每個區塊中的交易信息,同時只保存上與自己相關的交易信息。由此產生的不含交易信息的區塊鏈,大小只有完整區塊鏈的1/1000,卻可以做到足夠的安全。
SPV:簡單支付驗證
通過對全節點的交易驗證方式進行對比可以更好的理解:全節點:構造一條驗證鏈,這條鏈是由沿著區塊鏈按時間倒序一直追溯上去的,直到這一枚比特幣挖出來的那個區塊,有數個交易組成。
例如:一個全節點要檢查高度300,000的區塊中的某個交易,它會把從該區塊開始一直回溯到創世區塊的300,000個區塊中的交易全部都鏈接起來,并建立一個完整的UTXO數據庫,通過確認該UTXO是否還未被支付、夠不夠,來證實交易的有效性。
SPV節點:驗證所有區塊之間的鏈,但不會對所有的交易進行溯源,只是把區塊鏈中僅僅與目前交易有關的過往交易鏈接起來。例如:SPV節點在驗證UTXO時,只要知道在這筆交易中,將要用于“支付”的那筆UTXO是否已經在之前的區塊里被驗證通過,就可以了,別人的事情我們不用操心。如你你想驗證一個其他交易,只需要向比特幣網絡中的全節點尋求驗證,全節點就會把相應區塊上的交易信息全部發給你,就就可以拿去驗證了。
在絕大多數的實際情況中,具有良好連接的SPV節點是足夠安全的,它在資源需求、實用性和安全性之間維持恰當的平衡。
內存池或交易池:幾乎每個節點都會維護的一份未確認交易的臨時列表,用以追蹤記錄那些被網絡所知曉、但還未被區塊鏈所包含的交易。
UTXO池:有些比特幣客戶端維護的一個UTXO數據庫,是區塊鏈中所有未支付交易輸出的集合——表現為余額。
發文者:鏈站長,轉載請註明出處:https://www.jmb-bio.com/4267.html