Skip to content

Commit a48ba95

Browse files
joostjagerclaude
andcommitted
Use DeferredChainMonitor for all storage backends
Replace the ChainMonitor type alias to point to DeferredChainMonitor instead of the regular ChainMonitor. This enables safe persistence ordering (ChannelManager persisted before channel monitors) for all backends, including VSS. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent a6a54a4 commit a48ba95

File tree

5 files changed

+21
-20
lines changed

5 files changed

+21
-20
lines changed

Cargo.toml

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -169,15 +169,15 @@ harness = false
169169
#vss-client-ng = { path = "../vss-client" }
170170
#vss-client-ng = { git = "https://github.com/lightningdevkit/vss-client", branch = "main" }
171171
#
172-
#[patch."https://github.com/lightningdevkit/rust-lightning"]
173-
#lightning = { path = "../rust-lightning/lightning" }
174-
#lightning-types = { path = "../rust-lightning/lightning-types" }
175-
#lightning-invoice = { path = "../rust-lightning/lightning-invoice" }
176-
#lightning-net-tokio = { path = "../rust-lightning/lightning-net-tokio" }
177-
#lightning-persister = { path = "../rust-lightning/lightning-persister" }
178-
#lightning-background-processor = { path = "../rust-lightning/lightning-background-processor" }
179-
#lightning-rapid-gossip-sync = { path = "../rust-lightning/lightning-rapid-gossip-sync" }
180-
#lightning-block-sync = { path = "../rust-lightning/lightning-block-sync" }
181-
#lightning-transaction-sync = { path = "../rust-lightning/lightning-transaction-sync" }
182-
#lightning-liquidity = { path = "../rust-lightning/lightning-liquidity" }
183-
#lightning-macros = { path = "../rust-lightning/lightning-macros" }
172+
[patch."https://github.com/lightningdevkit/rust-lightning"]
173+
lightning = { git = "https://github.com/joostjager/rust-lightning", branch = "chain-mon-deferred-writes" }
174+
lightning-types = { git = "https://github.com/joostjager/rust-lightning", branch = "chain-mon-deferred-writes" }
175+
lightning-invoice = { git = "https://github.com/joostjager/rust-lightning", branch = "chain-mon-deferred-writes" }
176+
lightning-net-tokio = { git = "https://github.com/joostjager/rust-lightning", branch = "chain-mon-deferred-writes" }
177+
lightning-persister = { git = "https://github.com/joostjager/rust-lightning", branch = "chain-mon-deferred-writes" }
178+
lightning-background-processor = { git = "https://github.com/joostjager/rust-lightning", branch = "chain-mon-deferred-writes" }
179+
lightning-rapid-gossip-sync = { git = "https://github.com/joostjager/rust-lightning", branch = "chain-mon-deferred-writes" }
180+
lightning-block-sync = { git = "https://github.com/joostjager/rust-lightning", branch = "chain-mon-deferred-writes" }
181+
lightning-transaction-sync = { git = "https://github.com/joostjager/rust-lightning", branch = "chain-mon-deferred-writes" }
182+
lightning-liquidity = { git = "https://github.com/joostjager/rust-lightning", branch = "chain-mon-deferred-writes" }
183+
lightning-macros = { git = "https://github.com/joostjager/rust-lightning", branch = "chain-mon-deferred-writes" }

src/builder.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use bitcoin::key::Secp256k1;
2020
use bitcoin::secp256k1::PublicKey;
2121
use bitcoin::{BlockHash, Network};
2222
use bitcoin_payment_instructions::onion_message_resolver::LDKOnionMessageDNSSECHrnResolver;
23-
use lightning::chain::{chainmonitor, BestBlock};
23+
use lightning::chain::BestBlock;
2424
use lightning::ln::channelmanager::{self, ChainParameters, ChannelManagerReadArgs};
2525
use lightning::ln::msgs::{RoutingMessageHandler, SocketAddress};
2626
use lightning::ln::peer_handler::{IgnoringMessageHandler, MessageHandler};
@@ -1334,7 +1334,7 @@ fn build_with_store_internal(
13341334
));
13351335

13361336
// Initialize the ChainMonitor
1337-
let chain_monitor: Arc<ChainMonitor> = Arc::new(chainmonitor::ChainMonitor::new(
1337+
let chain_monitor: Arc<ChainMonitor> = Arc::new(ChainMonitor::new(
13381338
Some(Arc::clone(&chain_source)),
13391339
Arc::clone(&tx_broadcaster),
13401340
Arc::clone(&logger),
@@ -1511,7 +1511,7 @@ fn build_with_store_internal(
15111511
// Give ChannelMonitors to ChainMonitor
15121512
for (_blockhash, channel_monitor) in channel_monitors.into_iter() {
15131513
let channel_id = channel_monitor.channel_id();
1514-
chain_monitor.load_existing_monitor(channel_id, channel_monitor).map_err(|e| {
1514+
chain_monitor.inner().load_existing_monitor(channel_id, channel_monitor).map_err(|e| {
15151515
log_error!(logger, "Failed to load channel monitor: {:?}", e);
15161516
BuildError::InvalidChannelMonitor
15171517
})?;

src/chain/bitcoind.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,9 +168,10 @@ impl BitcoindChainSource {
168168
// network access during `start`. For now, we just make sure we get the worst known
169169
// block hash and sychronize them via `ChainMonitor`.
170170
if let Some(worst_channel_monitor_block_hash) = chain_monitor
171+
.inner()
171172
.list_monitors()
172173
.iter()
173-
.flat_map(|channel_id| chain_monitor.get_monitor(*channel_id))
174+
.flat_map(|channel_id| chain_monitor.inner().get_monitor(*channel_id))
174175
.map(|m| m.current_best_block())
175176
.min_by_key(|b| b.height)
176177
.map(|b| b.block_hash)

src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1622,8 +1622,8 @@ impl Node {
16221622

16231623
let mut total_lightning_balance_sats = 0;
16241624
let mut lightning_balances = Vec::new();
1625-
for channel_id in self.chain_monitor.list_monitors() {
1626-
match self.chain_monitor.get_monitor(channel_id) {
1625+
for channel_id in self.chain_monitor.inner().list_monitors() {
1626+
match self.chain_monitor.inner().get_monitor(channel_id) {
16271627
Ok(monitor) => {
16281628
let counterparty_node_id = monitor.get_counterparty_node_id();
16291629
for ldk_balance in monitor.get_claimable_balances() {

src/types.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use std::sync::{Arc, Mutex};
1313
use bitcoin::secp256k1::PublicKey;
1414
use bitcoin::{OutPoint, ScriptBuf};
1515
use bitcoin_payment_instructions::onion_message_resolver::LDKOnionMessageDNSSECHrnResolver;
16-
use lightning::chain::chainmonitor;
16+
use lightning::chain::deferred;
1717
use lightning::impl_writeable_tlv_based;
1818
use lightning::ln::channel_state::ChannelDetails as LdkChannelDetails;
1919
use lightning::ln::msgs::{RoutingMessageHandler, SocketAddress};
@@ -206,7 +206,7 @@ pub type Persister = MonitorUpdatingPersister<
206206
Arc<OnchainFeeEstimator>,
207207
>;
208208

209-
pub(crate) type ChainMonitor = chainmonitor::ChainMonitor<
209+
pub(crate) type ChainMonitor = deferred::DeferredChainMonitor<
210210
InMemorySigner,
211211
Arc<ChainSource>,
212212
Arc<Broadcaster>,

0 commit comments

Comments
 (0)