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.
This commit is contained in:
19 files changed
+3883
-2697
No files matched your search
@@ -19,3 +19,31 @@ type Controller interface {
|
||||
// represents a pending channel in the Controller implementation.
|
||||
IsPendingChannel([32]byte, lnpeer.Peer) bool
|
||||
}
|
||||
|
||||
// aliasHandler is an interface that abstracts the managing of aliases.
|
||||
type aliasHandler interface {
|
||||
// RequestAlias lets the funding manager request a unique SCID alias to
|
||||
// use in the funding_locked message.
|
||||
RequestAlias() (lnwire.ShortChannelID, error)
|
||||
|
||||
// PutPeerAlias lets the funding manager store the received alias SCID
|
||||
// in the funding_locked message.
|
||||
PutPeerAlias(lnwire.ChannelID, lnwire.ShortChannelID) error
|
||||
|
||||
// GetPeerAlias lets the funding manager lookup the received alias SCID
|
||||
// from the funding_locked message. This is not the same as GetAliases
|
||||
// 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
|
||||
}
|
||||
Reference in new issue
Block a user