peer: define Config and LinkUpdater interface
This commit defines a Config for initializing a peer and the LinkUpdater interface.
This commit is contained in:
parent
50186ba834
commit
01415f4a5f
228
peer/config.go
Normal file
228
peer/config.go
Normal file
@ -0,0 +1,228 @@
|
||||
package peer
|
||||
|
||||
import (
|
||||
"net"
|
||||
"time"
|
||||
|
||||
"github.com/btcsuite/btcd/btcec"
|
||||
"github.com/btcsuite/btcd/connmgr"
|
||||
|
||||
"github.com/lightningnetwork/lnd/chainntnfs"
|
||||
"github.com/lightningnetwork/lnd/channeldb"
|
||||
"github.com/lightningnetwork/lnd/channelnotifier"
|
||||
"github.com/lightningnetwork/lnd/contractcourt"
|
||||
"github.com/lightningnetwork/lnd/discovery"
|
||||
"github.com/lightningnetwork/lnd/htlcswitch"
|
||||
"github.com/lightningnetwork/lnd/htlcswitch/hodl"
|
||||
"github.com/lightningnetwork/lnd/htlcswitch/hop"
|
||||
"github.com/lightningnetwork/lnd/input"
|
||||
"github.com/lightningnetwork/lnd/invoices"
|
||||
"github.com/lightningnetwork/lnd/lnpeer"
|
||||
"github.com/lightningnetwork/lnd/lnwallet"
|
||||
"github.com/lightningnetwork/lnd/lnwallet/chainfee"
|
||||
"github.com/lightningnetwork/lnd/lnwire"
|
||||
"github.com/lightningnetwork/lnd/netann"
|
||||
"github.com/lightningnetwork/lnd/pool"
|
||||
"github.com/lightningnetwork/lnd/queue"
|
||||
"github.com/lightningnetwork/lnd/watchtower/wtclient"
|
||||
)
|
||||
|
||||
// Config defines configuration fields that are necessary for a peer object
|
||||
// to function.
|
||||
type Config struct {
|
||||
// Conn is the underlying network connection for this peer.
|
||||
Conn net.Conn
|
||||
|
||||
// ConnReq stores information related to the persistent connection request
|
||||
// for this peer.
|
||||
ConnReq *connmgr.ConnReq
|
||||
|
||||
// PubKeyBytes is the serialized, compressed public key of this peer.
|
||||
PubKeyBytes [33]byte
|
||||
|
||||
// Addr is the network address of the peer.
|
||||
Addr *lnwire.NetAddress
|
||||
|
||||
// Inbound indicates whether or not the peer is an inbound peer.
|
||||
Inbound bool
|
||||
|
||||
// Features is the set of features that we advertise to the remote party.
|
||||
Features *lnwire.FeatureVector
|
||||
|
||||
// LegacyFeatures is the set of features that we advertise to the remote
|
||||
// peer for backwards compatibility. Nodes that have not implemented
|
||||
// flat features will still be able to read our feature bits from the
|
||||
// legacy global field, but we will also advertise everything in the
|
||||
// default features field.
|
||||
LegacyFeatures *lnwire.FeatureVector
|
||||
|
||||
// OutgoingCltvRejectDelta defines the number of blocks before expiry of
|
||||
// an htlc where we don't offer it anymore.
|
||||
OutgoingCltvRejectDelta uint32
|
||||
|
||||
// ChanActiveTimeout specifies the duration the peer will wait to request
|
||||
// a channel reenable, beginning from the time the peer was started.
|
||||
ChanActiveTimeout time.Duration
|
||||
|
||||
// ErrorBuffer stores a set of errors related to a peer. It contains error
|
||||
// messages that our peer has recently sent us over the wire and records of
|
||||
// unknown messages that were sent to us so that we can have a full track
|
||||
// record of the communication errors we have had with our peer. If we
|
||||
// choose to disconnect from a peer, it also stores the reason we had for
|
||||
// disconnecting.
|
||||
ErrorBuffer *queue.CircularBuffer
|
||||
|
||||
// WritePool is the task pool that manages reuse of write buffers. Write
|
||||
// tasks are submitted to the pool in order to conserve the total number of
|
||||
// write buffers allocated at any one time, and decouple write buffer
|
||||
// allocation from the peer life cycle.
|
||||
WritePool *pool.Write
|
||||
|
||||
// ReadPool is the task pool that manages reuse of read buffers.
|
||||
ReadPool *pool.Read
|
||||
|
||||
// Switch is a pointer to the htlcswitch. It is used to setup, get, and
|
||||
// tear-down ChannelLinks.
|
||||
Switch *htlcswitch.Switch
|
||||
|
||||
// InterceptSwitch is a pointer to the InterceptableSwitch, a wrapper around
|
||||
// the regular Switch. We only export it here to pass ForwardPackets to the
|
||||
// ChannelLinkConfig.
|
||||
InterceptSwitch *htlcswitch.InterceptableSwitch
|
||||
|
||||
// ChannelDB is used to fetch opened channels, closed channels, and the
|
||||
// channel graph.
|
||||
ChannelDB *channeldb.DB
|
||||
|
||||
// ChainArb is used to subscribe to channel events, update contract signals,
|
||||
// and force close channels.
|
||||
ChainArb *contractcourt.ChainArbitrator
|
||||
|
||||
// AuthGossiper is needed so that the Brontide impl can register with the
|
||||
// gossiper and process remote channel announcements.
|
||||
AuthGossiper *discovery.AuthenticatedGossiper
|
||||
|
||||
// ChanStatusMgr is used to set or un-set the disabled bit in channel
|
||||
// updates.
|
||||
ChanStatusMgr *netann.ChanStatusManager
|
||||
|
||||
// ChainIO is used to retrieve the best block.
|
||||
ChainIO lnwallet.BlockChainIO
|
||||
|
||||
// FeeEstimator is used to compute our target ideal fee-per-kw when
|
||||
// initializing the coop close process.
|
||||
FeeEstimator chainfee.Estimator
|
||||
|
||||
// Signer is used when creating *lnwallet.LightningChannel instances.
|
||||
Signer input.Signer
|
||||
|
||||
// SigPool is used when creating *lnwallet.LightningChannel instances.
|
||||
SigPool *lnwallet.SigPool
|
||||
|
||||
// Wallet is used to publish transactions and generate delivery scripts
|
||||
// during the coop close process.
|
||||
Wallet *lnwallet.LightningWallet
|
||||
|
||||
// ChainNotifier is used to receive confirmations of a coop close
|
||||
// transaction.
|
||||
ChainNotifier chainntnfs.ChainNotifier
|
||||
|
||||
// RoutingPolicy is used to set the forwarding policy for links created by
|
||||
// the Brontide.
|
||||
RoutingPolicy htlcswitch.ForwardingPolicy
|
||||
|
||||
// Sphinx is used when setting up ChannelLinks so they can decode sphinx
|
||||
// onion blobs.
|
||||
Sphinx *hop.OnionProcessor
|
||||
|
||||
// WitnessBeacon is used when setting up ChannelLinks so they can add any
|
||||
// preimages that they learn.
|
||||
WitnessBeacon contractcourt.WitnessBeacon
|
||||
|
||||
// Invoices is passed to the ChannelLink on creation and handles all
|
||||
// invoice-related logic.
|
||||
Invoices *invoices.InvoiceRegistry
|
||||
|
||||
// ChannelNotifier is used by the link to notify other sub-systems about
|
||||
// channel-related events and by the Brontide to subscribe to
|
||||
// ActiveLinkEvents.
|
||||
ChannelNotifier *channelnotifier.ChannelNotifier
|
||||
|
||||
// HtlcNotifier is used when creating a ChannelLink.
|
||||
HtlcNotifier *htlcswitch.HtlcNotifier
|
||||
|
||||
// TowerClient is used when creating a ChannelLink.
|
||||
TowerClient wtclient.Client
|
||||
|
||||
// DisconnectPeer is used to disconnect this peer if the cooperative close
|
||||
// process fails.
|
||||
DisconnectPeer func(*btcec.PublicKey) error
|
||||
|
||||
// GenNodeAnnouncement is used to send our node announcement to the remote
|
||||
// on startup.
|
||||
GenNodeAnnouncement func(bool,
|
||||
...netann.NodeAnnModifier) (lnwire.NodeAnnouncement, error)
|
||||
|
||||
// PrunePersistentPeerConnection is used to remove all internal state
|
||||
// related to this peer in the server.
|
||||
PrunePersistentPeerConnection func([33]byte)
|
||||
|
||||
// FetchLastChanUpdate fetches our latest channel update for a target
|
||||
// channel.
|
||||
FetchLastChanUpdate func(lnwire.ShortChannelID) (*lnwire.ChannelUpdate,
|
||||
error)
|
||||
|
||||
// ProcessFundingOpen is used to hand off an OpenChannel message to the
|
||||
// funding manager.
|
||||
ProcessFundingOpen func(*lnwire.OpenChannel, lnpeer.Peer)
|
||||
|
||||
// ProcessFundingAccept is used to hand off an AcceptChannel message to the
|
||||
// funding manager.
|
||||
ProcessFundingAccept func(*lnwire.AcceptChannel, lnpeer.Peer)
|
||||
|
||||
// ProcessFundingCreated is used to hand off a FundingCreated message to
|
||||
// the funding manager.
|
||||
ProcessFundingCreated func(*lnwire.FundingCreated, lnpeer.Peer)
|
||||
|
||||
// ProcessFundingSigned is used to hand off a FundingSigned message to the
|
||||
// funding manager.
|
||||
ProcessFundingSigned func(*lnwire.FundingSigned, lnpeer.Peer)
|
||||
|
||||
// ProcessFundingLocked is used to hand off a FundingLocked message to the
|
||||
// funding manager.
|
||||
ProcessFundingLocked func(*lnwire.FundingLocked, lnpeer.Peer)
|
||||
|
||||
// ProcessFundingError is used to hand off an Error message to the funding
|
||||
// manager.
|
||||
ProcessFundingError func(*lnwire.Error, *btcec.PublicKey)
|
||||
|
||||
// IsPendingChannel is used to determine whether to send an Error message
|
||||
// to the funding manager or not.
|
||||
IsPendingChannel func([32]byte, *btcec.PublicKey) bool
|
||||
|
||||
// Hodl is used when creating ChannelLinks to specify HodlFlags as
|
||||
// breakpoints in dev builds.
|
||||
Hodl *hodl.Config
|
||||
|
||||
// UnsafeReplay is used when creating ChannelLinks to specify whether or
|
||||
// not to replay adds on its commitment tx.
|
||||
UnsafeReplay bool
|
||||
|
||||
// MaxOutgoingCltvExpiry is used when creating ChannelLinks and is the max
|
||||
// number of blocks that funds could be locked up for when forwarding
|
||||
// payments.
|
||||
MaxOutgoingCltvExpiry uint32
|
||||
|
||||
// MaxChannelFeeAllocation is used when creating ChannelLinks and is the
|
||||
// maximum percentage of total funds that can be allocated to a channel's
|
||||
// commitment fee. This only applies for the initiator of the channel.
|
||||
MaxChannelFeeAllocation float64
|
||||
|
||||
// ServerPubKey is the serialized, compressed public key of our lnd node.
|
||||
// It is used to determine which policy (channel edge) to pass to the
|
||||
// ChannelLink.
|
||||
ServerPubKey [33]byte
|
||||
|
||||
// Quit is the server's quit channel. If this is closed, we halt operation.
|
||||
Quit chan struct{}
|
||||
}
|
11
peer/interfaces.go
Normal file
11
peer/interfaces.go
Normal file
@ -0,0 +1,11 @@
|
||||
package peer
|
||||
|
||||
import "github.com/lightningnetwork/lnd/lnwire"
|
||||
|
||||
// LinkUpdater is an interface implemented by most messages in BOLT 2 that are
|
||||
// allowed to update the channel state.
|
||||
type LinkUpdater interface {
|
||||
// TargetChanID returns the channel id of the link for which this message
|
||||
// is intended.
|
||||
TargetChanID() lnwire.ChannelID
|
||||
}
|
Loading…
Reference in New Issue
Block a user