Merge pull request #3316 from optout21/signer_extend

[Splicing] Signer extended with method to sign prev funding transaction input
This commit is contained in:
Matt Corallo 2024-10-16 18:43:09 +00:00 committed by GitHub
commit d4e8b4994d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 42 additions and 0 deletions

View file

@ -209,4 +209,18 @@ pub trait EcdsaChannelSigner: ChannelSigner {
fn sign_channel_announcement_with_funding_key(
&self, msg: &UnsignedChannelAnnouncement, secp_ctx: &Secp256k1<secp256k1::All>,
) -> Result<Signature, ()>;
/// Signs the input of a splicing funding transaction with our funding key.
///
/// In splicing, the previous funding transaction output is spent as the input of
/// the new funding transaction, and is a 2-of-2 multisig.
///
/// `input_index`: The index of the input within the new funding transaction `tx`,
/// spending the previous funding transaction's output
///
/// `input_value`: The value of the previous funding transaction output.
fn sign_splicing_funding_input(
&self, tx: &Transaction, input_index: usize, input_value: u64,
secp_ctx: &Secp256k1<secp256k1::All>,
) -> Result<Signature, ()>;
}

View file

@ -1695,6 +1695,27 @@ impl EcdsaChannelSigner for InMemorySigner {
let msghash = hash_to_message!(&Sha256dHash::hash(&msg.encode()[..])[..]);
Ok(secp_ctx.sign_ecdsa(&msghash, &self.funding_key))
}
fn sign_splicing_funding_input(
&self, tx: &Transaction, input_index: usize, input_value: u64,
secp_ctx: &Secp256k1<secp256k1::All>,
) -> Result<Signature, ()> {
let funding_pubkey = PublicKey::from_secret_key(secp_ctx, &self.funding_key);
let counterparty_funding_key =
&self.counterparty_pubkeys().expect(MISSING_PARAMS_ERR).funding_pubkey;
let funding_redeemscript =
make_funding_redeemscript(&funding_pubkey, counterparty_funding_key);
let sighash = &sighash::SighashCache::new(tx)
.p2wsh_signature_hash(
input_index,
&funding_redeemscript,
Amount::from_sat(input_value),
EcdsaSighashType::All,
)
.unwrap()[..];
let msg = hash_to_message!(sighash);
Ok(sign(secp_ctx, &msg, &self.funding_key))
}
}
#[cfg(taproot)]

View file

@ -353,6 +353,13 @@ impl EcdsaChannelSigner for TestChannelSigner {
) -> Result<Signature, ()> {
self.inner.sign_channel_announcement_with_funding_key(msg, secp_ctx)
}
fn sign_splicing_funding_input(
&self, tx: &Transaction, input_index: usize, input_value: u64,
secp_ctx: &Secp256k1<secp256k1::All>,
) -> Result<Signature, ()> {
self.inner.sign_splicing_funding_input(tx, input_index, input_value, secp_ctx)
}
}
#[cfg(taproot)]