@@ -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
118611961 . ` tlv_stream ` : ` channel_reestablish_tlvs `
118711972 . 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
11921205Similar to the ` next_per_commitment_point ` , by sending the ` next_local_nonce `
11931206value 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
12031222The 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
12081235A 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
12241300For our Simple Taproot Channels, ` musig2 ` is used to generate a single
0 commit comments