Skip to content

Commit 4c1314a

Browse files
committed
bolt-simple-taproot: make nonces in channel_ready compatible with splicing
1 parent 8a23533 commit 4c1314a

File tree

1 file changed

+79
-3
lines changed

1 file changed

+79
-3
lines changed

bolt-simple-taproot.md

Lines changed: 79 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,16 @@ Note that these TLV types exist across different messages, but their type IDs ar
560560
- data:
561561
* [`66*byte`: `public_nonce`]
562562

563+
#### local_nonces
564+
- type: 22
565+
- data:
566+
* [`u16`: `num_entries`]
567+
* [`num_entries * nonce_entry`: `entries`]
568+
569+
where `nonce_entry` is:
570+
* [`32*byte`: `txid`]
571+
* [`66*byte`: `public_nonce`]
572+
563573
### Channel Funding
564574

565575
`n_a_L`: Alice's local secret nonce
@@ -1185,9 +1195,12 @@ We add a new TLV field to the `channel_reestablish` message:
11851195

11861196
1. `tlv_stream`: `channel_reestablish_tlvs`
11871197
2. types:
1188-
1. type: 4 (`next_local_nonce`)
1189-
2. data:
1190-
* [`66*byte`: `public_nonce`]
1198+
1. type: 4 (`next_local_nonce`)
1199+
2. data:
1200+
* [`66*byte`: `public_nonce`]
1201+
3. type: 22 (`local_nonces`)
1202+
4. data:
1203+
* [`local_nonces`: `nonces_map`]
11911204

11921205
Similar to the `next_per_commitment_point`, by sending the `next_local_nonce`
11931206
value in this message, we ensure that the remote party has our public nonce,
@@ -1199,11 +1212,25 @@ The sender:
11991212

12001213
- MUST set `next_local_nonce` to a fresh, unique `musig2` nonce as specified by
12011214
`bip-musig2`
1215+
- For taproot channels, SHOULD also populate the `local_nonces` field:
1216+
- MUST include at least one entry with an empty hash (32 zero bytes) as the key,
1217+
containing the primary commitment nonce
1218+
- The value for the empty hash key MUST match the value in `next_local_nonce`
1219+
- MAY include additional entries for in-progress splice transactions
1220+
- MUST sort entries by TXID in lexicographical order when encoding
12021221

12031222
The recipient:
12041223

12051224
- MUST fail the channel if `next_local_nonce` is absent, or cannot be parsed as
12061225
two compressed secp256k1 points.
1226+
- When `local_nonces` field is present:
1227+
- MUST prioritize `local_nonces` over `next_local_nonce` for obtaining the
1228+
commitment nonce
1229+
- MUST use the nonce associated with the empty hash key (32 zero bytes) as the
1230+
primary commitment nonce
1231+
- MAY store additional nonces for splice coordination
1232+
- For taproot channels, if neither `next_local_nonce` nor `local_nonces` contains
1233+
a valid nonce, MUST fail the channel
12071234

12081235
A node:
12091236

@@ -1219,6 +1246,55 @@ A node:
12191246
- THEN it must regenerate the partial signature using the newly received
12201247
`next_local_nonce`
12211248

1249+
### Splice Coordination
1250+
1251+
Splicing allows parties to modify the funding output of an existing channel without
1252+
closing it. During splice operations, multiple commitment transactions may exist
1253+
concurrently, each requiring its own MuSig2 nonce coordination. The `local_nonces`
1254+
field enables this coordination by mapping transaction IDs to their respective nonces.
1255+
1256+
#### Splice Nonce Management
1257+
1258+
During splice negotiation:
1259+
1260+
- Each splice transaction MUST have a unique TXID as the key in the `local_nonces` map
1261+
- The primary (non-splice) commitment transaction MUST use an empty hash (32 zero
1262+
bytes) as its key
1263+
- Parties MUST include nonces for all active splice transactions in their
1264+
`local_nonces` map
1265+
- Completed or abandoned splices SHOULD have their nonces removed from the map in
1266+
subsequent messages
1267+
1268+
##### Requirements for Splice Coordination
1269+
1270+
When a splice is initiated:
1271+
1272+
- The initiating party MUST generate a fresh nonce for the splice transaction
1273+
- Both parties MUST add the splice TXID and corresponding nonce to their
1274+
`local_nonces` map
1275+
- The nonce MUST be communicated in the next `commitment_signed` or
1276+
`channel_reestablish` message
1277+
1278+
When a splice is completed:
1279+
1280+
- Parties SHOULD remove the splice TXID from their `local_nonces` map
1281+
- The primary commitment nonce SHOULD be updated to reflect the new funding output
1282+
1283+
When multiple splices are pending:
1284+
1285+
- Each splice MUST have a distinct TXID and nonce pair
1286+
- Nonces MUST NOT be reused across different splice transactions
1287+
- The `local_nonces` map MAY contain multiple entries during concurrent splice
1288+
operations
1289+
1290+
##### Backward Compatibility
1291+
1292+
Nodes that do not support splicing:
1293+
1294+
- Will ignore the `local_nonces` field (due to its even TLV type number)
1295+
- Can continue to use the single `next_local_nonce` field
1296+
- Will not be able to participate in splice operations
1297+
12221298
### Funding Transactions
12231299

12241300
For our Simple Taproot Channels, `musig2` is used to generate a single

0 commit comments

Comments
 (0)