lnd.xprv/htlcswitch/interfaces.go

95 lines
2.9 KiB
Go
Raw Normal View History

package htlcswitch
import (
"crypto/sha256"
"github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/lnwallet"
"github.com/lightningnetwork/lnd/lnwire"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcutil"
)
// 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
}
// 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
// WipeChannel removes the passed channel from all indexes associated
// with the peer.
WipeChannel(*lnwallet.LightningChannel) error
// PubKey returns the peer public key.
PubKey() []byte
// Disconnect disconnects with peer if we have error which we can't
// properly handle.
Disconnect()
}