2020-11-16 23:51:49 +01:00
|
|
|
package funding
|
2020-10-01 16:27:13 +02:00
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/lightningnetwork/lnd/lnpeer"
|
|
|
|
"github.com/lightningnetwork/lnd/lnwire"
|
|
|
|
)
|
|
|
|
|
2020-11-17 02:26:08 +01:00
|
|
|
// Controller is an interface with basic funding flow functions.
|
|
|
|
// It describes the basic functionality of a funding manager.
|
|
|
|
// It should at a minimum process a subset of lnwire messages that
|
2020-10-01 16:27:13 +02:00
|
|
|
// are denoted as funding messages.
|
2020-11-17 02:26:08 +01:00
|
|
|
type Controller interface {
|
2020-10-01 16:27:13 +02:00
|
|
|
// ProcessFundingMsg processes a funding message represented by the
|
|
|
|
// lnwire.Message parameter along with the Peer object representing a
|
|
|
|
// connection to the counterparty.
|
|
|
|
ProcessFundingMsg(lnwire.Message, lnpeer.Peer)
|
|
|
|
|
2020-11-17 02:26:08 +01:00
|
|
|
// IsPendingChannel returns whether a particular 32-byte identifier
|
|
|
|
// represents a pending channel in the Controller implementation.
|
2020-10-01 16:27:13 +02:00
|
|
|
IsPendingChannel([32]byte, lnpeer.Peer) bool
|
|
|
|
}
|
server+funding: allow scid-alias, zero-conf chantypes, scid-alias
feature-bit channels
This allows opening zero-conf chan-type, scid-alias chan-type, and
scid-alias feature-bit channels. scid-alias chan-type channels are
required to be private. Two paths are available for opening a zero-conf
channel:
* explicit chan-type negotiation
* LDK carve-out where chan-types are not used, LND is on the
receiving end, and a ChannelAcceptor is used to enable zero-conf
When a zero-conf channel is negotiated, the funding manager:
* sends a FundingLocked with an alias
* waits for a FundingLocked from the remote peer
* calls addToRouterGraph to persist the channel using our alias in
the graph. The peer's alias is used to send them a ChannelUpdate.
* wait for six confirmations. If public, the alias edge in the
graph is deleted and replaced (not atomically) with the confirmed
edge. Our policy is also read-and-replaced, but the counterparty's
policy won't exist until they send it to us.
When a scid-alias-feature channel is negotiated, the funding manager:
* sends a FundingLocked with an alias:
* calls addToRouterGraph, sends ChannelUpdate with the confirmed SCID
since it exists.
* when six confirmations occurs, the edge is deleted and re-inserted
since the peer may have sent us an alias ChannelUpdate that we are
storing in the graph.
Since it is possible for a user to toggle the scid-alias-feature-bit
to on while channels exist in the funding manager, care has been taken
to ensure that an alias is ALWAYS sent in the funding_locked message
if this happens.
2022-04-04 22:47:05 +02:00
|
|
|
|
|
|
|
// aliasHandler is an interface that abstracts the managing of aliases.
|
|
|
|
type aliasHandler interface {
|
|
|
|
// RequestAlias lets the funding manager request a unique SCID alias to
|
2023-03-15 22:36:58 +01:00
|
|
|
// use in the channel_ready message.
|
server+funding: allow scid-alias, zero-conf chantypes, scid-alias
feature-bit channels
This allows opening zero-conf chan-type, scid-alias chan-type, and
scid-alias feature-bit channels. scid-alias chan-type channels are
required to be private. Two paths are available for opening a zero-conf
channel:
* explicit chan-type negotiation
* LDK carve-out where chan-types are not used, LND is on the
receiving end, and a ChannelAcceptor is used to enable zero-conf
When a zero-conf channel is negotiated, the funding manager:
* sends a FundingLocked with an alias
* waits for a FundingLocked from the remote peer
* calls addToRouterGraph to persist the channel using our alias in
the graph. The peer's alias is used to send them a ChannelUpdate.
* wait for six confirmations. If public, the alias edge in the
graph is deleted and replaced (not atomically) with the confirmed
edge. Our policy is also read-and-replaced, but the counterparty's
policy won't exist until they send it to us.
When a scid-alias-feature channel is negotiated, the funding manager:
* sends a FundingLocked with an alias:
* calls addToRouterGraph, sends ChannelUpdate with the confirmed SCID
since it exists.
* when six confirmations occurs, the edge is deleted and re-inserted
since the peer may have sent us an alias ChannelUpdate that we are
storing in the graph.
Since it is possible for a user to toggle the scid-alias-feature-bit
to on while channels exist in the funding manager, care has been taken
to ensure that an alias is ALWAYS sent in the funding_locked message
if this happens.
2022-04-04 22:47:05 +02:00
|
|
|
RequestAlias() (lnwire.ShortChannelID, error)
|
|
|
|
|
|
|
|
// PutPeerAlias lets the funding manager store the received alias SCID
|
2023-03-15 22:36:58 +01:00
|
|
|
// in the channel_ready message.
|
server+funding: allow scid-alias, zero-conf chantypes, scid-alias
feature-bit channels
This allows opening zero-conf chan-type, scid-alias chan-type, and
scid-alias feature-bit channels. scid-alias chan-type channels are
required to be private. Two paths are available for opening a zero-conf
channel:
* explicit chan-type negotiation
* LDK carve-out where chan-types are not used, LND is on the
receiving end, and a ChannelAcceptor is used to enable zero-conf
When a zero-conf channel is negotiated, the funding manager:
* sends a FundingLocked with an alias
* waits for a FundingLocked from the remote peer
* calls addToRouterGraph to persist the channel using our alias in
the graph. The peer's alias is used to send them a ChannelUpdate.
* wait for six confirmations. If public, the alias edge in the
graph is deleted and replaced (not atomically) with the confirmed
edge. Our policy is also read-and-replaced, but the counterparty's
policy won't exist until they send it to us.
When a scid-alias-feature channel is negotiated, the funding manager:
* sends a FundingLocked with an alias:
* calls addToRouterGraph, sends ChannelUpdate with the confirmed SCID
since it exists.
* when six confirmations occurs, the edge is deleted and re-inserted
since the peer may have sent us an alias ChannelUpdate that we are
storing in the graph.
Since it is possible for a user to toggle the scid-alias-feature-bit
to on while channels exist in the funding manager, care has been taken
to ensure that an alias is ALWAYS sent in the funding_locked message
if this happens.
2022-04-04 22:47:05 +02:00
|
|
|
PutPeerAlias(lnwire.ChannelID, lnwire.ShortChannelID) error
|
|
|
|
|
|
|
|
// GetPeerAlias lets the funding manager lookup the received alias SCID
|
2023-03-15 22:36:58 +01:00
|
|
|
// from the channel_ready message. This is not the same as GetAliases
|
server+funding: allow scid-alias, zero-conf chantypes, scid-alias
feature-bit channels
This allows opening zero-conf chan-type, scid-alias chan-type, and
scid-alias feature-bit channels. scid-alias chan-type channels are
required to be private. Two paths are available for opening a zero-conf
channel:
* explicit chan-type negotiation
* LDK carve-out where chan-types are not used, LND is on the
receiving end, and a ChannelAcceptor is used to enable zero-conf
When a zero-conf channel is negotiated, the funding manager:
* sends a FundingLocked with an alias
* waits for a FundingLocked from the remote peer
* calls addToRouterGraph to persist the channel using our alias in
the graph. The peer's alias is used to send them a ChannelUpdate.
* wait for six confirmations. If public, the alias edge in the
graph is deleted and replaced (not atomically) with the confirmed
edge. Our policy is also read-and-replaced, but the counterparty's
policy won't exist until they send it to us.
When a scid-alias-feature channel is negotiated, the funding manager:
* sends a FundingLocked with an alias:
* calls addToRouterGraph, sends ChannelUpdate with the confirmed SCID
since it exists.
* when six confirmations occurs, the edge is deleted and re-inserted
since the peer may have sent us an alias ChannelUpdate that we are
storing in the graph.
Since it is possible for a user to toggle the scid-alias-feature-bit
to on while channels exist in the funding manager, care has been taken
to ensure that an alias is ALWAYS sent in the funding_locked message
if this happens.
2022-04-04 22:47:05 +02:00
|
|
|
// which retrieves OUR aliases for a given channel.
|
|
|
|
GetPeerAlias(lnwire.ChannelID) (lnwire.ShortChannelID, error)
|
|
|
|
|
|
|
|
// AddLocalAlias persists an alias to an underlying alias store.
|
|
|
|
AddLocalAlias(lnwire.ShortChannelID, lnwire.ShortChannelID, bool) error
|
|
|
|
|
|
|
|
// GetAliases returns the set of aliases given the main SCID of a
|
|
|
|
// channel. This SCID will be an alias for zero-conf channels and will
|
|
|
|
// be the confirmed SCID otherwise.
|
|
|
|
GetAliases(lnwire.ShortChannelID) []lnwire.ShortChannelID
|
|
|
|
|
|
|
|
// DeleteSixConfs removes the passed SCID from one of the underlying
|
|
|
|
// alias store's indices.
|
|
|
|
DeleteSixConfs(lnwire.ShortChannelID) error
|
|
|
|
}
|