Skip to content

Commit 24abda1

Browse files
committed
Change get_per_commitment_point to return result type
Includes simple changes to test util signers and tests, as well as handling the error case for get_per_commitment_point in HolderCommitmentPoint. This leaves an `.expect("TODO")` in places that will be addressed in upcoming commits.
1 parent ca407a5 commit 24abda1

File tree

4 files changed

+26
-17
lines changed

4 files changed

+26
-17
lines changed

lightning/src/ln/channel.rs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -977,10 +977,12 @@ impl HolderCommitmentPoint where {
977977
where SP::Target: SignerProvider, L::Target: Logger
978978
{
979979
if let HolderCommitmentPoint::Uninitialized { transaction_number } = self {
980-
let current = signer.as_ref().get_per_commitment_point(*transaction_number, secp_ctx); // TODO
981-
log_trace!(logger, "Retrieved current per-commitment point {}", transaction_number);
982-
*self = HolderCommitmentPoint::PendingNext { transaction_number: *transaction_number, current };
983-
// TODO: handle error case when get_per_commitment_point becomes async
980+
if let Ok(current) = signer.as_ref().get_per_commitment_point(*transaction_number, secp_ctx) {
981+
log_trace!(logger, "Retrieved initial per-commitment point {}", transaction_number);
982+
*self = HolderCommitmentPoint::PendingNext { transaction_number: *transaction_number, current };
983+
} else {
984+
log_trace!(logger, "Initial per-commitment point {} is pending", transaction_number);
985+
}
984986
}
985987

986988
if let HolderCommitmentPoint::Available { transaction_number, next, .. } = self {
@@ -991,10 +993,12 @@ impl HolderCommitmentPoint where {
991993
}
992994

993995
if let HolderCommitmentPoint::PendingNext { transaction_number, current } = self {
994-
let next = signer.as_ref().get_per_commitment_point(*transaction_number - 1, secp_ctx); // TODO
995-
log_trace!(logger, "Retrieved next per-commitment point {}", *transaction_number - 1);
996-
*self = HolderCommitmentPoint::Available { transaction_number: *transaction_number, current: *current, next };
997-
// TODO: handle error case when get_per_commitment_point becomes async
996+
if let Ok(next) = signer.as_ref().get_per_commitment_point(*transaction_number - 1, secp_ctx) {
997+
log_trace!(logger, "Retrieved next per-commitment point {}", *transaction_number - 1);
998+
*self = HolderCommitmentPoint::Available { transaction_number: *transaction_number, current: *current, next };
999+
} else {
1000+
log_trace!(logger, "Next per-commitment point {} is pending", transaction_number);
1001+
}
9981002
}
9991003
}
10001004
}
@@ -5373,7 +5377,7 @@ impl<SP: Deref> Channel<SP> where
53735377

53745378
let our_commitment_transaction = INITIAL_COMMITMENT_NUMBER - self.context.holder_commitment_point.transaction_number() - 1;
53755379
if msg.next_remote_commitment_number > 0 {
5376-
let expected_point = self.context.holder_signer.as_ref().get_per_commitment_point(INITIAL_COMMITMENT_NUMBER - msg.next_remote_commitment_number + 1, &self.context.secp_ctx);
5380+
let expected_point = self.context.holder_signer.as_ref().get_per_commitment_point(INITIAL_COMMITMENT_NUMBER - msg.next_remote_commitment_number + 1, &self.context.secp_ctx).expect("TODO");
53775381
let given_secret = SecretKey::from_slice(&msg.your_last_per_commitment_secret)
53785382
.map_err(|_| ChannelError::Close("Peer sent a garbage channel_reestablish with unparseable secret key".to_owned()))?;
53795383
if expected_point != PublicKey::from_secret_key(&self.context.secp_ctx, &given_secret) {

lightning/src/ln/functional_tests.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -741,7 +741,7 @@ fn test_update_fee_that_funder_cannot_afford() {
741741
(pubkeys.revocation_basepoint, pubkeys.htlc_basepoint,
742742
pubkeys.funding_pubkey)
743743
};
744-
let (remote_delayed_payment_basepoint, remote_htlc_basepoint,remote_point, remote_funding) = {
744+
let (remote_delayed_payment_basepoint, remote_htlc_basepoint, remote_point, remote_funding) = {
745745
let per_peer_state = nodes[1].node.per_peer_state.read().unwrap();
746746
let chan_lock = per_peer_state.get(&nodes[0].node.get_our_node_id()).unwrap().lock().unwrap();
747747
let remote_chan = chan_lock.channel_by_id.get(&chan.2).map(
@@ -750,7 +750,7 @@ fn test_update_fee_that_funder_cannot_afford() {
750750
let chan_signer = remote_chan.get_signer();
751751
let pubkeys = chan_signer.as_ref().pubkeys();
752752
(pubkeys.delayed_payment_basepoint, pubkeys.htlc_basepoint,
753-
chan_signer.as_ref().get_per_commitment_point(INITIAL_COMMITMENT_NUMBER - 1, &secp_ctx),
753+
chan_signer.as_ref().get_per_commitment_point(INITIAL_COMMITMENT_NUMBER - 1, &secp_ctx).unwrap(),
754754
pubkeys.funding_pubkey)
755755
};
756756

@@ -1474,7 +1474,7 @@ fn test_fee_spike_violation_fails_htlc() {
14741474
let pubkeys = chan_signer.as_ref().pubkeys();
14751475
(pubkeys.revocation_basepoint, pubkeys.htlc_basepoint,
14761476
chan_signer.as_ref().release_commitment_secret(INITIAL_COMMITMENT_NUMBER),
1477-
chan_signer.as_ref().get_per_commitment_point(INITIAL_COMMITMENT_NUMBER - 2, &secp_ctx),
1477+
chan_signer.as_ref().get_per_commitment_point(INITIAL_COMMITMENT_NUMBER - 2, &secp_ctx).unwrap(),
14781478
chan_signer.as_ref().pubkeys().funding_pubkey)
14791479
};
14801480
let (remote_delayed_payment_basepoint, remote_htlc_basepoint, remote_point, remote_funding) = {
@@ -1486,7 +1486,7 @@ fn test_fee_spike_violation_fails_htlc() {
14861486
let chan_signer = remote_chan.get_signer();
14871487
let pubkeys = chan_signer.as_ref().pubkeys();
14881488
(pubkeys.delayed_payment_basepoint, pubkeys.htlc_basepoint,
1489-
chan_signer.as_ref().get_per_commitment_point(INITIAL_COMMITMENT_NUMBER - 1, &secp_ctx),
1489+
chan_signer.as_ref().get_per_commitment_point(INITIAL_COMMITMENT_NUMBER - 1, &secp_ctx).unwrap(),
14901490
chan_signer.as_ref().pubkeys().funding_pubkey)
14911491
};
14921492

lightning/src/sign/mod.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -729,8 +729,11 @@ pub trait ChannelSigner {
729729
/// Gets the per-commitment point for a specific commitment number
730730
///
731731
/// Note that the commitment number starts at `(1 << 48) - 1` and counts backwards.
732+
///
733+
/// If the signer returns `Err`, then the user is responsible for either force-closing the channel
734+
/// or retrying once the signature is ready.
732735
fn get_per_commitment_point(&self, idx: u64, secp_ctx: &Secp256k1<secp256k1::All>)
733-
-> PublicKey;
736+
-> Result<PublicKey, ()>;
734737

735738
/// Gets the commitment secret for a specific commitment number as part of the revocation process
736739
///
@@ -1343,11 +1346,11 @@ impl EntropySource for InMemorySigner {
13431346
impl ChannelSigner for InMemorySigner {
13441347
fn get_per_commitment_point(
13451348
&self, idx: u64, secp_ctx: &Secp256k1<secp256k1::All>,
1346-
) -> PublicKey {
1349+
) -> Result<PublicKey, ()> {
13471350
let commitment_secret =
13481351
SecretKey::from_slice(&chan_utils::build_commitment_secret(&self.commitment_seed, idx))
13491352
.unwrap();
1350-
PublicKey::from_secret_key(secp_ctx, &commitment_secret)
1353+
Ok(PublicKey::from_secret_key(secp_ctx, &commitment_secret))
13511354
}
13521355

13531356
fn release_commitment_secret(&self, idx: u64) -> [u8; 32] {

lightning/src/util/test_channel_signer.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,9 @@ impl TestChannelSigner {
126126
}
127127

128128
impl ChannelSigner for TestChannelSigner {
129-
fn get_per_commitment_point(&self, idx: u64, secp_ctx: &Secp256k1<secp256k1::All>) -> PublicKey {
129+
fn get_per_commitment_point(&self, idx: u64, secp_ctx: &Secp256k1<secp256k1::All>) -> Result<PublicKey, ()> {
130+
// TODO: implement a mask in EnforcementState to let you test signatures being
131+
// unavailable
130132
self.inner.get_per_commitment_point(idx, secp_ctx)
131133
}
132134

0 commit comments

Comments
 (0)