Skip to content

Commit

Permalink
rpc+funding: add taproot overlay as RPC chan type
Browse files Browse the repository at this point in the history
  • Loading branch information
Roasbeef authored and guggero committed Sep 19, 2024
1 parent 6e4781a commit 8045595
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 2 deletions.
5 changes: 3 additions & 2 deletions funding/manager_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4653,8 +4653,8 @@ func testZeroConf(t *testing.T, chanType *lnwire.ChannelType) {
// opening behavior with a specified fundmax flag. To give a hypothetical
// example, if ANCHOR types had been introduced after the fundmax flag had been
// activated, the developer would have had to code for the anchor reserve in the
// funding manager in the context of public and private channels. Otherwise
// inconsistent bahvior would have resulted when specifying fundmax for
// funding manager in the context of public and private channels. Otherwise,
// inconsistent behavior would have resulted when specifying fundmax for
// different types of channel openings.
// To ensure consistency this test compares a map of locally defined channel
// commitment types to the list of channel types that are defined in the proto
Expand All @@ -4670,6 +4670,7 @@ func TestCommitmentTypeFundmaxSanityCheck(t *testing.T) {
"ANCHORS": 3,
"SCRIPT_ENFORCED_LEASE": 4,
"SIMPLE_TAPROOT": 5,
"SIMPLE_TAPROOT_OVERLAY": 6,
}

for commitmentType := range lnrpc.CommitmentType_value {
Expand Down
26 changes: 26 additions & 0 deletions rpcserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -2309,6 +2309,29 @@ func (r *rpcServer) parseOpenChannelReq(in *lnrpc.OpenChannelRequest,

*channelType = lnwire.ChannelType(*fv)

case lnrpc.CommitmentType_SIMPLE_TAPROOT_OVERLAY:
// If the taproot overlay channel type is being set, then the
// channel MUST be private.
if !in.Private {
return nil, fmt.Errorf("taproot overlay channels " +
"must be private")
}

channelType = new(lnwire.ChannelType)
fv := lnwire.NewRawFeatureVector(
lnwire.SimpleTaprootOverlayChansRequired,
)

if in.ZeroConf {
fv.Set(lnwire.ZeroConfRequired)
}

if in.ScidAlias {
fv.Set(lnwire.ScidAliasRequired)
}

*channelType = lnwire.ChannelType(*fv)

default:
return nil, fmt.Errorf("unhandled request channel type %v",
in.CommitmentType)
Expand Down Expand Up @@ -4536,6 +4559,9 @@ func rpcCommitmentType(chanType channeldb.ChannelType) lnrpc.CommitmentType {
case chanType.IsTaproot():
return lnrpc.CommitmentType_SIMPLE_TAPROOT

case chanType.HasTapscriptRoot():
return lnrpc.CommitmentType_SIMPLE_TAPROOT_OVERLAY

case chanType.HasLeaseExpiration():
return lnrpc.CommitmentType_SCRIPT_ENFORCED_LEASE

Expand Down

0 comments on commit 8045595

Please sign in to comment.