Skip to content

Commit 29d46ce

Browse files
committed
Let some tests try to sign a revoked commitment without panic
Return an Err instead so that the test can complete.
1 parent bd4345d commit 29d46ce

File tree

4 files changed

+24
-10
lines changed

4 files changed

+24
-10
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ impl KeysInterface for KeyProvider {
182182
(0, 0),
183183
);
184184
let revoked_commitment = self.make_revoked_commitment_cell(keys.commitment_seed);
185-
EnforcingChannelKeys::new_with_revoked(keys, revoked_commitment)
185+
EnforcingChannelKeys::new_with_revoked(keys, revoked_commitment, false)
186186
}
187187

188188
fn get_secure_random_bytes(&self) -> [u8; 32] {
@@ -202,6 +202,7 @@ impl KeysInterface for KeyProvider {
202202
inner,
203203
last_commitment_number: Arc::new(Mutex::new(last_commitment_number)),
204204
revoked_commitment,
205+
err_on_sign_revoked_holder_tx: false,
205206
})
206207
}
207208
}

lightning/src/ln/functional_tests.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7379,7 +7379,10 @@ fn test_data_loss_protect() {
73797379
let fee_estimator;
73807380
let tx_broadcaster;
73817381
let chain_source;
7382-
let chanmon_cfgs = create_chanmon_cfgs(2);
7382+
let mut chanmon_cfgs = create_chanmon_cfgs(2);
7383+
// We broadcast during Drop because chanmon is out of sync with chanmgr, which would cause a panic
7384+
// during signing due to revoked tx
7385+
chanmon_cfgs[0].keys_manager.err_on_sign_revoked_holder_tx = true;
73837386
let keys_manager = &chanmon_cfgs[0].keys_manager;
73847387
let monitor;
73857388
let node_state_0;

lightning/src/util/enforcing_trait_impls.rs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,22 +36,25 @@ pub struct EnforcingChannelKeys {
3636
pub inner: InMemoryChannelKeys,
3737
pub last_commitment_number: Arc<Mutex<Option<u64>>>,
3838
pub revoked_commitment: Arc<Mutex<u64>>,
39+
pub err_on_sign_revoked_holder_tx: bool,
3940
}
4041

4142
impl EnforcingChannelKeys {
4243
pub fn new(inner: InMemoryChannelKeys) -> Self {
4344
Self {
4445
inner,
4546
last_commitment_number: Arc::new(Mutex::new(None)),
46-
revoked_commitment: Arc::new(Mutex::new(INITIAL_REVOKED_COMMITMENT_NUMBER))
47+
revoked_commitment: Arc::new(Mutex::new(INITIAL_REVOKED_COMMITMENT_NUMBER)),
48+
err_on_sign_revoked_holder_tx: false
4749
}
4850
}
4951

50-
pub fn new_with_revoked(inner: InMemoryChannelKeys, revoked_commitment: Arc<Mutex<u64>>) -> Self {
52+
pub fn new_with_revoked(inner: InMemoryChannelKeys, revoked_commitment: Arc<Mutex<u64>>, err_on_sign_revoked_holder_tx: bool) -> Self {
5153
Self {
5254
inner,
5355
last_commitment_number: Arc::new(Mutex::new(None)),
54-
revoked_commitment
56+
revoked_commitment,
57+
err_on_sign_revoked_holder_tx
5558
}
5659
}
5760
}
@@ -100,9 +103,12 @@ impl ChannelKeys for EnforcingChannelKeys {
100103
let commitment_number = trusted_tx.commitment_number();
101104
println!("XXX sign {} for {}", commitment_number, self.inner.commitment_seed[0]);
102105
if *revoked - 1 != commitment_number && *revoked - 2 != commitment_number {
103-
println!("can only sign the next two unrevoked commitment numbers, revoked={} vs requested={} for {}",
104-
*revoked, commitment_number, self.inner.commitment_seed[0]);
105-
return Err(());
106+
if self.err_on_sign_revoked_holder_tx {
107+
return Err(());
108+
} else {
109+
panic!("can only sign the next two unrevoked commitment numbers, revoked={} vs requested={} for {}",
110+
*revoked, commitment_number, self.inner.commitment_seed[0])
111+
}
106112
}
107113

108114
for (this_htlc, sig) in trusted_tx.htlcs().iter().zip(&commitment_tx.counterparty_htlc_sigs) {
@@ -165,6 +171,7 @@ impl Readable for EnforcingChannelKeys {
165171
inner,
166172
last_commitment_number: Arc::new(Mutex::new(last_commitment_number)),
167173
revoked_commitment: Arc::new(Mutex::new(INITIAL_REVOKED_COMMITMENT_NUMBER)),
174+
err_on_sign_revoked_holder_tx: false,
168175
})
169176
}
170177
}

lightning/src/util/test_utils.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,7 @@ pub struct TestKeysInterface {
422422
backing: keysinterface::KeysManager,
423423
pub override_session_priv: Mutex<Option<[u8; 32]>>,
424424
pub override_channel_id_priv: Mutex<Option<[u8; 32]>>,
425+
pub err_on_sign_revoked_holder_tx: bool,
425426
revoked_commitments: Mutex<HashMap<[u8;32], Arc<Mutex<u64>>>>,
426427
}
427428

@@ -434,7 +435,7 @@ impl keysinterface::KeysInterface for TestKeysInterface {
434435
fn get_channel_keys(&self, inbound: bool, channel_value_satoshis: u64) -> EnforcingChannelKeys {
435436
let keys = self.backing.get_channel_keys(inbound, channel_value_satoshis);
436437
let revoked_commitment = self.make_revoked_commitment_cell(keys.commitment_seed);
437-
EnforcingChannelKeys::new_with_revoked(keys, revoked_commitment)
438+
EnforcingChannelKeys::new_with_revoked(keys, revoked_commitment, self.err_on_sign_revoked_holder_tx)
438439
}
439440

440441
fn get_secure_random_bytes(&self) -> [u8; 32] {
@@ -464,6 +465,7 @@ impl keysinterface::KeysInterface for TestKeysInterface {
464465
inner,
465466
last_commitment_number: Arc::new(Mutex::new(last_commitment_number)),
466467
revoked_commitment,
468+
err_on_sign_revoked_holder_tx: self.err_on_sign_revoked_holder_tx,
467469
})
468470
}
469471
}
@@ -476,13 +478,14 @@ impl TestKeysInterface {
476478
backing: keysinterface::KeysManager::new(seed, network, now.as_secs(), now.subsec_nanos()),
477479
override_session_priv: Mutex::new(None),
478480
override_channel_id_priv: Mutex::new(None),
481+
err_on_sign_revoked_holder_tx: false,
479482
revoked_commitments: Mutex::new(HashMap::new()),
480483
}
481484
}
482485
pub fn derive_channel_keys(&self, channel_value_satoshis: u64, user_id_1: u64, user_id_2: u64) -> EnforcingChannelKeys {
483486
let keys = self.backing.derive_channel_keys(channel_value_satoshis, user_id_1, user_id_2);
484487
let revoked_commitment = self.make_revoked_commitment_cell(keys.commitment_seed);
485-
EnforcingChannelKeys::new_with_revoked(keys, revoked_commitment)
488+
EnforcingChannelKeys::new_with_revoked(keys, revoked_commitment, self.err_on_sign_revoked_holder_tx)
486489
}
487490

488491
fn make_revoked_commitment_cell(&self, commitment_seed: [u8; 32]) -> Arc<Mutex<u64>> {

0 commit comments

Comments
 (0)