Class KeysManager


  • public class KeysManager
    extends Object
    Simple implementation of [`EntropySource`], [`NodeSigner`], and [`SignerProvider`] that takes a 32-byte seed for use as a BIP 32 extended key and derives keys from that. Your `node_id` is seed/0'. Unilateral closes may use seed/1'. Cooperative closes may use seed/2'. The two close keys may be needed to claim on-chain funds! This struct cannot be used for nodes that wish to support receiving phantom payments; [`PhantomKeysManager`] must be used instead. Note that switching between this struct and [`PhantomKeysManager`] will invalidate any previously issued invoices and attempts to pay previous invoices will fail.
    • Method Detail

      • of

        public static KeysManager of​(byte[] seed,
                                     long starting_time_secs,
                                     int starting_time_nanos)
        Constructs a [`KeysManager`] from a 32-byte seed. If the seed is in some way biased (e.g., your CSRNG is busted) this may panic (but more importantly, you will possibly lose funds). `starting_time` isn't strictly required to actually be a time, but it must absolutely, without a doubt, be unique to this instance. ie if you start multiple times with the same `seed`, `starting_time` must be unique to each run. Thus, the easiest way to achieve this is to simply use the current time (with very high precision). The `seed` MUST be backed up safely prior to use so that the keys can be re-created, however, obviously, `starting_time` should be unique every time you reload the library - it is only used to generate new ephemeral key data (which will be stored by the individual channel if necessary). Note that the seed is required to recover certain on-chain funds independent of [`ChannelMonitor`] data, though a current copy of [`ChannelMonitor`] data is also required for any channel, and some on-chain during-closing funds. [`ChannelMonitor`]: crate::chain::channelmonitor::ChannelMonitor
      • get_node_secret_key

        public byte[] get_node_secret_key()
        Gets the \"node_id\" secret key used to sign gossip announcements, decode onion data, etc.
      • derive_channel_keys

        public InMemorySigner derive_channel_keys​(long channel_value_satoshis,
                                                  byte[] params)
        Derive an old [`WriteableEcdsaChannelSigner`] containing per-channel secrets based on a key derivation parameters.
      • spend_spendable_outputs

        public Result_TransactionNoneZ spend_spendable_outputs​(SpendableOutputDescriptor[] descriptors,
                                                               TxOut[] outputs,
                                                               byte[] change_destination_script,
                                                               int feerate_sat_per_1000_weight)
        Creates a [`Transaction`] which spends the given descriptors to the given outputs, plus an output to the given change destination (if sufficient change value remains). The transaction will have a feerate, at least, of the given value. Returns `Err(())` if the output value is greater than the input value minus required fee, if a descriptor was duplicated, or if an output descriptor `script_pubkey` does not match the one we can spend. We do not enforce that outputs meet the dust limit or that any output scripts are standard. May panic if the [`SpendableOutputDescriptor`]s were not generated by channels which used this [`KeysManager`] or one of the [`InMemorySigner`] created by this [`KeysManager`].
      • as_EntropySource

        public EntropySource as_EntropySource()
        Constructs a new EntropySource which calls the relevant methods on this_arg. This copies the `inner` pointer in this_arg and thus the returned EntropySource must be freed before this_arg is
      • as_NodeSigner

        public NodeSigner as_NodeSigner()
        Constructs a new NodeSigner which calls the relevant methods on this_arg. This copies the `inner` pointer in this_arg and thus the returned NodeSigner must be freed before this_arg is
      • as_SignerProvider

        public SignerProvider as_SignerProvider()
        Constructs a new SignerProvider which calls the relevant methods on this_arg. This copies the `inner` pointer in this_arg and thus the returned SignerProvider must be freed before this_arg is