mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-01-19 05:43:55 +01:00
cfg-gate async signing logic
We are intending to release without having completed our async signing logic, which sadly means we need to cfg-gate it to ensure we restore the previous state of panicking on signer errors, rather than putting us in a stuck state with no way to recover. Here we add a new `async_signing` cfg flag and use it to gate all the new logic from #2558 effectively reverting commits1da29290e7
through014a336e59
.
This commit is contained in:
parent
304224e69d
commit
a866ba7ee3
@ -86,6 +86,8 @@ def check_cfg_tag(cfg):
|
||||
pass
|
||||
elif cfg == "taproot":
|
||||
pass
|
||||
elif cfg == "async_signing":
|
||||
pass
|
||||
elif cfg == "require_route_graph_test":
|
||||
pass
|
||||
else:
|
||||
|
@ -171,7 +171,6 @@ if [ -f "$(which arm-none-eabi-gcc)" ]; then
|
||||
popd
|
||||
fi
|
||||
|
||||
echo -e "\n\nTest Taproot builds"
|
||||
pushd lightning
|
||||
echo -e "\n\nTest cfg-flag builds"
|
||||
RUSTFLAGS="$RUSTFLAGS --cfg=taproot" cargo test --verbose --color always -p lightning
|
||||
popd
|
||||
RUSTFLAGS="$RUSTFLAGS --cfg=async_signing" cargo test --verbose --color always -p lightning
|
||||
|
@ -2434,8 +2434,13 @@ impl<SP: Deref> ChannelContext<SP> where SP::Target: SignerProvider {
|
||||
.ok();
|
||||
|
||||
if funding_signed.is_none() {
|
||||
log_trace!(logger, "Counterparty commitment signature not available for funding_signed message; setting signer_pending_funding");
|
||||
self.signer_pending_funding = true;
|
||||
#[cfg(not(async_signing))] {
|
||||
panic!("Failed to get signature for funding_signed");
|
||||
}
|
||||
#[cfg(async_signing)] {
|
||||
log_trace!(logger, "Counterparty commitment signature not available for funding_signed message; setting signer_pending_funding");
|
||||
self.signer_pending_funding = true;
|
||||
}
|
||||
} else if self.signer_pending_funding {
|
||||
log_trace!(logger, "Counterparty commitment signature available for funding_signed message; clearing signer_pending_funding");
|
||||
self.signer_pending_funding = false;
|
||||
@ -4259,7 +4264,7 @@ impl<SP: Deref> Channel<SP> where
|
||||
|
||||
/// Indicates that the signer may have some signatures for us, so we should retry if we're
|
||||
/// blocked.
|
||||
#[allow(unused)]
|
||||
#[cfg(async_signing)]
|
||||
pub fn signer_maybe_unblocked<L: Deref>(&mut self, logger: &L) -> SignerResumeUpdates where L::Target: Logger {
|
||||
let commitment_update = if self.context.signer_pending_commitment_update {
|
||||
self.get_last_commitment_update_for_send(logger).ok()
|
||||
@ -4363,11 +4368,16 @@ impl<SP: Deref> Channel<SP> where
|
||||
}
|
||||
update
|
||||
} else {
|
||||
if !self.context.signer_pending_commitment_update {
|
||||
log_trace!(logger, "Commitment update awaiting signer: setting signer_pending_commitment_update");
|
||||
self.context.signer_pending_commitment_update = true;
|
||||
#[cfg(not(async_signing))] {
|
||||
panic!("Failed to get signature for new commitment state");
|
||||
}
|
||||
#[cfg(async_signing)] {
|
||||
if !self.context.signer_pending_commitment_update {
|
||||
log_trace!(logger, "Commitment update awaiting signer: setting signer_pending_commitment_update");
|
||||
self.context.signer_pending_commitment_update = true;
|
||||
}
|
||||
return Err(());
|
||||
}
|
||||
return Err(());
|
||||
};
|
||||
Ok(msgs::CommitmentUpdate {
|
||||
update_add_htlcs, update_fulfill_htlcs, update_fail_htlcs, update_fail_malformed_htlcs, update_fee,
|
||||
@ -6448,9 +6458,14 @@ impl<SP: Deref> OutboundV1Channel<SP> where SP::Target: SignerProvider {
|
||||
|
||||
let funding_created = self.get_funding_created_msg(logger);
|
||||
if funding_created.is_none() {
|
||||
if !self.context.signer_pending_funding {
|
||||
log_trace!(logger, "funding_created awaiting signer; setting signer_pending_funding");
|
||||
self.context.signer_pending_funding = true;
|
||||
#[cfg(not(async_signing))] {
|
||||
panic!("Failed to get signature for new funding creation");
|
||||
}
|
||||
#[cfg(async_signing)] {
|
||||
if !self.context.signer_pending_funding {
|
||||
log_trace!(logger, "funding_created awaiting signer; setting signer_pending_funding");
|
||||
self.context.signer_pending_funding = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -6796,7 +6811,7 @@ impl<SP: Deref> OutboundV1Channel<SP> where SP::Target: SignerProvider {
|
||||
|
||||
/// Indicates that the signer may have some signatures for us, so we should retry if we're
|
||||
/// blocked.
|
||||
#[allow(unused)]
|
||||
#[cfg(async_signing)]
|
||||
pub fn signer_maybe_unblocked<L: Deref>(&mut self, logger: &L) -> Option<msgs::FundingCreated> where L::Target: Logger {
|
||||
if self.context.signer_pending_funding && self.context.is_outbound() {
|
||||
log_trace!(logger, "Signer unblocked a funding_created");
|
||||
|
@ -7322,8 +7322,7 @@ where
|
||||
/// attempted in every channel, or in the specifically provided channel.
|
||||
///
|
||||
/// [`ChannelSigner`]: crate::sign::ChannelSigner
|
||||
#[cfg(test)] // This is only implemented for one signer method, and should be private until we
|
||||
// actually finish implementing it fully.
|
||||
#[cfg(async_signing)]
|
||||
pub fn signer_unblocked(&self, channel_opt: Option<(PublicKey, ChannelId)>) {
|
||||
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
|
||||
|
||||
|
@ -76,7 +76,7 @@ mod monitor_tests;
|
||||
#[cfg(test)]
|
||||
#[allow(unused_mut)]
|
||||
mod shutdown_tests;
|
||||
#[cfg(test)]
|
||||
#[cfg(all(test, async_signing))]
|
||||
#[allow(unused_mut)]
|
||||
mod async_signer_tests;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user