Package org.ldk.structs
Class KeysManager
- java.lang.Object
-
- org.ldk.structs.KeysManager
-
public class KeysManager extends Object
Simple KeysInterface implementor 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' ChannelMonitor closes may use seed/1' Cooperative closes may use seed/2' The two close keys may be needed to claim on-chain funds!
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description KeysInterface
as_KeysInterface()
Constructs a new KeysInterface which calls the relevant methods on this_arg.InMemorySigner
derive_channel_keys(long channel_value_satoshis, byte[] params)
Derive an old Sign containing per-channel secrets based on a key derivation parameters.protected void
finalize()
static KeysManager
of(byte[] seed, long starting_time_secs, int starting_time_nanos)
Constructs a KeysManager from a 32-byte seed.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).
-
-
-
Method Detail
-
finalize
protected void finalize() throws Throwable
-
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 (eg 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. 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.
-
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. Key derivation parameters are accessible through a per-channel secrets Sign::channel_keys_id and is provided inside DynamicOuputP2WSH in case of onchain output detection for which a corresponding delayed_payment_key must be derived.
-
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 or if a descriptor was duplicated. 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
-
-