2
0
mirror of https://github.com/lightninglabs/loop synced 2024-11-16 00:12:52 +00:00
loop/docs/architecture.md
2019-03-13 16:11:04 -07:00

4.3 KiB

Loop Architecture

Lightning Loop's architecture for orchestrating submarine swaps is based on a client/server concept.

The client has a swap execution daemon loopd controlled by a CLI application loop which uses a gRPC API. The client daemon initiates swaps and handles their progress through swap phases. To manage keys and the connection to the LN/BTC network layers the client daemon connects to a local lnd wallet.

Client daemons communicate with the Loop server daemon, which is opaque but operates in a similar way. The server is not a trusted component in this architecture; the client daemon validates that the terms of the swap are acceptable and the server cannot access the swap funds unless the swap enters the "complete" phase.

Loop Out Swap (off -> on-chain)

Phases:

  1. Initiation: Client queries for terms of a swap
  2. Fee: Client sends a small fee HTLC that is unrestricted
  3. Funding: Client sends a funding HTLC locked to a preimage they generate
  4. Payment: Server sends the funds on-chain locked to the funding preimage hash
  5. Complete: Client uses the preimage to take the on-chain funds.
  6. Final: The server uses the on-chain-revealed preimage to claim funding HTLC
       loop out 500   
                  |
                  |
                  v
   .-----------------------------.
   | Loop CLI                    |
   | ./cmd/loop                  |
   |                             |
   |                             |
   |       .-------------------. |            .--------------.                   .---------------.
   |       | Loop Client (lib) | |            | LND node     |                   | Bitcoin node  |
   |       | ./                |<-------------|              |-------------------|               |
   |       |                   | |            |              |   on-chain        |               |
   |       |                   |------------->|              |   htlc            |               |
   |       |                   | | off-chain  |              |                   |               |
   |       '-------------------' | htlc       '--------------'                   '---------------'
   '-----------------|-----------'                    |                                  ^
                     |                                |                                  |
                     |                                v                                  |
                     |                              .--.                               .--.               
                     |                          _ -(    )- _                       _ -(    )- _           
                     |                     .--,(            ),--.             .--,(            ),--.      
             initiate|                 _.-(                       )-._    _.-(                       )-._ 
             swap    |                (       LIGHTNING NETWORK       )  (        BITCOIN NETWORK        )
                     |                 '-._(                     )_.-'    '-._(                     )_.-' 
                     |                      '__,(            ),__'             '__,(            ),__'     
                     |                           - ._(__)_. -                       - ._(__)_. -          
                     |                                |                                  ^
                     |                                |                                  |
                     v                                v                                  |
           .--------------------.  off-chain   .--------------.                  .---------------.
           | Loop Server        |  htlc        | LND node     |                  | Bitcoin node  |
           |                    |<-------------|              |                  |               |
           |                    |              |              |   on-chain       |               |
           |                    |              |              |   htlc           |               |
           |                    |--------------|              |----------------->|               |
           |                    |              |              |                  |               |
           '--------------------'              '--------------'                  '---------------'