+ KeysInterface manual_keysif(KeysInterface underlying_if) {
+ return KeysInterface.new_impl(new KeysInterface.KeysInterfaceInterface() {
+ @Override
+ public byte[] get_node_secret() {
+ return underlying_if.get_node_secret();
+ }
+
+ @Override
+ public byte[] get_destination_script() {
+ return underlying_if.get_destination_script();
+ }
+
+ @Override
+ public byte[] get_shutdown_pubkey() {
+ return underlying_if.get_shutdown_pubkey();
+ }
+
+ @Override
+ public ChannelKeys get_channel_keys(boolean inbound, long channel_value_satoshis) {
+ ChannelKeys underlying_ck = underlying_if.get_channel_keys(inbound, channel_value_satoshis);
+ ChannelKeys.ChannelKeysInterface cki = new ChannelKeys.ChannelKeysInterface() {
+ @Override
+ public byte[] get_per_commitment_point(long idx) {
+ return underlying_ck.get_per_commitment_point(idx);
+ }
+
+ @Override
+ public byte[] release_commitment_secret(long idx) {
+ return underlying_ck.release_commitment_secret(idx);
+ }
+
+ @Override
+ public TwoTuple<Long, Long> key_derivation_params() {
+ return new TwoTuple<Long, Long>((long)0, (long)1);
+ }
+
+ @Override
+ public Result_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment(int feerate_per_kw, byte[] commitment_tx, PreCalculatedTxCreationKeys keys, HTLCOutputInCommitment[] htlcs) {
+ return underlying_ck.sign_counterparty_commitment(feerate_per_kw, commitment_tx, keys, htlcs);
+ }
+
+ @Override
+ public Result_SignatureNoneZ sign_holder_commitment(HolderCommitmentTransaction holder_commitment_tx) {
+ return underlying_ck.sign_holder_commitment(holder_commitment_tx);
+ }
+
+ @Override
+ public Result_CVec_SignatureZNoneZ sign_holder_commitment_htlc_transactions(HolderCommitmentTransaction holder_commitment_tx) {
+ return underlying_ck.sign_holder_commitment_htlc_transactions(holder_commitment_tx);
+ }
+
+ @Override
+ public Result_SignatureNoneZ sign_justice_transaction(byte[] justice_tx, long input, long amount, byte[] per_commitment_key, HTLCOutputInCommitment htlc) {
+ return underlying_ck.sign_justice_transaction(justice_tx, input, amount, per_commitment_key, htlc);
+ }
+
+ @Override
+ public Result_SignatureNoneZ sign_counterparty_htlc_transaction(byte[] htlc_tx, long input, long amount, byte[] per_commitment_point, HTLCOutputInCommitment htlc) {
+ return underlying_ck.sign_counterparty_htlc_transaction(htlc_tx, input, amount, per_commitment_point, htlc);
+ }
+
+ @Override
+ public Result_SignatureNoneZ sign_closing_transaction(byte[] closing_tx) {
+ return underlying_ck.sign_closing_transaction(closing_tx);
+ }
+
+ @Override
+ public Result_SignatureNoneZ sign_channel_announcement(UnsignedChannelAnnouncement msg) {
+ return underlying_ck.sign_channel_announcement(msg);
+ }
+
+ @Override
+ public void on_accept(ChannelPublicKeys channel_points, short counterparty_selected_contest_delay, short holder_selected_contest_delay) {
+ underlying_ck.on_accept(channel_points, counterparty_selected_contest_delay, holder_selected_contest_delay);
+ }
+ };
+ ChannelKeys resp = ChannelKeys.new_impl(cki, underlying_ck.get_pubkeys());
+ must_free_objs.add(new WeakReference<>(cki));
+ must_free_objs.add(new WeakReference<>(resp));
+ must_free_objs.add(new WeakReference<>(underlying_ck));
+ return resp;
+ }
+
+ @Override
+ public byte[] get_secure_random_bytes() {
+ return underlying_if.get_secure_random_bytes();
+ }
+ });
+ }
+
+ final Logger logger;
+ final FeeEstimator fee_estimator;
+ final BroadcasterInterface tx_broadcaster;
+ final KeysInterface keys_interface;