lnd: integrate Sphinx onion routing when sending/receiving HTLC's
This commit alters the send/receive HTLC pipe line a bit in order to fully integrate onion routing into the daemon. The server now stores the global Sphinx router which all active htlcManagers will used when processing upstream HTLC add messages. Currently the onion routing private key is static, and identical to the node’s current identity public key. In the future this key will be rotated daily the node based on the current block hash. When sending a payment via the SendPayment RPC, the routing manager is now queried for the existence of a route before the payment request is sent to the HTLC switch. If a path is found, then a Sphinx onion packet encoding the route is created, then populated within the HTLC add message. Finally, when processing an upstream HTLC add request, the sphinx packet is decoded, then processed by the target peer. If the peer is indicated as the exit node, then the HTLC is queue’d to be settled within the next state update.
This commit is contained in:
3 files changed
+151
-22
No files matched your search
@@ -9,6 +9,7 @@ import (
|
||||
"sync/atomic"
|
||||
|
||||
"github.com/btcsuite/fastsha256"
|
||||
"github.com/lightningnetwork/lightning-onion"
|
||||
"github.com/lightningnetwork/lnd/chainntnfs"
|
||||
"github.com/lightningnetwork/lnd/channeldb"
|
||||
"github.com/lightningnetwork/lnd/lndc"
|
||||
@@ -58,6 +59,8 @@ type server struct {
|
||||
|
||||
utxoNursery *utxoNursery
|
||||
|
||||
sphinx *sphinx.Router
|
||||
|
||||
newPeers chan *peer
|
||||
donePeers chan *peer
|
||||
queries chan interface{}
|
||||
@@ -95,13 +98,16 @@ func newServer(listenAddrs []string, notifier chainntnfs.ChainNotifier,
|
||||
invoices: newInvoiceRegistry(chanDB),
|
||||
lnwallet: wallet,
|
||||
identityPriv: privKey,
|
||||
lightningID: fastsha256.Sum256(serializedPubKey),
|
||||
listeners: listeners,
|
||||
peers: make(map[int32]*peer),
|
||||
newPeers: make(chan *peer, 100),
|
||||
donePeers: make(chan *peer, 100),
|
||||
queries: make(chan interface{}),
|
||||
quit: make(chan struct{}),
|
||||
// TODO(roasbeef): derive proper onion key based on rotation
|
||||
// schedule
|
||||
sphinx: sphinx.NewRouter(privKey, activeNetParams.Params),
|
||||
lightningID: fastsha256.Sum256(serializedPubKey),
|
||||
listeners: listeners,
|
||||
peers: make(map[int32]*peer),
|
||||
newPeers: make(chan *peer, 100),
|
||||
donePeers: make(chan *peer, 100),
|
||||
queries: make(chan interface{}),
|
||||
quit: make(chan struct{}),
|
||||
}
|
||||
|
||||
// If the debug HTLC flag is on, then we invoice a "master debug"
|
||||
|
||||
Reference in new issue
Block a user