mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-02-24 15:02:20 +01:00
channel value to ChannelKeys constructor
This commit is contained in:
parent
9a02115437
commit
d14ece4ac0
6 changed files with 38 additions and 26 deletions
|
@ -150,7 +150,7 @@ impl KeysInterface for KeyProvider {
|
|||
PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, self.node_id]).unwrap())
|
||||
}
|
||||
|
||||
fn get_channel_keys(&self, _inbound: bool) -> EnforcingChannelKeys {
|
||||
fn get_channel_keys(&self, _inbound: bool, channel_value_satoshis: u64) -> EnforcingChannelKeys {
|
||||
EnforcingChannelKeys::new(InMemoryChannelKeys {
|
||||
funding_key: SecretKey::from_slice(&[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, self.node_id]).unwrap(),
|
||||
revocation_base_key: SecretKey::from_slice(&[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, self.node_id]).unwrap(),
|
||||
|
@ -159,6 +159,7 @@ impl KeysInterface for KeyProvider {
|
|||
htlc_base_key: SecretKey::from_slice(&[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, self.node_id]).unwrap(),
|
||||
commitment_seed: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, self.node_id],
|
||||
remote_channel_pubkeys: None,
|
||||
channel_value_satoshis,
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -247,7 +247,7 @@ impl KeysInterface for KeyProvider {
|
|||
PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]).unwrap())
|
||||
}
|
||||
|
||||
fn get_channel_keys(&self, inbound: bool) -> EnforcingChannelKeys {
|
||||
fn get_channel_keys(&self, inbound: bool, channel_value_satoshis: u64) -> EnforcingChannelKeys {
|
||||
let ctr = self.counter.fetch_add(1, Ordering::Relaxed) as u8;
|
||||
EnforcingChannelKeys::new(if inbound {
|
||||
InMemoryChannelKeys {
|
||||
|
@ -258,6 +258,7 @@ impl KeysInterface for KeyProvider {
|
|||
htlc_base_key: SecretKey::from_slice(&[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, ctr]).unwrap(),
|
||||
commitment_seed: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, ctr],
|
||||
remote_channel_pubkeys: None,
|
||||
channel_value_satoshis: channel_value_satoshis,
|
||||
}
|
||||
} else {
|
||||
InMemoryChannelKeys {
|
||||
|
@ -268,6 +269,7 @@ impl KeysInterface for KeyProvider {
|
|||
htlc_base_key: SecretKey::from_slice(&[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, ctr]).unwrap(),
|
||||
commitment_seed: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, ctr],
|
||||
remote_channel_pubkeys: None,
|
||||
channel_value_satoshis: channel_value_satoshis,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
@ -86,7 +86,7 @@ pub trait KeysInterface: Send + Sync {
|
|||
fn get_shutdown_pubkey(&self) -> PublicKey;
|
||||
/// Get a new set of ChannelKeys for per-channel secrets. These MUST be unique even if you
|
||||
/// restarted with some stale data!
|
||||
fn get_channel_keys(&self, inbound: bool) -> Self::ChanKeySigner;
|
||||
fn get_channel_keys(&self, inbound: bool, channel_value_satoshis: u64) -> Self::ChanKeySigner;
|
||||
/// Get a secret and PRNG seed for construting an onion packet
|
||||
fn get_onion_rand(&self) -> (SecretKey, [u8; 32]);
|
||||
/// Get a unique temporary channel id. Channels will be referred to by this until the funding
|
||||
|
@ -142,13 +142,13 @@ pub trait ChannelKeys : Send {
|
|||
/// TODO: Document the things someone using this interface should enforce before signing.
|
||||
/// TODO: Add more input vars to enable better checking (preferably removing commitment_tx and
|
||||
/// making the callee generate it via some util function we expose)!
|
||||
fn sign_remote_commitment<T: secp256k1::Signing + secp256k1::Verification>(&self, channel_value_satoshis: u64, feerate_per_kw: u64, commitment_tx: &Transaction, keys: &TxCreationKeys, htlcs: &[&HTLCOutputInCommitment], to_self_delay: u16, secp_ctx: &Secp256k1<T>) -> Result<(Signature, Vec<Signature>), ()>;
|
||||
fn sign_remote_commitment<T: secp256k1::Signing + secp256k1::Verification>(&self, feerate_per_kw: u64, commitment_tx: &Transaction, keys: &TxCreationKeys, htlcs: &[&HTLCOutputInCommitment], to_self_delay: u16, secp_ctx: &Secp256k1<T>) -> Result<(Signature, Vec<Signature>), ()>;
|
||||
|
||||
/// Create a signature for a (proposed) closing transaction.
|
||||
///
|
||||
/// Note that, due to rounding, there may be one "missing" satoshi, and either party may have
|
||||
/// chosen to forgo their output as dust.
|
||||
fn sign_closing_transaction<T: secp256k1::Signing>(&self, channel_value_satoshis: u64, channel_funding_redeemscript: &Script, closing_tx: &Transaction, secp_ctx: &Secp256k1<T>) -> Result<Signature, ()>;
|
||||
fn sign_closing_transaction<T: secp256k1::Signing>(&self, channel_funding_redeemscript: &Script, closing_tx: &Transaction, secp_ctx: &Secp256k1<T>) -> Result<Signature, ()>;
|
||||
|
||||
/// Signs a channel announcement message with our funding key, proving it comes from one
|
||||
/// of the channel participants.
|
||||
|
@ -180,8 +180,10 @@ pub struct InMemoryChannelKeys {
|
|||
pub htlc_base_key: SecretKey,
|
||||
/// Commitment seed
|
||||
pub commitment_seed: [u8; 32],
|
||||
/// Remote funding pubkey
|
||||
/// Remote public keys and base points
|
||||
pub remote_channel_pubkeys: Option<ChannelPublicKeys>,
|
||||
/// The total value of this channel
|
||||
pub channel_value_satoshis: u64,
|
||||
}
|
||||
|
||||
impl ChannelKeys for InMemoryChannelKeys {
|
||||
|
@ -192,14 +194,14 @@ impl ChannelKeys for InMemoryChannelKeys {
|
|||
fn htlc_base_key(&self) -> &SecretKey { &self.htlc_base_key }
|
||||
fn commitment_seed(&self) -> &[u8; 32] { &self.commitment_seed }
|
||||
|
||||
fn sign_remote_commitment<T: secp256k1::Signing + secp256k1::Verification>(&self, channel_value_satoshis: u64, feerate_per_kw: u64, commitment_tx: &Transaction, keys: &TxCreationKeys, htlcs: &[&HTLCOutputInCommitment], to_self_delay: u16, secp_ctx: &Secp256k1<T>) -> Result<(Signature, Vec<Signature>), ()> {
|
||||
fn sign_remote_commitment<T: secp256k1::Signing + secp256k1::Verification>(&self, feerate_per_kw: u64, commitment_tx: &Transaction, keys: &TxCreationKeys, htlcs: &[&HTLCOutputInCommitment], to_self_delay: u16, secp_ctx: &Secp256k1<T>) -> Result<(Signature, Vec<Signature>), ()> {
|
||||
if commitment_tx.input.len() != 1 { return Err(()); }
|
||||
|
||||
let funding_pubkey = PublicKey::from_secret_key(secp_ctx, &self.funding_key);
|
||||
let remote_channel_pubkeys = self.remote_channel_pubkeys.as_ref().expect("must set remote channel pubkeys before signing");
|
||||
let channel_funding_redeemscript = make_funding_redeemscript(&funding_pubkey, &remote_channel_pubkeys.funding_pubkey);
|
||||
|
||||
let commitment_sighash = hash_to_message!(&bip143::SighashComponents::new(&commitment_tx).sighash_all(&commitment_tx.input[0], &channel_funding_redeemscript, channel_value_satoshis)[..]);
|
||||
let commitment_sighash = hash_to_message!(&bip143::SighashComponents::new(&commitment_tx).sighash_all(&commitment_tx.input[0], &channel_funding_redeemscript, self.channel_value_satoshis)[..]);
|
||||
let commitment_sig = secp_ctx.sign(&commitment_sighash, &self.funding_key);
|
||||
|
||||
let commitment_txid = commitment_tx.txid();
|
||||
|
@ -221,13 +223,13 @@ impl ChannelKeys for InMemoryChannelKeys {
|
|||
Ok((commitment_sig, htlc_sigs))
|
||||
}
|
||||
|
||||
fn sign_closing_transaction<T: secp256k1::Signing>(&self, channel_value_satoshis: u64, channel_funding_redeemscript: &Script, closing_tx: &Transaction, secp_ctx: &Secp256k1<T>) -> Result<Signature, ()> {
|
||||
fn sign_closing_transaction<T: secp256k1::Signing>(&self, channel_funding_redeemscript: &Script, closing_tx: &Transaction, secp_ctx: &Secp256k1<T>) -> Result<Signature, ()> {
|
||||
if closing_tx.input.len() != 1 { return Err(()); }
|
||||
if closing_tx.input[0].witness.len() != 0 { return Err(()); }
|
||||
if closing_tx.output.len() > 2 { return Err(()); }
|
||||
|
||||
let sighash = hash_to_message!(&bip143::SighashComponents::new(closing_tx)
|
||||
.sighash_all(&closing_tx.input[0], &channel_funding_redeemscript, channel_value_satoshis)[..]);
|
||||
.sighash_all(&closing_tx.input[0], &channel_funding_redeemscript, self.channel_value_satoshis)[..]);
|
||||
Ok(secp_ctx.sign(&sighash, &self.funding_key))
|
||||
}
|
||||
|
||||
|
@ -249,7 +251,8 @@ impl_writeable!(InMemoryChannelKeys, 0, {
|
|||
delayed_payment_base_key,
|
||||
htlc_base_key,
|
||||
commitment_seed,
|
||||
remote_channel_pubkeys
|
||||
remote_channel_pubkeys,
|
||||
channel_value_satoshis
|
||||
});
|
||||
|
||||
/// Simple KeysInterface implementor that takes a 32-byte seed for use as a BIP 32 extended key
|
||||
|
@ -358,7 +361,7 @@ impl KeysInterface for KeysManager {
|
|||
self.shutdown_pubkey.clone()
|
||||
}
|
||||
|
||||
fn get_channel_keys(&self, _inbound: bool) -> InMemoryChannelKeys {
|
||||
fn get_channel_keys(&self, _inbound: bool, channel_value_satoshis: u64) -> InMemoryChannelKeys {
|
||||
// We only seriously intend to rely on the channel_master_key for true secure
|
||||
// entropy, everything else just ensures uniqueness. We rely on the unique_start (ie
|
||||
// starting_time provided in the constructor) to be unique.
|
||||
|
@ -399,6 +402,7 @@ impl KeysInterface for KeysManager {
|
|||
htlc_base_key,
|
||||
commitment_seed,
|
||||
remote_channel_pubkeys: None,
|
||||
channel_value_satoshis,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -420,7 +420,7 @@ impl<ChanSigner: ChannelKeys> Channel<ChanSigner> {
|
|||
|
||||
// Constructors:
|
||||
pub fn new_outbound(fee_estimator: &FeeEstimator, keys_provider: &Arc<KeysInterface<ChanKeySigner = ChanSigner>>, their_node_id: PublicKey, channel_value_satoshis: u64, push_msat: u64, user_id: u64, logger: Arc<Logger>, config: &UserConfig) -> Result<Channel<ChanSigner>, APIError> {
|
||||
let chan_keys = keys_provider.get_channel_keys(false);
|
||||
let chan_keys = keys_provider.get_channel_keys(false, channel_value_satoshis);
|
||||
|
||||
if channel_value_satoshis >= MAX_FUNDING_SATOSHIS {
|
||||
return Err(APIError::APIMisuseError{err: "funding value > 2^24"});
|
||||
|
@ -532,7 +532,7 @@ impl<ChanSigner: ChannelKeys> Channel<ChanSigner> {
|
|||
/// Creates a new channel from a remote sides' request for one.
|
||||
/// Assumes chain_hash has already been checked and corresponds with what we expect!
|
||||
pub fn new_from_req(fee_estimator: &FeeEstimator, keys_provider: &Arc<KeysInterface<ChanKeySigner = ChanSigner>>, their_node_id: PublicKey, their_features: InitFeatures, msg: &msgs::OpenChannel, user_id: u64, logger: Arc<Logger>, config: &UserConfig) -> Result<Channel<ChanSigner>, ChannelError> {
|
||||
let mut chan_keys = keys_provider.get_channel_keys(true);
|
||||
let mut chan_keys = keys_provider.get_channel_keys(true, msg.funding_satoshis);
|
||||
let their_pubkeys = ChannelPublicKeys {
|
||||
funding_pubkey: msg.funding_pubkey,
|
||||
revocation_basepoint: msg.revocation_basepoint,
|
||||
|
@ -1418,7 +1418,7 @@ impl<ChanSigner: ChannelKeys> Channel<ChanSigner> {
|
|||
|
||||
let remote_keys = self.build_remote_transaction_keys()?;
|
||||
let remote_initial_commitment_tx = self.build_commitment_transaction(self.cur_remote_commitment_transaction_number, &remote_keys, false, false, self.feerate_per_kw).0;
|
||||
let remote_signature = self.local_keys.sign_remote_commitment(self.channel_value_satoshis, self.feerate_per_kw, &remote_initial_commitment_tx, &remote_keys, &Vec::new(), self.our_to_self_delay, &self.secp_ctx)
|
||||
let remote_signature = self.local_keys.sign_remote_commitment(self.feerate_per_kw, &remote_initial_commitment_tx, &remote_keys, &Vec::new(), self.our_to_self_delay, &self.secp_ctx)
|
||||
.map_err(|_| ChannelError::Close("Failed to get signatures for new commitment_signed"))?.0;
|
||||
|
||||
// We sign the "remote" commitment transaction, allowing them to broadcast the tx if they wish.
|
||||
|
@ -2563,7 +2563,7 @@ impl<ChanSigner: ChannelKeys> Channel<ChanSigner> {
|
|||
|
||||
let (closing_tx, total_fee_satoshis) = self.build_closing_transaction(proposed_total_fee_satoshis, false);
|
||||
let our_sig = self.local_keys
|
||||
.sign_closing_transaction(self.channel_value_satoshis, &self.get_funding_redeemscript(), &closing_tx, &self.secp_ctx)
|
||||
.sign_closing_transaction(&self.get_funding_redeemscript(), &closing_tx, &self.secp_ctx)
|
||||
.ok();
|
||||
if our_sig.is_none() { return None; }
|
||||
|
||||
|
@ -2719,7 +2719,7 @@ impl<ChanSigner: ChannelKeys> Channel<ChanSigner> {
|
|||
let closing_tx_max_weight = Self::get_closing_transaction_weight(&self.get_closing_scriptpubkey(), self.their_shutdown_scriptpubkey.as_ref().unwrap());
|
||||
let (closing_tx, used_total_fee) = self.build_closing_transaction($new_feerate * closing_tx_max_weight / 1000, false);
|
||||
let our_sig = self.local_keys
|
||||
.sign_closing_transaction(self.channel_value_satoshis, &funding_redeemscript, &closing_tx, &self.secp_ctx)
|
||||
.sign_closing_transaction(&funding_redeemscript, &closing_tx, &self.secp_ctx)
|
||||
.map_err(|_| ChannelError::Close("External signer refused to sign closing transaction"))?;
|
||||
self.last_sent_closing_fee = Some(($new_feerate, used_total_fee, our_sig.clone()));
|
||||
return Ok((Some(msgs::ClosingSigned {
|
||||
|
@ -2754,7 +2754,7 @@ impl<ChanSigner: ChannelKeys> Channel<ChanSigner> {
|
|||
}
|
||||
|
||||
let our_sig = self.local_keys
|
||||
.sign_closing_transaction(self.channel_value_satoshis, &funding_redeemscript, &closing_tx, &self.secp_ctx)
|
||||
.sign_closing_transaction(&funding_redeemscript, &closing_tx, &self.secp_ctx)
|
||||
.map_err(|_| ChannelError::Close("External signer refused to sign closing transaction"))?;
|
||||
self.build_signed_closing_transaction(&mut closing_tx, &msg.signature, &our_sig);
|
||||
|
||||
|
@ -3154,7 +3154,7 @@ impl<ChanSigner: ChannelKeys> Channel<ChanSigner> {
|
|||
fn get_outbound_funding_created_signature(&mut self) -> Result<(Signature, Transaction), ChannelError> {
|
||||
let remote_keys = self.build_remote_transaction_keys()?;
|
||||
let remote_initial_commitment_tx = self.build_commitment_transaction(self.cur_remote_commitment_transaction_number, &remote_keys, false, false, self.feerate_per_kw).0;
|
||||
Ok((self.local_keys.sign_remote_commitment(self.channel_value_satoshis, self.feerate_per_kw, &remote_initial_commitment_tx, &remote_keys, &Vec::new(), self.our_to_self_delay, &self.secp_ctx)
|
||||
Ok((self.local_keys.sign_remote_commitment(self.feerate_per_kw, &remote_initial_commitment_tx, &remote_keys, &Vec::new(), self.our_to_self_delay, &self.secp_ctx)
|
||||
.map_err(|_| ChannelError::Close("Failed to get signatures for new commitment_signed"))?.0, remote_initial_commitment_tx))
|
||||
}
|
||||
|
||||
|
@ -3462,7 +3462,7 @@ impl<ChanSigner: ChannelKeys> Channel<ChanSigner> {
|
|||
htlcs.push(htlc);
|
||||
}
|
||||
|
||||
let res = self.local_keys.sign_remote_commitment(self.channel_value_satoshis, feerate_per_kw, &remote_commitment_tx.0, &remote_keys, &htlcs, self.our_to_self_delay, &self.secp_ctx)
|
||||
let res = self.local_keys.sign_remote_commitment(feerate_per_kw, &remote_commitment_tx.0, &remote_keys, &htlcs, self.our_to_self_delay, &self.secp_ctx)
|
||||
.map_err(|_| ChannelError::Close("Failed to get signatures for new commitment_signed"))?;
|
||||
signature = res.0;
|
||||
htlc_signatures = res.1;
|
||||
|
@ -4101,7 +4101,9 @@ mod tests {
|
|||
PublicKey::from_secret_key(&secp_ctx, &channel_close_key)
|
||||
}
|
||||
|
||||
fn get_channel_keys(&self, _inbound: bool) -> InMemoryChannelKeys { self.chan_keys.clone() }
|
||||
fn get_channel_keys(&self, _inbound: bool, channel_value_satoshis: u64) -> InMemoryChannelKeys {
|
||||
self.chan_keys.clone()
|
||||
}
|
||||
fn get_onion_rand(&self) -> (SecretKey, [u8; 32]) { panic!(); }
|
||||
fn get_channel_id(&self) -> [u8; 32] { [0; 32] }
|
||||
}
|
||||
|
@ -4127,6 +4129,7 @@ mod tests {
|
|||
revocation_base_key: SecretKey::from_slice(&hex::decode("0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").unwrap()[..]).unwrap(),
|
||||
commitment_seed: [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff],
|
||||
remote_channel_pubkeys: None,
|
||||
channel_value_satoshis: 7000000000,
|
||||
};
|
||||
assert_eq!(PublicKey::from_secret_key(&secp_ctx, chan_keys.funding_key()).serialize()[..],
|
||||
hex::decode("023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb").unwrap()[..]);
|
||||
|
|
|
@ -56,7 +56,7 @@ impl ChannelKeys for EnforcingChannelKeys {
|
|||
fn htlc_base_key(&self) -> &SecretKey { self.inner.htlc_base_key() }
|
||||
fn commitment_seed(&self) -> &[u8; 32] { self.inner.commitment_seed() }
|
||||
|
||||
fn sign_remote_commitment<T: secp256k1::Signing + secp256k1::Verification>(&self, channel_value_satoshis: u64, feerate_per_kw: u64, commitment_tx: &Transaction, keys: &TxCreationKeys, htlcs: &[&HTLCOutputInCommitment], to_self_delay: u16, secp_ctx: &Secp256k1<T>) -> Result<(Signature, Vec<Signature>), ()> {
|
||||
fn sign_remote_commitment<T: secp256k1::Signing + secp256k1::Verification>(&self, feerate_per_kw: u64, commitment_tx: &Transaction, keys: &TxCreationKeys, htlcs: &[&HTLCOutputInCommitment], to_self_delay: u16, secp_ctx: &Secp256k1<T>) -> Result<(Signature, Vec<Signature>), ()> {
|
||||
if commitment_tx.input.len() != 1 { panic!("lightning commitment transactions have a single input"); }
|
||||
self.check_keys(secp_ctx, keys);
|
||||
let obscured_commitment_transaction_number = (commitment_tx.lock_time & 0xffffff) as u64 | ((commitment_tx.input[0].sequence as u64 & 0xffffff) << 3*8);
|
||||
|
@ -71,11 +71,11 @@ impl ChannelKeys for EnforcingChannelKeys {
|
|||
commitment_data.1 = cmp::max(commitment_number, commitment_data.1)
|
||||
}
|
||||
|
||||
Ok(self.inner.sign_remote_commitment(channel_value_satoshis, feerate_per_kw, commitment_tx, keys, htlcs, to_self_delay, secp_ctx).unwrap())
|
||||
Ok(self.inner.sign_remote_commitment(feerate_per_kw, commitment_tx, keys, htlcs, to_self_delay, secp_ctx).unwrap())
|
||||
}
|
||||
|
||||
fn sign_closing_transaction<T: secp256k1::Signing>(&self, channel_value_satoshis: u64, channel_funding_redeemscript: &Script, closing_tx: &Transaction, secp_ctx: &Secp256k1<T>) -> Result<Signature, ()> {
|
||||
Ok(self.inner.sign_closing_transaction(channel_value_satoshis, channel_funding_redeemscript, closing_tx, secp_ctx).unwrap())
|
||||
fn sign_closing_transaction<T: secp256k1::Signing>(&self, channel_funding_redeemscript: &Script, closing_tx: &Transaction, secp_ctx: &Secp256k1<T>) -> Result<Signature, ()> {
|
||||
Ok(self.inner.sign_closing_transaction(channel_funding_redeemscript, closing_tx, secp_ctx).unwrap())
|
||||
}
|
||||
|
||||
fn sign_channel_announcement<T: secp256k1::Signing>(&self, msg: &msgs::UnsignedChannelAnnouncement, secp_ctx: &Secp256k1<T>) -> Result<Signature, ()> {
|
||||
|
|
|
@ -203,7 +203,9 @@ impl keysinterface::KeysInterface for TestKeysInterface {
|
|||
fn get_node_secret(&self) -> SecretKey { self.backing.get_node_secret() }
|
||||
fn get_destination_script(&self) -> Script { self.backing.get_destination_script() }
|
||||
fn get_shutdown_pubkey(&self) -> PublicKey { self.backing.get_shutdown_pubkey() }
|
||||
fn get_channel_keys(&self, inbound: bool) -> EnforcingChannelKeys { EnforcingChannelKeys::new(self.backing.get_channel_keys(inbound)) }
|
||||
fn get_channel_keys(&self, inbound: bool, channel_value_satoshis: u64) -> EnforcingChannelKeys {
|
||||
EnforcingChannelKeys::new(self.backing.get_channel_keys(inbound, channel_value_satoshis))
|
||||
}
|
||||
|
||||
fn get_onion_rand(&self) -> (SecretKey, [u8; 32]) {
|
||||
match *self.override_session_priv.lock().unwrap() {
|
||||
|
|
Loading…
Add table
Reference in a new issue