位元幣網路的通訊機制 從交易建立到打包進區塊

2021-10-18 17:38:48 字數 4324 閱讀 2121

這個系列的第二篇來了,有了第一篇的基礎,這篇可以直接來梳理位元幣網路從交易的建立到被打包進區塊的整個過程的通訊機制。我會盡可能詳細的把這整個過程擼一遍。首先,乙個交易的建立是通過位元幣節點的錢包應用來負責的。這裡錢包應用功能的多少是由節點型別來決定的。如果是全節點,那麼這個位元幣錢包實際上就包含整個區塊鏈上每筆交易的未消費輸出的副本。這裡提到了乙個詞,未消費輸出。通俗點來說,就是還沒有花出去的錢,也就是錢包裡還可以花的錢。所以輸出的意思就是花出去的錢。另外,既然有輸出就要有輸入,輸入則指的是從別人那裡得到的錢。而輕量級節點的錢包應用只負責維護自己的未消費輸出。

另外,需要注意的一點是,位元幣節點在建立交易的時候,可以在離線狀態下進行。這個時候建立的交易暫時不會被傳播到網路上,無法被網所感知,所以這筆交易會被儲存在節點中的乙個叫做孤立交易池的地方。而如果位元幣節點在聯網狀態下建立的交易,交易建立完成後,就會被傳播到位元幣網路上,這樣的話,交易就會被網路感知到,儲存到每個節點的交易池中。

位元幣網路存在的目的就是講交易和區塊傳播給所有的參與者。節點在網路上的連線方式是任意的。可以通過有線、wifi、流動網路或者其他方式進行連線。乙個節點將建立的交易通過gossip協議進行傳播。gossip協議是一種通訊協議,主要用在分布式資料庫系統中各個副本節點同步資料之用,這種場景的乙個最大特點就是組成的網路的節點都是對等節點,是非結構化網路,這區別與之前介紹的用於結構化網路中的 dht 演算法 kadmelia。具體的gossip協議的介紹可以參考下面這篇文章:

p2p網路核心技術:gossip協議

任何收到了之前沒見過的有效交易的位元幣節點,會立即向連在它之上的所有其他節點**,這個傳播技巧叫做洪氾。因此,交易迅速在整個點對點網路上迅速傳播,在幾秒鐘之內傳播到大部分節點。

另外,需要注意的一點是,一筆交易需要傳遞至位元幣網路,才能被傳播,也才能加入區塊鏈中。本質上,一筆位元幣交易只是200到400位元組的資料,而且它們必須被傳送到成千上萬個位元幣節點中的任意乙個。

一旦一筆位元幣交易被傳送到任意乙個連線至位元幣網路的節點,這筆交易將會被該節點驗證。如果交易被驗證有效,該節點將會將這筆交易傳播到這個節點所連線的其他節點。同時,交易發起者會收到一條表示交易有效並被接受的返回資訊。如果這筆交易被驗證為無效,這個節點會拒絕接受這筆交易且同時返回給交易發起者一條表示交易被拒絕的資訊。另外,位元幣節點在驗證交易的時候,驗證方式會隨著節點型別的不同而不同。對於全節點來說,因為它本身就具有整個區塊鏈上每筆交易的未消費輸出的副本,所以它既能構建交易,也能快速驗證收到的新交易;而對於輕量級節點來說,由於它只維護自己未消費的輸出,所以它在驗證交易的時候需要通過不同的服務提供者的各種可用可程式設計介面(api)從位元幣網路查詢這個資訊,或者通過全節點的api呼叫來查詢這個資訊。

由於這筆交易是經過簽名且不含任何機密資訊、私鑰或密碼,因此它可被任何潛在的便利網路公開地傳播。位元幣交易因此可以通過未加密網路(例如wifi、藍芽、nfc、chirp、條形碼或者複製貼上至乙個網頁**)被傳送到位元幣網路位元幣交易的安全性,是由各個節點的驗證,以及數字簽名這些來保證的。位元幣將金錢變成了一種資料結構,所以在本質上是不可能阻止任何人建立並執行位元幣交易的。

乙個交易已經在位元幣網路上進行傳播,它只有通過「挖礦」的過程被檢驗並被包括到乙個區塊之中才會成為區塊鏈的一部分。

挖礦在位元幣系統中有兩個作用:

新的交易持續地從錢包和其他應用中流入網路。當這些交易被位元幣網路的節點所看到時,便會被加入每個節點維護的未驗證交易的臨時池子,也就是前面提到的交易池中。當礦工打包新的區塊時,他們從池子中選擇未驗證的交易通過挖礦軟體進行驗證,驗證通過之後加入新區塊,然後嘗試使用工作量證明演算法來證明這個新塊的有效性。

交易被加入到區塊中之後,會按照最高手續費和其他一些條件進行優先順序排序,一般情況下,手續費越高,交易通過驗證以後打包越快。這個時候礦工開始挖礦,一旦有礦工挖出來以後,並且在全網發布了區塊,那麼在挖這個區塊的其他礦工就知道自己輸掉了這一輪的競爭,就會開始挖掘新的區塊。

挖掘新區塊的步驟:

如果他發現乙個讓這個區塊「有效」的解答,便「贏得」了報酬,因為他發現的區塊被加入到了全球區塊鏈,他得到的獎勵交易也變得可用。

需要注意的一點是,這個區塊如果遭遇到雙花攻擊等類似的攻擊,很有可能被廢掉。所以一般情況下,任何有6個或者以上確認的區塊可以被看作是不可逆的,因為如果要作廢和重新計算6個區塊所需要的計算量是巨大的

