Skip to content

Commit ac9a2c8

Browse files
authored
Merge pull request #2991 from optout21/txsigs-splicing
Add tx_signatures.tlvs field (splicing-specific field in dual funding message)
2 parents 3b1b0a5 + bdbb177 commit ac9a2c8

File tree

6 files changed

+42
-1
lines changed

6 files changed

+42
-1
lines changed

lightning-net-tokio/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -624,8 +624,11 @@ mod tests {
624624
fn handle_open_channel_v2(&self, _their_node_id: &PublicKey, _msg: &OpenChannelV2) {}
625625
fn handle_accept_channel_v2(&self, _their_node_id: &PublicKey, _msg: &AcceptChannelV2) {}
626626
fn handle_stfu(&self, _their_node_id: &PublicKey, _msg: &Stfu) {}
627+
#[cfg(dual_funding)]
627628
fn handle_splice(&self, _their_node_id: &PublicKey, _msg: &Splice) {}
629+
#[cfg(dual_funding)]
628630
fn handle_splice_ack(&self, _their_node_id: &PublicKey, _msg: &SpliceAck) {}
631+
#[cfg(dual_funding)]
629632
fn handle_splice_locked(&self, _their_node_id: &PublicKey, _msg: &SpliceLocked) {}
630633
fn handle_tx_add_input(&self, _their_node_id: &PublicKey, _msg: &TxAddInput) {}
631634
fn handle_tx_add_output(&self, _their_node_id: &PublicKey, _msg: &TxAddOutput) {}

lightning/src/ln/channelmanager.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9756,18 +9756,21 @@ where
97569756
msg.channel_id.clone())), *counterparty_node_id);
97579757
}
97589758

9759+
#[cfg(dual_funding)]
97599760
fn handle_splice(&self, counterparty_node_id: &PublicKey, msg: &msgs::Splice) {
97609761
let _: Result<(), _> = handle_error!(self, Err(MsgHandleErrInternal::send_err_msg_no_close(
97619762
"Splicing not supported".to_owned(),
97629763
msg.channel_id.clone())), *counterparty_node_id);
97639764
}
97649765

9766+
#[cfg(dual_funding)]
97659767
fn handle_splice_ack(&self, counterparty_node_id: &PublicKey, msg: &msgs::SpliceAck) {
97669768
let _: Result<(), _> = handle_error!(self, Err(MsgHandleErrInternal::send_err_msg_no_close(
97679769
"Splicing not supported (splice_ack)".to_owned(),
97689770
msg.channel_id.clone())), *counterparty_node_id);
97699771
}
97709772

