2017-05-01 19:58:08 +03:00
|
|
|
package htlcswitch
|
|
|
|
|
|
|
|
import (
|
|
|
|
"crypto/sha256"
|
|
|
|
|
2017-05-03 17:02:22 +03:00
|
|
|
"github.com/lightningnetwork/lnd/channeldb"
|
|
|
|
"github.com/lightningnetwork/lnd/lnwallet"
|
2017-05-01 19:58:08 +03:00
|
|
|
"github.com/lightningnetwork/lnd/lnwire"
|
2017-05-03 17:02:22 +03:00
|
|
|
"github.com/roasbeef/btcd/chaincfg/chainhash"
|
2017-05-01 19:58:08 +03:00
|
|
|
"github.com/roasbeef/btcutil"
|
|
|
|
)
|
|
|
|
|
2017-05-03 17:02:22 +03:00
|
|
|
// InvoiceDatabase is an interface which represents the persistent subsystem
|
|
|
|
// which may search, lookup and settle invoices.
|
|
|
|
type InvoiceDatabase interface {
|
|
|
|
// LookupInvoice attempts to look up an invoice according to it's 32
|
|
|
|
// byte payment hash.
|
|
|
|
LookupInvoice(chainhash.Hash) (*channeldb.Invoice, error)
|
|
|
|
|
|
|
|
// SettleInvoice attempts to mark an invoice corresponding to the passed
|
|
|
|
// payment hash as fully settled.
|
|
|
|
SettleInvoice(chainhash.Hash) error
|
|
|
|
}
|
|
|
|
|
2017-05-01 19:58:08 +03:00
|
|
|
// ChannelLink is an interface which represents the subsystem for managing
|
|
|
|
// the incoming htlc requests, applying the changes to the channel, and also
|
|
|
|
// propagating/forwarding it to htlc switch.
|
|
|
|
//
|
|
|
|
// abstraction level
|
|
|
|
// ^
|
|
|
|
// |
|
|
|
|
// | - - - - - - - - - - - - Lightning - - - - - - - - - - - - -
|
|
|
|
// |
|
|
|
|
// | (Switch) (Switch) (Switch)
|
|
|
|
// | Alice <-- channel link --> Bob <-- channel link --> Carol
|
|
|
|
// |
|
|
|
|
// | - - - - - - - - - - - - - TCP - - - - - - - - - - - - - - -
|
|
|
|
// |
|
|
|
|
// | (Peer) (Peer) (Peer)
|
|
|
|
// | Alice <----- tcp conn --> Bob <---- tcp conn -----> Carol
|
|
|
|
// |
|
|
|
|
//
|
|
|
|
type ChannelLink interface {
|
|
|
|
// HandleSwitchPacket handles the switch packets. This packets might be
|
|
|
|
// forwarded to us from another channel link in case the htlc update
|
|
|
|
// came from another peer or if the update was created by user
|
|
|
|
// initially.
|
|
|
|
HandleSwitchPacket(*htlcPacket)
|
|
|
|
|
|
|
|
// HandleChannelUpdate handles the htlc requests as settle/add/fail
|
|
|
|
// which sent to us from remote peer we have a channel with.
|
|
|
|
HandleChannelUpdate(lnwire.Message)
|
|
|
|
|
|
|
|
// ChanID returns the unique identifier of the channel link.
|
|
|
|
ChanID() lnwire.ChannelID
|
|
|
|
|
|
|
|
// Bandwidth returns the amount of satoshis which current link might
|
|
|
|
// pass through channel link.
|
|
|
|
Bandwidth() btcutil.Amount
|
|
|
|
|
|
|
|
// Stats return the statistics of channel link. Number of updates,
|
|
|
|
// total sent/received satoshis.
|
|
|
|
Stats() (uint64, btcutil.Amount, btcutil.Amount)
|
|
|
|
|
|
|
|
// Peer returns the representation of remote peer with which we
|
|
|
|
// have the channel link opened.
|
|
|
|
Peer() Peer
|
|
|
|
|
|
|
|
// Start/Stop are used to initiate the start/stop of the the channel
|
|
|
|
// link functioning.
|
|
|
|
Start() error
|
|
|
|
Stop()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Peer is an interface which represents the remote lightning node inside our
|
|
|
|
// system.
|
|
|
|
type Peer interface {
|
|
|
|
// SendMessage sends message to remote peer.
|
|
|
|
SendMessage(lnwire.Message) error
|
|
|
|
|
|
|
|
// ID returns the lightning network peer id.
|
|
|
|
ID() [sha256.Size]byte
|
|
|
|
|
2017-05-03 17:02:22 +03:00
|
|
|
// WipeChannel removes the passed channel from all indexes associated
|
|
|
|
// with the peer.
|
|
|
|
WipeChannel(*lnwallet.LightningChannel) error
|
|
|
|
|
2017-05-01 19:58:08 +03:00
|
|
|
// PubKey returns the peer public key.
|
|
|
|
PubKey() []byte
|
|
|
|
|
|
|
|
// Disconnect disconnects with peer if we have error which we can't
|
|
|
|
// properly handle.
|
|
|
|
Disconnect()
|
|
|
|
}
|