注:雖然位元幣系統平均每10分鐘出乙個塊,或者等到6個區塊掛在後面的時候,交易就已經可以完全確定被全網接受並且不會被廢掉了。但是這樣的延遲對於小額交易來說太長了。所以乙個商人可能接受一筆有效的小額交易而不需要任何確認。因為本身交易的數額比較小,就算是損失,也損失不大,在商人的可承受範圍之內。

說完了從交易建立到交易被打包進區塊的過程,不妨再進一步,看看節點之間的通訊和資訊交換是怎麼進行的。

首先,我們知道位元幣是在網際網路之上依照點對點網路架構來設計的。因為每乙個節點在網路中都是平等的,也就是他們既可以充當客戶端,也可以充當伺服器,所以網路是一種扁平化的拓撲結構,以這樣的形式在網狀網路中相互連通。

「位元幣網路」指的是執行位元幣p2p協議的節點集合。在位元幣p2p協議之外,位元幣網路還包含其他的協議,例如stratum,被用於挖礦,輕量級或者移動錢包。基於位元幣協議訪問位元幣網路的網管路由器提供這些額外協議,將網路擴充套件到執行其他協議的節點。我們使用「擴充套件位元幣網路」來代指包括了位元幣p2p協議、礦池挖礦協議、stratum協議以及其他任何連線位元幣系統元件的相關協議的整體網路

雖然位元幣的p2p網路中的節點彼此對等,但取決於支援的功能,他們可能扮演不同的角色。乙個位元幣節點是乙個功能集合:路由、區塊鏈資料庫、挖礦和錢包服務。

包括四種功能的全節點如圖所示:

常見的位元幣節點型別如下圖所示:

由這些節點所組成的擴充套件位元幣網路的拓撲如下圖所示:

雖然位元幣網路很好地通過p2p的網路架構實現了去中心化,通過工作量證明的共識機制實現了很好的安全性,但是由此帶來的弊端就是它的網路延遲太高了。比如位元幣系統區塊的平均產生速率是10分鐘,然後區塊廣播到網路上的各個節點也有時延。這其中最關鍵的就是礦工在傳播自己的獲勝區塊和下一輪競爭之間的時間。一旦這個時延一長很容易出現問題。這裡舉乙個例子,同時有兩個礦工挖到了區塊,然後兩個礦工一塊進行廣播,其中乙個礦工的延遲小,而另乙個礦工的鏈路突然故障(即傳播的延遲可以理解為無窮大),這個時候能夠成功獲得報酬的礦工顯然是哪個延遲小的礦工,而另乙個礦工的區塊就直接廢掉了。或者這個礦工在把鏈路修好後,換了更好的鏈路,使他的延遲更小,他就可以選擇把這個區塊保留,但是不公布,接著挖,一旦運氣好,迅速挖到了下乙個區塊,那麼就可以一下子公布兩個區塊,直接使主鏈分叉,同時因為新的鏈要比主鏈要長,依據最長鏈原則,那麼新的鏈就會變成主鏈,那麼該礦工就會一下子獲得兩份獎勵,這就是利用該延遲(礦工在傳播自己的獲勝區塊和下一輪競爭之間的時間)進行自私挖礦攻擊的原理。

所以,為了縮短礦工之間傳送區塊延時,有人開發出了位元幣中繼網路。最初的位元幣中繼網路是核心開發者matt corallo在2023年建立的,以便能在礦工之間以極低延時實現區塊的快速同步。這個網路由幾個託管在全球amzon web service(由美國亞馬遜公司提供的雲計算服務)的基礎設施上的特殊節點組成,用來連線絕大多數的礦工和礦池。

後來,最初的位元幣中繼網路在2023年被替換成快速網際網路位元幣中繼引擎(fast internet bitcoin relay engine,簡稱為fibre),它還是有核心開發者matt corallo建立的。fibre是乙個基於udp協議的中繼網路,在網路節點之間傳播區塊。fibre實現了緊湊區塊的優化來進一步降低傳送的資料量與網路延時

falcon是另乙個中繼網路(仍在提案階段),它是基於康奈爾大學的研究提出的。falcon使用「直通式路由」而非「儲存-**」式路由來降低時延。這種方法當收到乙個區塊的一部分內容時就開始傳輸,而不是等到完整的區塊被接收。

中繼網路不是位元幣p2p的替代品。相反,它們是覆蓋網路,為存在特殊需求的節點之間提供額外的連線。就好像高速公路不是村道的替代品,而是交通繁忙的兩點之間的捷徑,但你仍然需要有小路連線到高速公路。

3 位元幣的交易機制

前兩章泛泛討論位元幣 本章幫助我們真正懂得位元幣實質 去中心化 或分布式 協議確保賬簿中儲存資料的共識 賬簿形成一種貨幣系統。同時假設,可用貨幣獎勵礦工,使礦工積極完成記賬 本章 圖3.1,愛麗絲在第一筆交易裡收25 轉17給鮑勃,她賬戶還有8 為搞清楚,須回過頭去看和愛麗絲有關的所有交易,更有效的...

從UTXO理解位元幣機制

要了解uxto,首先我們要理解狀態和事件 確定的行為一定導致確定的結果,這是同步的本質。這在程式裡面叫做事件與狀態。狀態是無法同步的,因為狀態的資訊非常巨大,所以計算機同步的任何資訊都是事件。接著來看位元幣中utxo的概念 比如一百萬人的賬戶數字,是乙個狀態,我不需要把這一百萬人的資訊全部發過來。我...

位元幣共識機制的思考

一 共識 在乙個所有參與者都認識並且信任 通過ca 驗證機構頒發的認證資料 的商業網路中,交易被校驗並進行提交到共享賬本中需要通過多種多樣的共識方式,包括以下 1 工作量證明 為了驗證該交易,驗證者需要獲得這個網路價值的一大部分。使得攻擊需要耗費很多的能力價值,這樣來避免攻擊。2 多項簽名 需要大多...