BTC牛市前先要掌握好這幾個知識點

分類:新聞/2020-07-16/閱讀:

比特幣距其第三次“產量減半”完成已過去了兩個月的時間,而這段適應期,為defi、filecoin等熱點的爆發提供了機會,但加密貨幣市場真正的主角,從來都是比特幣。隨著傳統金融市場的投機潮進入尾聲,比特幣有望重回大眾的視線,那關于比特幣,有哪些知識點是需要我們去掌握的呢?

在這篇文章中,作者Gloria Zhao將介紹比特幣的四大節點類型,并描述它們之間形成的P2P連接,旨在幫助大家更好地理解比特幣的概念。

比特幣拍了拍你,牛市前先要掌握好這幾個知識點

這是一份對初學者友好的比特幣“圖譜”,它可以幫助你理解各種各樣的節點、軟件以及比特幣網絡的參與者。

比特幣網絡通常被描述為點對點(P2P)、分布式或去中心化的,也經常會有人把它錯誤地繪制成下面這個樣子:

比特幣拍了拍你,牛市前先要掌握好這幾個知識點

實際上,它可能更像是下面這個樣子:

比特幣拍了拍你,牛市前先要掌握好這幾個知識點

那什么是節點,它是做什么的?節點是一個服務器還是一個客戶端… 或者兩者兼而有之?鑒于比特幣軟件有很多種,什么才算是一個節點?比特幣的所有參與者(用戶、礦工、節點、錢包),它們是如何相互作用的?

本文繪制了一張比特幣網絡圖,闡明了這些定義并進行了簡化。我們將根據服務器/客戶端功能對不同類型的節點進行分類,并描述它們之間形成的P2P連接。本文沒有提供整個網絡的統計數據,而是主要關注于列舉網絡中的各種可能性。

簡短的答案

首先,那些標有比特幣標志(?)的圓點是P2P網絡中的節點,而邊則是這些節點之間的P2P連接。實際上,比特幣網絡當中有很多不同類型的節點,這可以根據它們為其他對等方和客戶端提供服務的能力進行分類,節點可以在任何給定的時間點充當服務器、客戶端或兩者兼而有之。

節點 = P2P網絡上實施比特幣P2P協議的參與者,只要節點遵循比特幣的協議,它無需運行任何特定的軟件。

P2P連接=使用比特幣P2P協議通信的兩個節點之間直接建立的網絡連接。我們經常使用“peer”來指代與某個節點有P2P連接的其他節點,也翻譯成對等節點。

節點的類型

從廣義上講,節點根據其維護的狀態及可提供的服務分為四類。

1、全節點(又稱全驗證節點)= 能夠驗證交易和區塊的節點。全節點不會每次都在區塊數據庫中進行搜索,而是保留某種狀態,即設置一個UTXO(未使用的交易輸出或“幣”)。

因此,只要比特幣節點維護一些區塊元數據和最新的UTXO集,它們就不必為驗證而需要完整的區塊鏈副本。修剪節點實現了這種精確的行為:它們下載并處理區塊以構建必要的數據庫進行驗證,然后丟棄舊區塊以節省磁盤空間。因為它們擁有所有的信息并且可以驗證所有新的區塊和交易,因此它們也是全節點。

2、存檔節點 = 具有區塊鏈整個歷史副本的節點。這些節點能夠驗證傳入的交易和區塊,以及從歷史上的任何點查詢區塊和交易數據,包括那些不再與驗證相關的數據(因此命名為“存檔”)。存檔節點的存在是至關重要的,因為新節點需要跟上整個歷史記錄,才能成為全節點。它們只能通過從存檔節點一次一個區塊地下載歷史記錄來實現這一點。

3、挖礦節點 = 生成新區塊的節點。這包括維持一個未確認交易的存儲池(Mempool),驗證新交易,以及解決工作量證明哈希難題(即查找nonce)來構造區塊。挖礦節點通常使用額外的硬件(例如Asic礦機)來協助它們解決哈希難題,或者說參與到礦池當中。從技術上講,還有一些非全節點會加入礦池,連接到管理該礦池的全節點,并幫助解決PoW難題,而無需進行任何驗證(因此有些挖礦節點實際并不是全節點)。

4、輕客戶端 = 這種節點不保留完整驗證所需的完整狀態,而是信任其他全節點來執行此操作。 輕客戶端可能會保留有限數量的數據,以驗證其自身的交易,但不能完全驗證所有區塊。在Bitcoin Core中,“輕客戶端”通常與簡化支付驗證(SPV)節點同義,但不要把它和修剪節點混淆。在某些情況下,輕客戶端并不能稱作節點,因為它們不執行全節點通常執行的大多數操作。

比特幣拍了拍你,牛市前先要掌握好這幾個知識點

 

節點的其他概念