9773+
#[cfg(dual_funding)]
97719774
fn handle_splice_locked(&self, counterparty_node_id: &PublicKey, msg: &msgs::SpliceLocked) {
97729775
let _: Result<(), _> = handle_error!(self, Err(MsgHandleErrInternal::send_err_msg_no_close(
97739776
"Splicing not supported (splice_locked)".to_owned(),

lightning/src/ln/msgs.rs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,8 @@ pub struct TxSignatures {
543543
pub tx_hash: Txid,
544544
/// The list of witnesses
545545
pub witnesses: Vec<Witness>,
546+
/// Optional signature for the shared input -- the previous funding outpoint -- signed by both peers
547+
pub funding_outpoint_sig: Option<Signature>,
546548
}
547549

548550
/// A tx_init_rbf message which initiates a replacement of the transaction after it's been
@@ -1460,10 +1462,13 @@ pub trait ChannelMessageHandler : MessageSendEventsProvider {
14601462

14611463
// Splicing
14621464
/// Handle an incoming `splice` message from the given peer.
1465+
#[cfg(dual_funding)]
14631466
fn handle_splice(&self, their_node_id: &PublicKey, msg: &Splice);
14641467
/// Handle an incoming `splice_ack` message from the given peer.
1468+
#[cfg(dual_funding)]
14651469
fn handle_splice_ack(&self, their_node_id: &PublicKey, msg: &SpliceAck);
14661470
/// Handle an incoming `splice_locked` message from the given peer.
1471+
#[cfg(dual_funding)]
14671472
fn handle_splice_locked(&self, their_node_id: &PublicKey, msg: &SpliceLocked);
14681473

14691474
// Interactive channel construction
@@ -2115,7 +2120,9 @@ impl_writeable_msg!(TxSignatures, {
21152120
channel_id,
21162121
tx_hash,
21172122
witnesses,
2118-
}, {});
2123+
}, {
2124+
(0, funding_outpoint_sig, option),
2125+
});
21192126

21202127
impl_writeable_msg!(TxInitRbf, {
21212128
channel_id,
@@ -3952,6 +3959,10 @@ mod tests {
39523959

39533960
#[test]
39543961
fn encoding_tx_signatures() {
3962+
let secp_ctx = Secp256k1::new();
3963+
let (privkey_1, _) = get_keys_from!("0101010101010101010101010101010101010101010101010101010101010101", secp_ctx);
3964+
let sig_1 = get_sig_on!(privkey_1, secp_ctx, String::from("01010101010101010101010101010101"));
3965+
39553966
let tx_signatures = msgs::TxSignatures {
39563967
channel_id: ChannelId::from_bytes([2; 32]),
39573968
tx_hash: Txid::from_str("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap(),
@@ -3963,6 +3974,7 @@ mod tests {
39633974
<Vec<u8>>::from_hex("3045022100ee00dbf4a862463e837d7c08509de814d620e4d9830fa84818713e0fa358f145022021c3c7060c4d53fe84fd165d60208451108a778c13b92ca4c6bad439236126cc01").unwrap(),
39643975
<Vec<u8>>::from_hex("028fbbf0b16f5ba5bcb5dd37cd4047ce6f726a21c06682f9ec2f52b057de1dbdb5").unwrap()]),
39653976
],
3977+
funding_outpoint_sig: Some(sig_1),
39663978
};
39673979
let encoded_value = tx_signatures.encode();
39683980
let mut target_value = <Vec<u8>>::from_hex("0202020202020202020202020202020202020202020202020202020202020202").unwrap(); // channel_id
@@ -3982,6 +3994,8 @@ mod tests {
39823994
target_value.append(&mut <Vec<u8>>::from_hex("3045022100ee00dbf4a862463e837d7c08509de814d620e4d9830fa84818713e0fa358f145022021c3c7060c4d53fe84fd165d60208451108a778c13b92ca4c6bad439236126cc01").unwrap());
39833995
target_value.append(&mut <Vec<u8>>::from_hex("21").unwrap()); // len of witness element data (VarInt)
39843996
target_value.append(&mut <Vec<u8>>::from_hex("028fbbf0b16f5ba5bcb5dd37cd4047ce6f726a21c06682f9ec2f52b057de1dbdb5").unwrap());
3997+
target_value.append(&mut <Vec<u8>>::from_hex("0040").unwrap()); // type and len (64)
3998+
target_value.append(&mut <Vec<u8>>::from_hex("d977cb9b53d93a6ff64bb5f1e158b4094b66e798fb12911168a3ccdf80a83096340a6a95da0ae8d9f776528eecdbb747eb6b545495a4319ed5378e35b21e073a").unwrap());
39853999
assert_eq!(encoded_value, target_value);
39864000
}
39874001

lightning/src/ln/peer_handler.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,12 +248,15 @@ impl ChannelMessageHandler for ErroringMessageHandler {
248248
fn handle_stfu(&self, their_node_id: &PublicKey, msg: &msgs::Stfu) {
249249
ErroringMessageHandler::push_error(&self, their_node_id, msg.channel_id);
250250
}
251+
#[cfg(dual_funding)]
251252
fn handle_splice(&self, their_node_id: &PublicKey, msg: &msgs::Splice) {
252253
ErroringMessageHandler::push_error(&self, their_node_id, msg.channel_id);
253254
}
255+
#[cfg(dual_funding)]
254256
fn handle_splice_ack(&self, their_node_id: &PublicKey, msg: &msgs::SpliceAck) {
255257
ErroringMessageHandler::push_error(&self, their_node_id, msg.channel_id);
256258
}
259+
#[cfg(dual_funding)]
257260
fn handle_splice_locked(&self, their_node_id: &PublicKey, msg: &msgs::SpliceLocked) {
258261
ErroringMessageHandler::push_error(&self, their_node_id, msg.channel_id);
259262
}
@@ -1784,13 +1787,16 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
17841787
self.message_handler.chan_handler.handle_stfu(&their_node_id, &msg);
17851788
}
17861789

1790+
#[cfg(dual_funding)]
17871791
// Splicing messages:
17881792
wire::Message::Splice(msg) => {
17891793
self.message_handler.chan_handler.handle_splice(&their_node_id, &msg);
17901794
}
1795+
#[cfg(dual_funding)]
17911796
wire::Message::SpliceAck(msg) => {
17921797
self.message_handler.chan_handler.handle_splice_ack(&their_node_id, &msg);
17931798
}
1799+
#[cfg(dual_funding)]
17941800
wire::Message::SpliceLocked(msg) => {
17951801
self.message_handler.chan_handler.handle_splice_locked(&their_node_id, &msg);
17961802
}

lightning/src/ln/wire.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,11 @@ pub(crate) enum Message<T> where T: core::fmt::Debug + Type + TestEq {
6060
FundingCreated(msgs::FundingCreated),
6161
FundingSigned(msgs::FundingSigned),
6262
Stfu(msgs::Stfu),
63+
#[cfg(dual_funding)]
6364
Splice(msgs::Splice),
65+
#[cfg(dual_funding)]
6466
SpliceAck(msgs::SpliceAck),
67+
#[cfg(dual_funding)]
6568
SpliceLocked(msgs::SpliceLocked),
6669
TxAddInput(msgs::TxAddInput),
6770
TxAddOutput(msgs::TxAddOutput),
@@ -115,8 +118,11 @@ impl<T> Writeable for Message<T> where T: core::fmt::Debug + Type + TestEq {
115118
&Message::FundingCreated(ref msg) => msg.write(writer),
116119
&Message::FundingSigned(ref msg) => msg.write(writer),
117120
&Message::Stfu(ref msg) => msg.write(writer),
121+
#[cfg(dual_funding)]
118122
&Message::Splice(ref msg) => msg.write(writer),
123+
#[cfg(dual_funding)]
119124
&Message::SpliceAck(ref msg) => msg.write(writer),
125+
#[cfg(dual_funding)]
120126
&Message::SpliceLocked(ref msg) => msg.write(writer),
121127
&Message::TxAddInput(ref msg) => msg.write(writer),
122128
&Message::TxAddOutput(ref msg) => msg.write(writer),
@@ -170,8 +176,11 @@ impl<T> Type for Message<T> where T: core::fmt::Debug + Type + TestEq {
170176
&Message::FundingCreated(ref msg) => msg.type_id(),
171177
&Message::FundingSigned(ref msg) => msg.type_id(),
172178
&Message::Stfu(ref msg) => msg.type_id(),
179+
#[cfg(dual_funding)]
173180
&Message::Splice(ref msg) => msg.type_id(),
181+
#[cfg(dual_funding)]
174182
&Message::SpliceAck(ref msg) => msg.type_id(),
183+
#[cfg(dual_funding)]
175184
&Message::SpliceLocked(ref msg) => msg.type_id(),
176185
&Message::TxAddInput(ref msg) => msg.type_id(),
177186
&Message::TxAddOutput(ref msg) => msg.type_id(),
@@ -270,15 +279,18 @@ fn do_read<R: io::Read, T, H: core::ops::Deref>(buffer: &mut R, message_type: u1
270279
msgs::FundingSigned::TYPE => {
271280
Ok(Message::FundingSigned(Readable::read(buffer)?))
272281
},
282+
#[cfg(dual_funding)]
273283
msgs::Splice::TYPE => {
274284
Ok(Message::Splice(Readable::read(buffer)?))
275285
},
276286
msgs::Stfu::TYPE => {
277287
Ok(Message::Stfu(Readable::read(buffer)?))
278288
},
289+
#[cfg(dual_funding)]
279290
msgs::SpliceAck::TYPE => {
280291
Ok(Message::SpliceAck(Readable::read(buffer)?))
281292
},
293+
#[cfg(dual_funding)]
282294
msgs::SpliceLocked::TYPE => {
283295
Ok(Message::SpliceLocked(Readable::read(buffer)?))
284296
},

lightning/src/util/test_utils.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -768,12 +768,15 @@ impl msgs::ChannelMessageHandler for TestChannelMessageHandler {
768768
fn handle_stfu(&self, _their_node_id: &PublicKey, msg: &msgs::Stfu) {
769769
self.received_msg(wire::Message::Stfu(msg.clone()));
770770
}
771+
#[cfg(dual_funding)]
771772
fn handle_splice(&self, _their_node_id: &PublicKey, msg: &msgs::Splice) {
772773
self.received_msg(wire::Message::Splice(msg.clone()));
773774
}
775+
#[cfg(dual_funding)]
774776
fn handle_splice_ack(&self, _their_node_id: &PublicKey, msg: &msgs::SpliceAck) {
775777
self.received_msg(wire::Message::SpliceAck(msg.clone()));
776778
}
779+
#[cfg(dual_funding)]
777780
fn handle_splice_locked(&self, _their_node_id: &PublicKey, msg: &msgs::SpliceLocked) {
778781
self.received_msg(wire::Message::SpliceLocked(msg.clone()));
779782
}

0 commit comments

Comments
 (0)