Drop requirement that ChannelKeys expose delayed_payment_basepoint
[rust-lightning] / lightning / src / chain / keysinterface.rs
index 4e4d182aa24c2243bf9ef4b89369efb8eefac089..05e24d8c1b220556c2d43e57aa566a6670a302ef 100644 (file)
@@ -167,28 +167,6 @@ impl Readable for SpendableOutputDescriptor {
        }
 }
 
-/// A trait to describe an object which can get user secrets and key material.
-pub trait KeysInterface: Send + Sync {
-       /// A type which implements ChannelKeys which will be returned by get_channel_keys.
-       type ChanKeySigner : ChannelKeys;
-
-       /// Get node secret key (aka node_id or network_key)
-       fn get_node_secret(&self) -> SecretKey;
-       /// Get destination redeemScript to encumber static protocol exit points.
-       fn get_destination_script(&self) -> Script;
-       /// Get shutdown_pubkey to use as PublicKey at channel closure
-       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, 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
-       /// transaction is created, at which point they will use the outpoint in the funding
-       /// transaction.
-       fn get_channel_id(&self) -> [u8; 32];
-}
-
 /// Set of lightning keys needed to operate a channel as described in BOLT 3.
 ///
 /// Signing services could be implemented on a hardware wallet. In this case,
@@ -217,16 +195,6 @@ pub trait KeysInterface: Send + Sync {
 // TODO: We should remove Clone by instead requesting a new ChannelKeys copy when we create
 // ChannelMonitors instead of expecting to clone the one out of the Channel into the monitors.
 pub trait ChannelKeys : Send+Clone {
-       /// Gets the private key for the anchor tx
-       fn funding_key<'a>(&'a self) -> &'a SecretKey;
-       /// Gets the local secret key for blinded revocation pubkey
-       fn revocation_base_key<'a>(&'a self) -> &'a SecretKey;
-       /// Gets the local secret key used in the to_remote output of remote commitment tx (ie the
-       /// output to us in transactions our counterparty broadcasts).
-       /// Also as part of obscured commitment number.
-       fn payment_key<'a>(&'a self) -> &'a SecretKey;
-       /// Gets the local secret key used in HTLC-Success/HTLC-Timeout txn and to_local output
-       fn delayed_payment_base_key<'a>(&'a self) -> &'a SecretKey;
        /// Gets the local htlc secret key used in commitment tx htlc outputs
        fn htlc_base_key<'a>(&'a self) -> &'a SecretKey;
        /// Gets the commitment seed
@@ -341,21 +309,43 @@ pub trait ChannelKeys : Send+Clone {
        fn set_remote_channel_pubkeys(&mut self, channel_points: &ChannelPublicKeys);
 }
 
+/// A trait to describe an object which can get user secrets and key material.
+pub trait KeysInterface: Send + Sync {
+       /// A type which implements ChannelKeys which will be returned by get_channel_keys.
+       type ChanKeySigner : ChannelKeys;
+
+       /// Get node secret key (aka node_id or network_key)
+       fn get_node_secret(&self) -> SecretKey;
+       /// Get destination redeemScript to encumber static protocol exit points.
+       fn get_destination_script(&self) -> Script;
+       /// Get shutdown_pubkey to use as PublicKey at channel closure
+       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, channel_value_satoshis: u64) -> Self::ChanKeySigner;
+       /// Get a secret and PRNG seed for constructing 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
+       /// transaction is created, at which point they will use the outpoint in the funding
+       /// transaction.
+       fn get_channel_id(&self) -> [u8; 32];
+}
+
 #[derive(Clone)]
 /// A simple implementation of ChannelKeys that just keeps the private keys in memory.
 pub struct InMemoryChannelKeys {
        /// Private key of anchor tx
-       funding_key: SecretKey,
+       pub funding_key: SecretKey,
        /// Local secret key for blinded revocation pubkey
-       revocation_base_key: SecretKey,
+       pub revocation_base_key: SecretKey,
        /// Local secret key used for our balance in remote-broadcasted commitment transactions
-       payment_key: SecretKey,
+       pub payment_key: SecretKey,
        /// Local secret key used in HTLC tx
-       delayed_payment_base_key: SecretKey,
+       pub delayed_payment_base_key: SecretKey,
        /// Local htlc secret key used in commitment tx htlc outputs
-       htlc_base_key: SecretKey,
+       pub htlc_base_key: SecretKey,
        /// Commitment seed
-       commitment_seed: [u8; 32],
+       pub commitment_seed: [u8; 32],
        /// Local public keys and basepoints
        pub(crate) local_channel_pubkeys: ChannelPublicKeys,
        /// Remote public keys and base points
@@ -416,10 +406,6 @@ impl InMemoryChannelKeys {
 }
 
 impl ChannelKeys for InMemoryChannelKeys {
-       fn funding_key(&self) -> &SecretKey { &self.funding_key }
-       fn revocation_base_key(&self) -> &SecretKey { &self.revocation_base_key }
-       fn payment_key(&self) -> &SecretKey { &self.payment_key }
-       fn delayed_payment_base_key(&self) -> &SecretKey { &self.delayed_payment_base_key }
        fn htlc_base_key(&self) -> &SecretKey { &self.htlc_base_key }
        fn commitment_seed(&self) -> &[u8; 32] { &self.commitment_seed }
        fn pubkeys<'a>(&'a self) -> &'a ChannelPublicKeys { &self.local_channel_pubkeys }
@@ -642,7 +628,7 @@ impl KeysManager {
        /// Note that until the 0.1 release there is no guarantee of backward compatibility between
        /// versions. Once the library is more fully supported, the docs will be updated to include a
        /// detailed description of the guarantee.
-       pub fn new(seed: &[u8; 32], network: Network, starting_time_secs: u64, starting_time_nanos: u32) -> KeysManager {
+       pub fn new(seed: &[u8; 32], network: Network, starting_time_secs: u64, starting_time_nanos: u32) -> Self {
                let secp_ctx = Secp256k1::signing_only();
                match ExtendedPrivKey::new_master(network.clone(), seed) {
                        Ok(master_key) => {