節點可能還具有影響其參與網絡的其他特征,但彼此之間或以上四個類別中的任何一個都不互斥。由于去中心化的性質,以及對比特幣生態系統中可訪問性的關注,因此,只要節點實施P2P協議并遵守共識規則,節點運營者就可以自行決定實施細節和采用特征。

初始區塊下載(IBD):這是一種臨時狀態,在該狀態下,節點尚未達到當前區塊的高度,并需要下載舊區塊。而全節點在沒有下載相關區塊時無法告知你相關的交易。而getblockchaininfo RPC會返回節點是否在IBD中。

僅區塊(Blocks Only)模式:一種非臨時模式,在此模式下,全節點僅驗證區塊及其中的交易,它不驗證任何未確認的交易(除了它自己的交易之外),不保留mempool,并要求其對等節點不要向其中繼交易。

Bitcoin Core:這一開源軟件最初是由中本聰編寫,目前由眾多貢獻者在負責維護,你可以從bitcoincore.org上找到相關的軟件。我們要知道的是,Bitcoin Core并不是比特幣P2P網絡中唯一存在的軟件,一些節點運行實現特定行為的自定義補丁,而某些節點可能會使用舊版本(沒有納入新規則)的Bitcoin Core。重要的是要認識到哪些新功能需要全面的網絡合作,不要指望節點正確或誠實地運行,并且要考慮到節點運營者在升級軟件時會猶豫不決,或者采用新軟件的進程會很緩慢。

惡意行為:故意傷害網絡的任何類型行為(不包括漏洞、網絡復雜性或其他無意的行為)。比特幣假設了一個高度敵對的環境,包括可能遭到拒絕服務攻擊,旨在進行雙花的女巫攻擊/日蝕攻擊,試圖對地址去匿名化的間諜節點攻擊等。

節點作為服務器

我們已經看到,每個單獨的節點都依賴于它的對等節點來發送它需要的信息。此外,節點通常通過非P2P接口(如RPC、HTTP/REST和GUI)為許多用戶和客戶端軟件提供服務。

可將節點用作服務器的非節點客戶端的一些示例:

  1. 運行節點的用戶發送和接收比特幣;
  2. 管理密鑰、創建交易,并可能保留與這些密鑰相關聯的一些UTXO狀態的錢包,但沒有區塊鏈的副本,而是依靠節點來獲取最新信息;
  3. 面向用戶的軟件服務和應用程序,例如區塊瀏覽器、交易所以及商家,它們查詢全節點以獲取信息并將其顯示在網頁或應用程序上;
  4. 開發人員在regtest模式下創建節點來測試功能或接口本身;
  5. 面向開發人員的軟件,如SDK、API和其他接口。例如,Bitcoin Core CLI (bitcoin-cli)使用RPC接口來實現命令行接口;

雖然P2P網絡上節點的對等方看不到這些連接,但它們卻構成了比特幣功能的重要部分。Bitcoin Core開發者在開發新功能或決定支持哪些功能時,會認真考慮這些參與者。

現在,我們將節點理解為服務器和客戶端,下面是單個節點的視圖:

比特幣拍了拍你,牛市前先要掌握好這幾個知識點

節點的簡化視圖

P2P連接類型

比特幣中的P2P連接都說“相同的語言”,因為它們都使用P2P協議進行通信,但其對話內容卻多種多樣。Bitcoin Core的實現試圖通過促進對等節點發現和仔細管理連接來平衡穩定性(傾向于靜態連接)和可訪問性(鼓勵接受來自新節點的連接)。Bitcoin Core基于連接的發起方式,來區分三種主要類型的連接。

1、出站(Outbound)= 節點通過對等發現發起的自動連接。節點發現首先要獲取已建立節點的IP地址列表,然后是一個連續的動態過程,即公布自己的地址并嘗試連接到你知道的地址。根據你的節點需要什么(例如在IBD中),它可以優先考慮能夠提供特定服務的連接(例如服務于過去的區塊和交易)。

2、入站(Inbound) = 對等方發起的自動連接(到你的對等節點)。為了安全起見,入站流量在默認情況下是禁用的,你需要配置一些網絡和防火墻設置才能啟用它。

3、手動(Manual)= (例如通過CLI或RPC)手動而自動建立的連接。你可能會創建一個手動連接,比如你需要連接到一個你信任之人操作的節點,或者你正在測試軟件,并且需要控制這些連接。

P2P連接的其他概念

1、出站連接的多樣性

出站連接可根據接收到的信息和連接的持續時間,細分為更多的類別。

全中繼(Full-Relay)出站連接希望傳達所有信息,包括區塊、交易以及地址(用于查找對等方,類似于IP地址,并且不會與交易中使用的錢包地址混淆)。僅區塊中繼(Block-Only-Relay)出站連接僅期望接收區塊,不要將其和僅區塊(blocks-only)模式混淆。對于全節點,建立與1-2個對等節點的僅區塊中繼連接,以及對其他所有人建立全中繼連接是完全正常的。

