- 區塊鏈浪潮:連接技術與應用
- 賈英昊 江澤武等編著
- 658字
- 2019-09-16 15:06:42
2.2 比特幣中的P2P網絡
在比特幣網絡中,每個節點可隨機連接到其他節點,節點也可隨時加入網絡或離開網絡。整個網絡的節點總數是不確定的。各個節點在進行信息更新時,它們并不是實時一致的,而是只需在一定時間內達到一致。也就是說,部分節點的退出或崩潰,并不會帶來整個網絡的癱瘓;用戶的加入和退出并不會對整體網絡產生太大影響。
節點與節點之間的信息交換,主要以交易廣播的方式體現。交易廣播通過泛洪(flooding)的方式來實現。具體來說,節點發起一個交易的時候,會將這筆交易的信息告知所有相鄰節點,相鄰節點將根據存儲的歷史交易信息校驗這筆交易是否可以進行,如果校驗通過,這一交易信息會繼續接力傳播給下一批相鄰節點。交易信息會像漣漪一樣在節點群里擴散、傳播開來。當節點接收到的交易信息與該節點交易池的信息重合,即表明這一信息已經傳播一次,這才終止廣播。由于每個交易有獨一無二的哈希值,通過哈希值查詢交易信息是否重復非常方便。
需注意的是,在P2P網絡中,由于帶寬等原因,信息的傳遞往往是有延遲的。因此不同節點的交易池內容略有不同。如果有人發起雙重支付攻擊,并且兩筆支付到達了同一個節點,誠實的節點將會僅保留一個交易,另一個不再廣播,最終網絡中不同的節點可能在短時間內存在記錄不同交易的分歧,但是沒關系,隨著時間的推移,共識機制保證了最終只會記錄一筆交易,使得雙重支付攻擊無法成立。
簡要而言,比特幣項目在P2P網絡中建立起一個現金支付系統,主要依靠以下因素:節點之間地位對等;交易信息在節點間以泛洪的方式傳播;節點檢查交易是否成立;由共識機制確定合法的交易信息。