@@ -560,6 +560,16 @@ Note that these TLV types exist across different messages, but their type IDs ar
560
560
- data:
561
561
* [ ` 66*byte ` : ` public_nonce ` ]
562
562
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
+
563
573
### Channel Funding
564
574
565
575
` n_a_L ` : Alice's local secret nonce
@@ -1185,9 +1195,12 @@ We add a new TLV field to the `channel_reestablish` message:
1185
1195
1186
1196
1 . ` tlv_stream ` : ` channel_reestablish_tlvs `
1187
1197
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 ` ]
1191
1204
1192
1205
Similar to the ` next_per_commitment_point ` , by sending the ` next_local_nonce `
1193
1206
value in this message, we ensure that the remote party has our public nonce,
@@ -1199,11 +1212,25 @@ The sender:
1199
1212
1200
1213
- MUST set ` next_local_nonce ` to a fresh, unique ` musig2 ` nonce as specified by
1201
1214
` 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
1202
1221
1203
1222
The recipient:
1204
1223
1205
1224
- MUST fail the channel if ` next_local_nonce ` is absent, or cannot be parsed as
1206
1225
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
1207
1234
1208
1235
A node:
1209
1236
@@ -1219,6 +1246,55 @@ A node:
1219
1246
- THEN it must regenerate the partial signature using the newly received
1220
1247
` next_local_nonce `
1221
1248
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
+
1222
1298
### Funding Transactions
1223
1299
1224
1300
For our Simple Taproot Channels, ` musig2 ` is used to generate a single
0 commit comments