One-Shot 和 Feelers是用于節點發現的臨時出站連接。One-Shot連接用于請求可用于查找新對等方的地址列表。Feelers連接用于驗證地址是否與實際節點相對應。

2、個體差異

如我們所見,每個節點可能提供不同的服務,并從其對等節點查找特定的信息。每個連接都是從version握手開始,其中節點發送有關其自身的信息(例如最佳區塊高度)并協商要談論的內容(例如僅對區塊感興趣)。連接也可能會通過后續消息(例如費用過濾器消息)發生變化,以表明它們僅對以最低費用率中繼的交易感興趣。

3、勸阻,斷開和禁止

Bitcoin Core節點會跟蹤對等方的行為,以表明它們可能是惡意的或運行了故障軟件。作為對此類行為的響應,節點可能會選擇阻止(標記其錯誤行為,可能會斷開連接以支持新的對等方節點)、斷開連接或禁止對等方節點。

4、權限和白名單

節點還可以保持一份每個對等方擁有的權限列表,例如允許它請求的特定服務,或對通常會受到處罰的不當行為的容忍度。通常會為自定義的個人輕客戶端,和由彼此信任的人操作的節點手動添加允許的不當行為。相關的節點也可以將特定的IP地址列入白名單。

5、不對稱的重要性

請注意,每個單獨的連接是雙向的,但它們是不對稱的:發起對等方可能會將連接理解為[全中繼]出站、僅區塊中繼、feeler或one-shot連接,但接收對等方只看到具有某些既定規則的入站連接。這通過含糊不清的方式,隱藏了有關節點行為是揭示其內部機制還是僅反映了連接性質的信息。

例如,如果一個節點知道它的對等方處于blocksonly模式(即拒絕所有傳入的交易消息),那么很明顯,從該對等方發送的所有交易都對應于其自己的錢包地址。相反,接收節點只看到關閉了交易中繼的入站連接。

這可能意味著blocksonly模式,僅區塊中繼連接或連接的特性。單個節點更詳細的視圖如下所示(請注意,箭頭的方向僅指示發起哪個節點,而不是說通信是非雙向的):

比特幣拍了拍你,牛市前先要掌握好這幾個知識點

稍完整一些的節點視圖

“完整”圖譜

每個節點對整個網絡所了解的信息是有限的,節點實際上只看到了自己的對等節點,而對等節點可能會謊稱自己是什么類型的節點。在日蝕攻擊事件中,所有對等節點甚至可能都來自于同一個人。這對于隱私和安全性來說是一個優勢,因為它同樣適用于對手方。信息有限會使定向攻擊更加困難,通過創建大量臨時連接,可以收集有關網絡中有多少個節點的大概信息,但這些信息遠非全面。

例如,網絡上不會立即顯示節點是否參與了礦池。通過大致了解哪些節點是礦池的一部分,并觀察它們“挖掘”了多少區塊,一些網站就能夠生成計算能力比例的分析。但是,它們可能會產生誤導,因為節點組甚至多個礦池完全可能是由一個實體操作。

綜上所述,我們可以想象出這張簡化的網絡圖譜:

比特幣拍了拍你,牛市前先要掌握好這幾個知識點

簡化的比特幣網絡圖譜

該圖表示了各種可能性,而沒有展示網絡規模(非常大)或拓撲結構(動態且未知的)。 請注意,可能性包括:

  1. 具有通過非P2P接口連接的各種客戶端的Bitcoin Core全節點。例如從bitcoincore.org下載該軟件,并使用命令行或GUI來發送和接收幣的用戶。
  2. 輕量級客戶端盡其所能連接到各種全節點,以便為自己的客戶提供服務。
  3. 一個服務于一個或多個輕客戶端的全節點,也許是一個比特幣狂熱者,他使用一些云服務提供商在其個人設備上運行一個全節點,并使用一個更輕量級的應用程序。
  4. 通過P2P網絡和某些專用網絡連接到一組自定義輕客戶端(例如,個人礦池參與者)的自定義全節點(例如礦池管理者)。

結論

希望這篇文章有助于澄清人們所說的“節點”和“P2P網絡”的含義,并將網絡中所有參與者如何相互作用的要點聯系起來。我希望它也為Bitcoin Core如何實現點對點連接以保護隱私,以及如何使得新節點能夠參與進來,提供一些見解,謝謝閱讀!

非常感謝John Newbery和Amiti Uttarwar,他們幫助我理解和記錄了這些信息。

發文時比特幣價格:¥63871.2 行情來自 OKEx.ME
比特幣家園
比特幣家園APP掃碼下載
官方APP
CopyRight ? 比特幣家園 www.dljett.com 蘇ICP備18045312號
二維碼
APP
一日本道在线不卡视频