根據中本聰的論文《Bitcoin: A Peer-to-Peer Electronic Cash System》中對比特幣系統的描述,我們可以整理出如下圖所示的比特幣系統架構。
如圖所示,比特幣系統分為 6 層,由下至上依次是存儲層、數據層、網絡層、共識層、RPC 層、應用層。
其中,存儲層主要用於存儲比特幣系統運行中的日志數據及區塊鏈元數據,存儲技術主要使用文件系統和 LevelDB。
數據層主要用於處理比特幣交易中的各類數據,如將數據打包成區塊,將區塊維護成鏈式結構,區塊中內容的加密與哈希計算,區塊內容的數字簽名及增加時間戳印記,將交易數據構建成 Merkle 樹,並計算 Merkle 樹根節點的哈希值等。
區塊構成的鏈有可能分叉,在比特幣系統中,節點始終都將最長的鏈條視為正確的鏈條,並持續在其后增加新的區塊。
網絡層用於構建比特幣底層的 P2P 網絡,支持多節點動態加入和離開,對網絡連接進行有效管理,為比特幣數據傳輸和共識達成提供基礎網絡支持服務。
共識層主要采用了 PoW(Proof Of Work)共識算法。在比特幣系統中,每個節點都不斷地計算一個隨機數(Nonce),直到找到符合要求的隨機數為止。在一定的時間段內,第一個找到符合條件的隨機數將得到打包區塊的權利,這構建了一個工作量證明機制。從 PoW 的角度,是不是發現 PoW 和分布式鎖有異曲同工之妙呢?
RPC 層實現了 RPC 服務,並提供 JSON API 供客戶端訪問區塊鏈底層服務。
應用層主要承載各種比特幣的應用,如比特幣開源代碼中提供了 bitcoin client。該層主要是作為 RPC 客戶端,通過 JSON API 與 bitcoin 底層交互。除此之外,比特幣錢包及衍生應用都架設在應用層上。