Skip to content

Commit 6b9cdb3

Browse files
Aditya SharmaAditya Sharma
Aditya Sharma
authored and
Aditya Sharma
committed
lightning: Handle your_peer_storage from our peers.
1 parent b54c7b6 commit 6b9cdb3

File tree

1 file changed

+58
-1
lines changed

1 file changed

+58
-1
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ use crate::ln::features::Bolt11InvoiceFeatures;
5656
use crate::routing::router::{BlindedTail, InFlightHtlcs, Path, Payee, PaymentParameters, Route, RouteParameters, Router};
5757
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};
5858
use crate::ln::msgs;
59+
use crate::ln::channel_keys::RevocationBasepoint;
60+
use crate::ln::chan_utils::{make_funding_redeemscript, ChannelTransactionParameters, CounterpartyChannelTransactionParameters, ChannelPublicKeys};
5961
use crate::ln::onion_utils;
6062
use crate::ln::onion_utils::{HTLCFailReason, INVALID_ONION_BLINDING};
6163
use crate::ln::msgs::{ChannelMessageHandler, DecodeError, LightningError};
@@ -76,8 +78,8 @@ use crate::offers::static_invoice::StaticInvoice;
7678
use crate::onion_message::async_payments::{AsyncPaymentsMessage, HeldHtlcAvailable, ReleaseHeldHtlc, AsyncPaymentsMessageHandler};
7779
use crate::onion_message::messenger::{Destination, MessageRouter, Responder, ResponseInstruction, MessageSendInstructions};
7880
use crate::onion_message::offers::{OffersMessage, OffersMessageHandler};
79-
use crate::sign::{EntropySource, NodeSigner, Recipient, SignerProvider};
8081
use crate::sign::ecdsa::EcdsaChannelSigner;
82+
use crate::sign::{EntropySource, ChannelSigner, NodeSigner, Recipient, SignerProvider};
8183
use crate::util::config::{UserConfig, ChannelConfig, ChannelConfigUpdate};
8284
use crate::util::wakers::{Future, Notifier};
8385
use crate::util::scid_utils::fake_scid;
@@ -7910,6 +7912,59 @@ where
79107912
peer_state.peer_storage = msg.data.clone();
79117913
}
79127914

7915+
fn internal_your_peer_storage(&self, counterparty_node_id: &PublicKey, msg: &msgs::YourPeerStorageMessage) {
7916+
let logger = WithContext::from(&self.logger, Some(*counterparty_node_id), None, None);
7917+
if msg.data.len() < 16 {
7918+
log_debug!(logger, "Invalid YourPeerStorage received from {}", log_pubkey!(counterparty_node_id));
7919+
return;
7920+
}
7921+
7922+
let mut res = vec![0; msg.data.len() - 16];
7923+
{
7924+
let our_peer_storage = self.our_peer_storage.read().unwrap();
7925+
match our_peer_storage.decrypt_our_peer_storage(&mut res, msg.data.as_slice(), self.our_peerstorage_encryption_key) {
7926+
Ok(()) => {
7927+
// Decryption successful, the plaintext is now stored in `res`
7928+
log_debug!(logger, "Received a peer storage from peer {}", log_pubkey!(counterparty_node_id));
7929+
}
7930+
Err(_) => {
7931+
log_debug!(logger, "Invalid YourPeerStorage received from {}", log_pubkey!(counterparty_node_id));
7932+
return;
7933+
}
7934+
}
7935+
}
7936+
7937+
let our_peer_storage = <OurPeerStorage as Readable>::read(&mut ::bitcoin::io::Cursor::new(res)).unwrap();
7938+
let per_peer_state = self.per_peer_state.read().unwrap();
7939+
7940+
for ps_channel in our_peer_storage.get_channels() {
7941+
let peer_state_mutex = match per_peer_state.get(&ps_channel.counterparty_node_id) {
7942+
Some(mutex) => mutex,
7943+
None => {
7944+
log_debug!(logger, "Not able to find peer_state for the counterparty {}, channelId {}", log_pubkey!(ps_channel.counterparty_node_id), ps_channel.channel_id);
7945+
// TODO: What if the peer storage is too old and we have already closed the channel and the peer has been forgotten?
7946+
panic!("Missing Channel {}", ps_channel.channel_id);
7947+
}
7948+
};
7949+
7950+
let peer_state_lock = peer_state_mutex.lock().unwrap();
7951+
let peer_state = &*peer_state_lock;
7952+
7953+
match peer_state.channel_by_id.get(&ps_channel.channel_id) {
7954+
Some(ChannelPhase::Funded(chan)) => {
7955+
if chan.context.get_commitment_secret().get_min_seen_secret() > ps_channel.get_min_seen_secret() {
7956+
panic!("Lost channel state for channel {}", ps_channel.channel_id);
7957+
}
7958+
},
7959+
Some(_) => {}
7960+
None => {
7961+
panic!("Missing channel {}", ps_channel.channel_id);
7962+
}
7963+
}
7964+
}
7965+
7966+
}
7967+
79137968
fn internal_funding_signed(&self, counterparty_node_id: &PublicKey, msg: &msgs::FundingSigned) -> Result<(), MsgHandleErrInternal> {
79147969
let best_block = *self.best_block.read().unwrap();
79157970
let per_peer_state = self.per_peer_state.read().unwrap();
@@ -10568,6 +10623,8 @@ where
1056810623
}
1056910624

1057010625
fn handle_your_peer_storage(&self, counterparty_node_id: PublicKey, msg: &msgs::YourPeerStorageMessage) {
10626+
let _persistence_guard = PersistenceNotifierGuard::optionally_notify(self, || NotifyOption::SkipPersistNoEvents);
10627+
self.internal_your_peer_storage(&counterparty_node_id, msg);
1057110628
}
1057210629

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

0 commit comments

Comments
 (0)