c-lightning的代碼結構


https://github.com/lightningnetwork/lightning-rfc/blob/master/00-introduction.md
BOLT#1:基本協議
BOLT#2:通道管理的對等協議
BOLT#3:比特幣交易和腳本格式
BOLT#4:洋蔥路由協議
BOLT#5:對鏈式交易處理的建議
BOLT#7:P2P節點和頻道發現
BOLT#8:加密和認證傳輸
BOLT#9:分配的功能標誌
BOLT#10:DNS引導程序和輔助節點位置
BOLT#11:閃電付款的發票協議

c-lightning
主要模塊:lightningd   hsmd common connectd gossipd channeld  cli closingd  openingd  wallet wire 
大多數以獨立進程存在:
    (https://www.8btc.com/article/226278)
    將c-lightning的功能分散到幾個守護進程中不僅及大地提高了靈活性,也提高了節點的安全性,因爲攻擊者無法直接與任何接觸私鑰
    的部分進行直接的操作。每個子系統獨立地驗證內部狀態的一致性,如果發現不一致,則會切斷該同伴節點的連接並終止進程。這個
    多守護進程的架構同樣使得用戶能夠使用Docker、SELinux以及AppArmor來指定每個守護進程能夠接觸到哪些信息以及能夠進行哪些功能。
lightningd:
    主要進程,會調啓動其它進程
hsmd: <保存祕鑰>
                管理所有與加密材料相關的運營,並控制通道中的資金。這是唯一一個能夠接觸節點的私鑰的子系統,這意味着其他子系統並不擁有任
    何私密信息,如果要簽名或者解密任何東西的話,就必須要通過hsmd守護進程。通過這種方式來把加密運營中心化可以降低需要被安全
    保護的表面,並開放一系列有趣的應用。默認的hsmd設置通過分離過程已經能夠提供很高的安全性能了,還能通過操作系統級別的安全
    來進一步提供保障,如SELinux以及AppArmor。但是這可以輕易用另一個設置來替代,這個設置能夠與物理的硬件加密模塊。替換hsmd
    設置可以讓運營更加無人化,比如說,在家裏運行一個c-lightning節點,用一個配對的手機應用來管理私鑰、開啓交易或者創建收據。
common: 
    公共代碼庫,可以被多個功能模塊調用
connectd:<接收和製作TCP連接>
                設置連接守護進程:這管理接收和製作TCP連接。它需要與gossip守護進程獲取通過node_announcement消息)公衆節點的地址,
    所以connectd_init把它的一端交給它套接字對,並給我們其他
gossipd:
    管理網絡的本地視圖,負責尋找一筆交易從其源頭到目的地的路徑。默認設置會試圖尋找在費用、超時和穩定性方面都比較平衡的路徑,
    還會從一組備選路徑中隨機選擇一個,修改數量和超時來隱藏該交易的真正目的地。如果用戶有特定的路徑需求或者想要制定一些特定
    的路徑政策,如總是選擇超時最低或者費用最低的路徑的話,默認設置也很容易修改。
onchaind:
    *〜“onchaind”是一個愚蠢的守護進程,試圖讓我們的資金回來:它不處理重組,但它是冪等的,所以我們可以只需在鏈條移動時重新啓動它。
    同樣,我們重播它重啓時從數據庫鏈事件開始“資金交易花費”事件創造它。

 lightningd啓動的進程
     1) lightning_channeld
     2) lightning_closingd
     3) lightning_connectd
     4) lightning_gossipd
     5) lightning_hsmd
     6) lightning_onchaind
     7) lightning_openingd
    8) lightningd

lightningd中main函數啓動流程:
       setup_locale -> setup_sig_handlers -> check_linked_library_versions -> daemon_setup -> new_lightningd ->register_opts-> handle_early_opts -> plugins_init ->handle_opts->test_subdaemons->wallet_new->io_poll_override->
       ->hsm_init ->setup_color_and_alias
       ->connectd_init
       ->gossip_init->db_begin_transaction->wallet_network_check->init_txfilter->wallet_invoice_autoclean->load_channels_from_wallet->wallet_blocks_heights->db_commit_transaction
       ->setup_topology【初始化塊拓撲,設置】->jsonrpc_listen->plugins_config 
      ->connectd_activate //在chaintopology之後
      ->onchaind_replay_channels
      ->activate_peers
      ->shutdown_subdaemons->tal_free->clean_tmpctx->tal_free->opt_free_table->daemon_shutdown
      
      ->begin_topology
  
閃電網絡中各個進程間通信用的是本地套接字即AF_UNIX.

rpc 只能監聽本地機器的連接 jsonrpc_listen  socket(AF_UNIX, SOCK_STREAM, 0);    

閃電網絡使用的祕鑰: 
    使用BIP32(又名“HD錢包”)從單個種子生成密鑰
                用到了libwally庫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章