Skip to content

Commit 85c4ea6

Browse files
Aditya SharmaAditya Sharma
Aditya Sharma
authored and
Aditya Sharma
committed
lightning: Handle your_peer_storage from our peers.
1 parent 5f5bdbc commit 85c4ea6

File tree

1 file changed

+41
-1
lines changed

1 file changed

+41
-1
lines changed

lightning/src/ln/channelmanager.rs

+41-1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ use crate::ln::features::Bolt11InvoiceFeatures;
5353
use crate::routing::router::{BlindedTail, InFlightHtlcs, Path, Payee, PaymentParameters, Route, RouteParameters, Router};
5454
use crate::ln::onion_payment::{check_incoming_htlc_cltv, create_recv_pending_htlc_info, create_fwd_pending_htlc_info, decode_incoming_update_add_htlc_onion, InboundHTLCErr, NextPacketDetails};
5555
use crate::ln::msgs;
56+
use crate::ln::chan_utils::make_funding_redeemscript;
5657
use crate::ln::onion_utils;
5758
use crate::ln::onion_utils::{HTLCFailReason, INVALID_ONION_BLINDING};
5859
use crate::ln::msgs::{ChannelMessageHandler, DecodeError, LightningError};
@@ -69,8 +70,8 @@ use crate::offers::refund::{Refund, RefundBuilder};
6970
use crate::onion_message::async_payments::{AsyncPaymentsMessage, HeldHtlcAvailable, ReleaseHeldHtlc, AsyncPaymentsMessageHandler};
7071
use crate::onion_message::messenger::{new_pending_onion_message, Destination, MessageRouter, PendingOnionMessage, Responder, ResponseInstruction};
7172
use crate::onion_message::offers::{OffersMessage, OffersMessageHandler};
72-
use crate::sign::{EntropySource, NodeSigner, Recipient, SignerProvider};
7373
use crate::sign::ecdsa::EcdsaChannelSigner;
74+
use crate::sign::{EntropySource, ChannelSigner, NodeSigner, Recipient, SignerProvider};
7475
use crate::util::config::{UserConfig, ChannelConfig, ChannelConfigUpdate};
7576
use crate::util::wakers::{Future, Notifier};
7677
use crate::util::scid_utils::fake_scid;
@@ -7206,6 +7207,43 @@ where
72067207
self.peer_storage.lock().unwrap().insert(*counterparty_node_id, msg.data.clone());
72077208
}
72087209

7210+
fn internal_your_peer_storage(&self, counterparty_node_id: &PublicKey, msg: &msgs::YourPeerStorageMessage) {
7211+
let logger = WithContext::from(&self.logger, Some(*counterparty_node_id), None, None);
7212+
let our_peer_storage = self.our_peer_storage.read().unwrap();
7213+
if msg.data.len() < 16 {
7214+
log_debug!(logger, "Invalid YourPeerStorage received from {}", log_pubkey!(counterparty_node_id));
7215+
return;
7216+
}
7217+
7218+
let mut res = vec![0; msg.data.len() - 16];
7219+
7220+
match our_peer_storage.decrypt_our_peer_storage(&mut res, msg.data.as_slice(), self.our_peerstorage_encryption_key) {
7221+
Ok(()) => {
7222+
// Decryption successful, the plaintext is now stored in `res`
7223+
log_debug!(logger, "Decryption successful");
7224+
let our_peer_storage = <OurPeerStorage as Readable>::read(&mut ::std::io::Cursor::new(res)).unwrap();
7225+
7226+
for ps_channel in &our_peer_storage.channels {
7227+
let keys: <<SP as Deref>::Target as SignerProvider>::EcdsaSigner = self.signer_provider.derive_channel_signer(ps_channel.channel_value_stoshis, ps_channel.channel_keys_id);
7228+
let pubkeys: crate::ln::chan_utils::ChannelPublicKeys = keys.pubkeys().clone();
7229+
let funding_redeemscript = make_funding_redeemscript(&pubkeys.funding_pubkey, counterparty_node_id);
7230+
let funding_txo_script = funding_redeemscript.to_v0_p2wsh();
7231+
log_trace!(logger, "Dummy channel persisted! {:?}", ps_channel.latest_state);
7232+
let monitor = StubChannelMonitor::new_stub(self.secp_ctx.clone(), ps_channel, *self.best_block.read().unwrap(), keys, funding_txo_script);
7233+
let monitor_res = self.chain_monitor.watch_dummy(ps_channel.funding_outpoint, monitor);
7234+
if let Ok(_persist_state) = monitor_res {
7235+
log_trace!(logger, "Dummy channel persisted!");
7236+
}
7237+
}
7238+
}
7239+
Err(_) => {
7240+
log_debug!(logger, "Invalid YourPeerStorage received from {}", log_pubkey!(counterparty_node_id));
7241+
return;
7242+
}
7243+
}
7244+
7245+
}
7246+
72097247
fn internal_funding_signed(&self, counterparty_node_id: &PublicKey, msg: &msgs::FundingSigned) -> Result<(), MsgHandleErrInternal> {
72107248
let best_block = *self.best_block.read().unwrap();
72117249
let per_peer_state = self.per_peer_state.read().unwrap();
@@ -9745,6 +9783,8 @@ where
97459783
}
97469784

97479785
fn handle_your_peer_storage(&self, counterparty_node_id: &PublicKey, msg: &msgs::YourPeerStorageMessage) {
9786+
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
9787+
self.internal_your_peer_storage(counterparty_node_id, msg);
97489788
}
97499789

97509790
fn handle_channel_ready(&self, counterparty_node_id: &PublicKey, msg: &msgs::ChannelReady) {

0 commit comments

Comments
 (0)