比特幣交易和區塊鏈如何通過網際網路傳輸?
所以我有幾個與這個主題相關的具體問題,我知道概念性的答案,我只對技術細節感興趣(我是一名開發人員,所以有程式術語和概念)。
我的問題是:
- 如果我從我的錢包應用程序(例如電子)發送交易,它在引擎蓋下做了什麼?它使用 HTTP 協議還是其他協議?或者甚至不使用 TCP 而是使用 UDP?
- 礦工如何“傾聽”交易?他們在監聽某個埠嗎?有沒有像這樣“聽”的通用協議?
- 當礦工開採一個區塊時,他/她如何將其廣播到網路上?它與從我的電子錢包發送交易一樣嗎?
比特幣 P2P 網路
比特幣 P2P 網路是一個隨機連接的八卦網路。這意味著所有節點都使用自定義 TCP 協議(通常使用埠 8333)與其他對等點建立任意連接(使用各種方式發現新地址)。典型節點創建 8 個傳出連接,如果可公開訪問,則最多接受 100 個傳入連接連接。
它是一個八卦網路,意味著節點相互發送消息,形式為“你有散列 X 的塊”或“你有散列 X 的交易嗎”,之後對等方可以通過詢問完整的交易或塊來響應. 簡而言之,這意味著最終每個節點都會了解每個塊。該協議是雙向的——誰與誰連接並不重要;雙方都將宣布他們是否有他們不知道對方已經擁有的東西。
並非所有網路節點都可以訪問。有些只建立傳出連接。有時會在某人執行公共可訪問節點的情況下使用設置,然後執行僅連接到他們自己的公共節點的第二個私有節點,從而提供一些額外的隱私並減少攻擊面。
並非所有網路節點都會驗證他們看到和傳遞的區塊和交易。這樣做的節點稱為完整節點。
礦工(或至少是礦池)執行這樣的節點,獲取節點了解的交易,將它們組裝成候選塊,散列以找到隨機數,如果成功,則使用相同的 P2P 將生成的塊廣播給他們的對等方網路。這種方式的礦工並不特殊——人們不會直接向礦工送出東西。
從最近開始,該協議的擴展用於更有效地中繼塊,稱為緊湊塊。它利用了大多數節點已經將大部分事務添加到新塊中的事實。
專用中繼網路
存在使用專用協議以非常快速地互連節點的節點組的附加網路。一種這樣的協議是FIBER,它實際上是基於 UDP 的,並且大量使用糾錯碼來避免往返。
電子琴
具有諷刺意味的是,您問題中的 Electrum 是一個壞例子。Electrum 不是 P2P 客戶端(甚至不是輕量級客戶端)。相反,它使用客戶端-伺服器架構,並連接到專門的伺服器(但它們本身就是比特幣 P2P 節點)。