Class KeysManager


  • public class KeysManager
    extends Object
    Simple [`KeysInterface`] implementation 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
      • derive_channel_keys

        public InMemorySigner derive_channel_keys​(long channel_value_satoshis,
                                                  byte[] params)
        Derive an old [`Sign`] 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_KeysInterface

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