@@ -962,8 +962,12 @@ impl HolderCommitmentPoint {
962
962
{
963
963
HolderCommitmentPoint::Available {
964
964
transaction_number: INITIAL_COMMITMENT_NUMBER,
965
- current: signer.as_ref().get_per_commitment_point(INITIAL_COMMITMENT_NUMBER, secp_ctx),
966
- next: signer.as_ref().get_per_commitment_point(INITIAL_COMMITMENT_NUMBER - 1, secp_ctx),
965
+ // TODO(async_signing): remove this expect with the Uninitialized variant
966
+ current: signer.as_ref().get_per_commitment_point(INITIAL_COMMITMENT_NUMBER, secp_ctx)
967
+ .expect("Signer must be able to provide initial commitment point"),
968
+ // TODO(async_signing): remove this expect with the Uninitialized variant
969
+ next: signer.as_ref().get_per_commitment_point(INITIAL_COMMITMENT_NUMBER - 1, secp_ctx)
970
+ .expect("Signer must be able to provide second commitment point"),
967
971
}
968
972
}
969
973
@@ -1001,9 +1005,12 @@ impl HolderCommitmentPoint {
1001
1005
where SP::Target: SignerProvider, L::Target: Logger
1002
1006
{
1003
1007
if let HolderCommitmentPoint::PendingNext { transaction_number, current } = self {
1004
- let next = signer.as_ref().get_per_commitment_point(*transaction_number - 1, secp_ctx);
1005
- log_trace!(logger, "Retrieved next per-commitment point {}", *transaction_number - 1);
1006
- *self = HolderCommitmentPoint::Available { transaction_number: *transaction_number, current: *current, next };
1008
+ if let Ok(next) = signer.as_ref().get_per_commitment_point(*transaction_number - 1, secp_ctx) {
1009
+ log_trace!(logger, "Retrieved next per-commitment point {}", *transaction_number - 1);
1010
+ *self = HolderCommitmentPoint::Available { transaction_number: *transaction_number, current: *current, next };
1011
+ } else {
1012
+ log_trace!(logger, "Next per-commitment point {} is pending", transaction_number);
1013
+ }
1007
1014
}
1008
1015
}
1009
1016
@@ -5607,7 +5614,7 @@ impl<SP: Deref> Channel<SP> where
5607
5614
5608
5615
let our_commitment_transaction = INITIAL_COMMITMENT_NUMBER - self.context.holder_commitment_point.transaction_number() - 1;
5609
5616
if msg.next_remote_commitment_number > 0 {
5610
- 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);
5617
+ 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") ;
5611
5618
let given_secret = SecretKey::from_slice(&msg.your_last_per_commitment_secret)
5612
5619
.map_err(|_| ChannelError::close("Peer sent a garbage channel_reestablish with unparseable secret key".to_owned()))?;
5613
5620
if expected_point != PublicKey::from_secret_key(&self.context.secp_ctx, &given_secret) {
@@ -9305,14 +9312,16 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
9305
9312
(Some(current), Some(next)) => HolderCommitmentPoint::Available {
9306
9313
transaction_number: cur_holder_commitment_transaction_number, current, next
9307
9314
},
9308
- (Some(current), _) => HolderCommitmentPoint::Available {
9315
+ (Some(current), _) => HolderCommitmentPoint::PendingNext {
9309
9316
transaction_number: cur_holder_commitment_transaction_number, current,
9310
- next: holder_signer.get_per_commitment_point(cur_holder_commitment_transaction_number - 1, &secp_ctx),
9311
9317
},
9312
- (_, _) => HolderCommitmentPoint::Available {
9313
- transaction_number: cur_holder_commitment_transaction_number,
9314
- current: holder_signer.get_per_commitment_point(cur_holder_commitment_transaction_number, &secp_ctx),
9315
- next: holder_signer.get_per_commitment_point(cur_holder_commitment_transaction_number - 1, &secp_ctx),
9318
+ (_, _) => {
9319
+ // TODO(async_signing): remove this expect with the Uninitialized variant
9320
+ let current = holder_signer.get_per_commitment_point(cur_holder_commitment_transaction_number, &secp_ctx)
9321
+ .expect("Must be able to derive the current commitment point upon channel restoration");
9322
+ HolderCommitmentPoint::PendingNext {
9323
+ transaction_number: cur_holder_commitment_transaction_number, current,
9324
+ }
9316
9325
},
9317
9326
};
9318
9327
0 commit comments