C-Lightning-Codestruktur


https://github.com/lightningnetwork/lightning-rfc/blob/master/00-introduction.md
BOLT#1: Basisprotokoll
BOLT#2: Peer-to-Peer-Protokoll für die Kanalverwaltung
BOLT#3: Bitcoin-Transaktion und Skript Format
BOLZEN Nr. 4: Onion Routing-Protokoll
BOLZEN Nr. 5: Empfehlungen für die Verarbeitung verketteter Transaktionen
BOLZEN Nr. 7: P2P-Knoten- und Kanalerkennung
BOLZEN Nr. 8: Verschlüsselte und authentifizierte Transporte
BOLZEN Nr. 9: Zugewiesene Funktionsflags
BOLZEN Nr. 10: DNS-Bootstrap und Sekundärknoten Standort
BOLT #11: Rechnungsprotokoll für Blitzzahlungen

Die Hauptmodule von C-Lightning
: Lightningd Hsmd Common Connectd Gossipd Channeld CLI Closingd Openingd Wallet Wire 
existieren meist als unabhängige Prozesse:
    (https://www.8btc.com/article/226278)
    Verteilen Sie die Funktionen von C-Lightning auf mehrere Daemons Der Prozess verbessert nicht nur die Flexibilität erheblich, sondern auch die Sicherheit des Knotens, da Angreifer nicht direkt
    mit Teilen operieren können, die mit dem privaten Schlüssel in Kontakt kommen. Jedes Subsystem überprüft unabhängig die Konsistenz seines internen Zustands. Wenn eine Inkonsistenz festgestellt wird, wird die Verbindung zum Peer-Knoten getrennt und der Prozess beendet. Diese
    Multi-Daemon-Architektur ermöglicht Benutzern außerdem die Verwendung von Docker, SELinux und AppArmor, um anzugeben, auf welche Informationen jeder Daemon zugreifen und welche Funktionen er ausführen kann.
Lightningd:
    Der Hauptprozess, der andere Prozesse startet.
Hsmd: <Save Secret Key>
                verwaltet alle Vorgänge im Zusammenhang mit Verschlüsselungsmaterialien und kontrolliert die Gelder im Kanal. Dies ist das einzige Subsystem, das Zugriff auf den privaten Schlüssel des Knotens hat. Dies bedeutet, dass die anderen Subsysteme keine
    privaten und den hsmd-Daemon durchlaufen müssen, wenn sie etwas signieren oder entschlüsseln möchten. Eine solche Zentralisierung von Krypto-Operationen reduziert
    die zu sichernde Fläche und eröffnet eine Reihe interessanter Anwendungen. Die standardmäßigen hsmd-Einstellungen bieten bereits während des Trennvorgangs eine hohe Sicherheitsleistung und können auch die Sicherheit auf Betriebssystemebene bestehen.
    Um weiteren Schutz zu bieten, z. B. SELinux und AppArmor. Dies kann jedoch problemlos durch ein anderes Setup ersetzt werden, das mit dem physischen Hardware-Verschlüsselungsmodul funktioniert. Durch das Ersetzen der hsmd-
    Einstellungen können Vorgänge unkomplizierter gestaltet werden, z. B. durch den Betrieb eines C-Lightning-Knotens zu Hause und die Verwendung einer gekoppelten mobilen App zum Verwalten privater Schlüssel, zum Öffnen von Transaktionen oder zum Erstellen von Belegen.
common: 
    eine gemeinsame Codebasis, die von mehreren verbundenen Funktionsmodulen aufgerufen werden kann
: <TCP-Verbindungen empfangen und herstellen>
                Verbindungsdämon einrichten: Dieser verwaltet den Empfang und die Herstellung von TCP-Verbindungen. Es muss die Adresse des öffentlichen Knotens über die Nachricht „node_announcement“ mit dem Gossip-Daemon erhalten,
    also übergibt ihm connectd_init ein Ende des Socket-Paares und gibt uns das andere
: gossipd:
    verwaltet eine lokale Ansicht des Netzwerks und ist für die Suche nach einer Transaktion verantwortlich seine Quelle Der Weg zum Ziel. Die Standardeinstellung versucht, einen Pfad zu finden, der im Hinblick auf Kosten, Zeitüberschreitung und Stabilität ausgewogen ist. Sie
    wählt außerdem zufällig einen Pfad aus einer Reihe alternativer Pfade aus und ändert dabei die Menge und die Zeitüberschreitung, um das wahre Ziel der Transaktion zu verbergen. Wenn der Benutzer bestimmte Pfadanforderungen hat oder bestimmte
    Pfadrichtlinien formulieren möchte, z. B. immer den Pfad mit der niedrigsten Zeitüberschreitung oder den niedrigsten Kosten wählen möchte, können die Standardeinstellungen auch einfach geändert werden.
onchaind:
    *~ „onchaind“ ist ein dummer Daemon, der versucht, unsere Gelder zurückzubekommen: Er übernimmt keine Reorganisationen, ist aber idempotent, sodass wir ihn einfach neu starten können, wenn sich die Kette bewegt.
    Ebenso wiederholen wir das Ereignis „Geldtransaktion ausgegeben“, das es erstellt hat, wenn es vom Datenbankkettenereignis aus neu gestartet wird.


     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-Funktion:
       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_in it ->
       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
  
Die Kommunikation zwischen Prozessen im Lightning-Netzwerk verwendet lokale Sockets, also AF_UNIX.

rpc kann nur Verbindungen von der lokalen Maschine abhören jsonrpc_listen socket(AF_UNIX, SOCK_STREAM, 0);    

Vom Lightning Network verwendete Schlüssel: 
    Die Generierung von Schlüsseln aus einem einzelnen Seed mithilfe von BIP32 (auch bekannt als „HD Wallet“)
                nutzt die libwally-Bibliothek

Guess you like

Origin blog.csdn.net/yinzhiqing/article/details/90234603