是否可以在不使用全節點的情況下擷取網路事件?
你可能會覺得我的問題相當不切實際或胡說八道。但我必須在這裡問。
我想擷取通過主網路傳播的所有交易並檢測是否有新的區塊被開採。我不想成為全節點或 spv 節點。從技術上講,我知道這正是所有完整/spv 節點不時進行的方式。但是,我找不到一個好的參考來教我如何做。
這是一種方法嗎?任何技術資源將不勝感激。
想要擷取通過主網路傳播的所有交易並檢測是否有新的區塊被開採。我不想成為全節點或 spv 節點。從技術上講,我知道這正是所有完整/spv 節點不時進行的方式。但是,我找不到一個好的參考來教我如何做。
顯然,全節點和 SPV 節點必須從某個地方獲取它們的資訊。而那個地方只是 P2P 網路上的其他節點。
P2P 協議是節點用來相互通信的協議。在https://developer.bitcoin.org/devguide/p2p_network.html上有一些文件,在https://en.bitcoin.it/wiki/Protocol_documentation上有一些較舊但更詳細的文件)。對它的現代更改被提議為 BIP ( <https://github.com/bitcoin/bips> ),它們通常是向後兼容的更改,僅在支持它的客戶端之間使用。
具體來說,通過首先使用“inv”消息宣布它們的雜湊來中繼交易。然後接收方選擇從哪個對等點獲取完整的交易數據,並發送“getdata”消息。選定的對等點然後用“tx”消息響應。還有其他可用的機制,例如舊的(並且大部分被放棄的)BIP37 交易過濾和更新的 BIP157 客戶端過濾。
對於塊,它有點複雜。那裡的順序首先使用“getblocks”請求塊資訊,然後響應塊的“inv”,請求完整數據的“getdata”和完整塊本身的“塊”。BIP152 緊湊塊提供了一種更有效的機制,允許接收者避免接收他們已經擁有的塊中的交易。BIP130 sendheaders 啟用了一種替代方案,即使用“header”消息而不是“inv”消息宣布塊。
那麼全節點與 SPV 節點或其他節點的區別是什麼?他們執行的驗證級別。全節點將完全驗證它收到的所有塊和交易。如果您不想這樣做,那就不要 - 如果您可以信任與您聯繫的任何人。你可以自己實現 P2P 協議,或者使用現有的實現(在許多語言中都有),連接到你喜歡的任何對等點,如果你做得對,他們就會開始為你提供區塊和交易流。