8d44de663fa0f7f4a0b2b7beb4b08006ff80c199
[ldk-java] / src / main / java / org / ldk / structs / BaseSign.java
1 package org.ldk.structs;
2
3 import org.ldk.impl.bindings;
4 import org.ldk.enums.*;
5 import org.ldk.util.*;
6 import java.util.Arrays;
7 import javax.annotation.Nullable;
8
9 /**
10  * A trait to sign lightning channel transactions as described in BOLT 3.
11  * 
12  * Signing services could be implemented on a hardware wallet. In this case,
13  * the current Sign would be a front-end on top of a communication
14  * channel connected to your secure device and lightning key material wouldn't
15  * reside on a hot server. Nevertheless, a this deployment would still need
16  * to trust the ChannelManager to avoid loss of funds as this latest component
17  * could ask to sign commitment transaction with HTLCs paying to attacker pubkeys.
18  * 
19  * A more secure iteration would be to use hashlock (or payment points) to pair
20  * invoice/incoming HTLCs with outgoing HTLCs to implement a no-trust-ChannelManager
21  * at the price of more state and computation on the hardware wallet side. In the future,
22  * we are looking forward to design such interface.
23  * 
24  * In any case, ChannelMonitor or fallback watchtowers are always going to be trusted
25  * to act, as liveness and breach reply correctness are always going to be hard requirements
26  * of LN security model, orthogonal of key management issues.
27  */
28 @SuppressWarnings("unchecked") // We correctly assign various generic arrays
29 public class BaseSign extends CommonBase {
30         final bindings.LDKBaseSign bindings_instance;
31         BaseSign(Object _dummy, long ptr) { super(ptr); bindings_instance = null; }
32         private BaseSign(bindings.LDKBaseSign arg, ChannelPublicKeys pubkeys) {
33                 super(bindings.LDKBaseSign_new(arg, pubkeys == null ? 0 : pubkeys.ptr & ~1));
34                 this.ptrs_to.add(arg);
35                 this.ptrs_to.add(pubkeys);
36                 this.bindings_instance = arg;
37         }
38         @Override @SuppressWarnings("deprecation")
39         protected void finalize() throws Throwable {
40                 if (ptr != 0) { bindings.BaseSign_free(ptr); } super.finalize();
41         }
42
43         public static interface BaseSignInterface {
44                 /**
45                  * Gets the per-commitment point for a specific commitment number
46                  * 
47                  * Note that the commitment number starts at (1 << 48) - 1 and counts backwards.
48                  */
49                 byte[] get_per_commitment_point(long idx);
50                 /**
51                  * Gets the commitment secret for a specific commitment number as part of the revocation process
52                  * 
53                  * An external signer implementation should error here if the commitment was already signed
54                  * and should refuse to sign it in the future.
55                  * 
56                  * May be called more than once for the same index.
57                  * 
58                  * Note that the commitment number starts at (1 << 48) - 1 and counts backwards.
59                  */
60                 byte[] release_commitment_secret(long idx);
61                 /**
62                  * Validate the counterparty's signatures on the holder commitment transaction and HTLCs.
63                  * 
64                  * This is required in order for the signer to make sure that releasing a commitment
65                  * secret won't leave us without a broadcastable holder transaction.
66                  * Policy checks should be implemented in this function, including checking the amount
67                  * sent to us and checking the HTLCs.
68                  */
69                 Result_NoneNoneZ validate_holder_commitment(HolderCommitmentTransaction holder_tx);
70                 /**
71                  * Gets an arbitrary identifier describing the set of keys which are provided back to you in
72                  * some SpendableOutputDescriptor types. This should be sufficient to identify this
73                  * Sign object uniquely and lookup or re-derive its keys.
74                  */
75                 byte[] channel_keys_id();
76                 /**
77                  * Create a signature for a counterparty's commitment transaction and associated HTLC transactions.
78                  * 
79                  * Note that if signing fails or is rejected, the channel will be force-closed.
80                  * 
81                  * Policy checks should be implemented in this function, including checking the amount
82                  * sent to us and checking the HTLCs.
83                  */
84                 Result_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment(CommitmentTransaction commitment_tx);
85                 /**
86                  * Validate the counterparty's revocation.
87                  * 
88                  * This is required in order for the signer to make sure that the state has moved
89                  * forward and it is safe to sign the next counterparty commitment.
90                  */
91                 Result_NoneNoneZ validate_counterparty_revocation(long idx, byte[] secret);
92                 /**
93                  * Create a signatures for a holder's commitment transaction and its claiming HTLC transactions.
94                  * This will only ever be called with a non-revoked commitment_tx.  This will be called with the
95                  * latest commitment_tx when we initiate a force-close.
96                  * This will be called with the previous latest, just to get claiming HTLC signatures, if we are
97                  * reacting to a ChannelMonitor replica that decided to broadcast before it had been updated to
98                  * the latest.
99                  * This may be called multiple times for the same transaction.
100                  * 
101                  * An external signer implementation should check that the commitment has not been revoked.
102                  * 
103                  * May return Err if key derivation fails.  Callers, such as ChannelMonitor, will panic in such a case.
104                  */
105                 Result_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htlcs(HolderCommitmentTransaction commitment_tx);
106                 /**
107                  * Create a signature for the given input in a transaction spending an HTLC transaction output
108                  * or a commitment transaction `to_local` output when our counterparty broadcasts an old state.
109                  * 
110                  * A justice transaction may claim multiple outputs at the same time if timelocks are
111                  * similar, but only a signature for the input at index `input` should be signed for here.
112                  * It may be called multiple times for same output(s) if a fee-bump is needed with regards
113                  * to an upcoming timelock expiration.
114                  * 
115                  * Amount is value of the output spent by this input, committed to in the BIP 143 signature.
116                  * 
117                  * per_commitment_key is revocation secret which was provided by our counterparty when they
118                  * revoked the state which they eventually broadcast. It's not a _holder_ secret key and does
119                  * not allow the spending of any funds by itself (you need our holder revocation_secret to do
120                  * so).
121                  */
122                 Result_SignatureNoneZ sign_justice_revoked_output(byte[] justice_tx, long input, long amount, byte[] per_commitment_key);
123                 /**
124                  * Create a signature for the given input in a transaction spending a commitment transaction
125                  * HTLC output when our counterparty broadcasts an old state.
126                  * 
127                  * A justice transaction may claim multiple outputs at the same time if timelocks are
128                  * similar, but only a signature for the input at index `input` should be signed for here.
129                  * It may be called multiple times for same output(s) if a fee-bump is needed with regards
130                  * to an upcoming timelock expiration.
131                  * 
132                  * Amount is value of the output spent by this input, committed to in the BIP 143 signature.
133                  * 
134                  * per_commitment_key is revocation secret which was provided by our counterparty when they
135                  * revoked the state which they eventually broadcast. It's not a _holder_ secret key and does
136                  * not allow the spending of any funds by itself (you need our holder revocation_secret to do
137                  * so).
138                  * 
139                  * htlc holds HTLC elements (hash, timelock), thus changing the format of the witness script
140                  * (which is committed to in the BIP 143 signatures).
141                  */
142                 Result_SignatureNoneZ sign_justice_revoked_htlc(byte[] justice_tx, long input, long amount, byte[] per_commitment_key, HTLCOutputInCommitment htlc);
143                 /**
144                  * Create a signature for a claiming transaction for a HTLC output on a counterparty's commitment
145                  * transaction, either offered or received.
146                  * 
147                  * Such a transaction may claim multiples offered outputs at same time if we know the
148                  * preimage for each when we create it, but only the input at index `input` should be
149                  * signed for here. It may be called multiple times for same output(s) if a fee-bump is
150                  * needed with regards to an upcoming timelock expiration.
151                  * 
152                  * Witness_script is either a offered or received script as defined in BOLT3 for HTLC
153                  * outputs.
154                  * 
155                  * Amount is value of the output spent by this input, committed to in the BIP 143 signature.
156                  * 
157                  * Per_commitment_point is the dynamic point corresponding to the channel state
158                  * detected onchain. It has been generated by our counterparty and is used to derive
159                  * channel state keys, which are then included in the witness script and committed to in the
160                  * BIP 143 signature.
161                  */
162                 Result_SignatureNoneZ sign_counterparty_htlc_transaction(byte[] htlc_tx, long input, long amount, byte[] per_commitment_point, HTLCOutputInCommitment htlc);
163                 /**
164                  * Create a signature for a (proposed) closing transaction.
165                  * 
166                  * Note that, due to rounding, there may be one \"missing\" satoshi, and either party may have
167                  * chosen to forgo their output as dust.
168                  */
169                 Result_SignatureNoneZ sign_closing_transaction(ClosingTransaction closing_tx);
170                 /**
171                  * Signs a channel announcement message with our funding key, proving it comes from one
172                  * of the channel participants.
173                  * 
174                  * Note that if this fails or is rejected, the channel will not be publicly announced and
175                  * our counterparty may (though likely will not) close the channel on us for violating the
176                  * protocol.
177                  */
178                 Result_SignatureNoneZ sign_channel_announcement(UnsignedChannelAnnouncement msg);
179                 /**
180                  * Set the counterparty static channel data, including basepoints,
181                  * counterparty_selected/holder_selected_contest_delay and funding outpoint.
182                  * This is done as soon as the funding outpoint is known.  Since these are static channel data,
183                  * they MUST NOT be allowed to change to different values once set.
184                  * 
185                  * channel_parameters.is_populated() MUST be true.
186                  * 
187                  * We bind holder_selected_contest_delay late here for API convenience.
188                  * 
189                  * Will be called before any signatures are applied.
190                  */
191                 void ready_channel(ChannelTransactionParameters channel_parameters);
192         }
193         private static class LDKBaseSignHolder { BaseSign held; }
194         public static BaseSign new_impl(BaseSignInterface arg, ChannelPublicKeys pubkeys) {
195                 final LDKBaseSignHolder impl_holder = new LDKBaseSignHolder();
196                 impl_holder.held = new BaseSign(new bindings.LDKBaseSign() {
197                         @Override public byte[] get_per_commitment_point(long idx) {
198                                 byte[] ret = arg.get_per_commitment_point(idx);
199                                 return ret;
200                         }
201                         @Override public byte[] release_commitment_secret(long idx) {
202                                 byte[] ret = arg.release_commitment_secret(idx);
203                                 return ret;
204                         }
205                         @Override public long validate_holder_commitment(long holder_tx) {
206                                 HolderCommitmentTransaction holder_tx_hu_conv = new HolderCommitmentTransaction(null, holder_tx);
207                                 Result_NoneNoneZ ret = arg.validate_holder_commitment(holder_tx_hu_conv);
208                                 long result = ret != null ? ret.ptr : 0;
209                                 return result;
210                         }
211                         @Override public byte[] channel_keys_id() {
212                                 byte[] ret = arg.channel_keys_id();
213                                 return ret;
214                         }
215                         @Override public long sign_counterparty_commitment(long commitment_tx) {
216                                 CommitmentTransaction commitment_tx_hu_conv = new CommitmentTransaction(null, commitment_tx);
217                                 Result_C2Tuple_SignatureCVec_SignatureZZNoneZ ret = arg.sign_counterparty_commitment(commitment_tx_hu_conv);
218                                 long result = ret != null ? ret.ptr : 0;
219                                 return result;
220                         }
221                         @Override public long validate_counterparty_revocation(long idx, byte[] secret) {
222                                 Result_NoneNoneZ ret = arg.validate_counterparty_revocation(idx, secret);
223                                 long result = ret != null ? ret.ptr : 0;
224                                 return result;
225                         }
226                         @Override public long sign_holder_commitment_and_htlcs(long commitment_tx) {
227                                 HolderCommitmentTransaction commitment_tx_hu_conv = new HolderCommitmentTransaction(null, commitment_tx);
228                                 Result_C2Tuple_SignatureCVec_SignatureZZNoneZ ret = arg.sign_holder_commitment_and_htlcs(commitment_tx_hu_conv);
229                                 long result = ret != null ? ret.ptr : 0;
230                                 return result;
231                         }
232                         @Override public long sign_justice_revoked_output(byte[] justice_tx, long input, long amount, byte[] per_commitment_key) {
233                                 Result_SignatureNoneZ ret = arg.sign_justice_revoked_output(justice_tx, input, amount, per_commitment_key);
234                                 long result = ret != null ? ret.ptr : 0;
235                                 return result;
236                         }
237                         @Override public long sign_justice_revoked_htlc(byte[] justice_tx, long input, long amount, byte[] per_commitment_key, long htlc) {
238                                 HTLCOutputInCommitment htlc_hu_conv = new HTLCOutputInCommitment(null, htlc);
239                                 Result_SignatureNoneZ ret = arg.sign_justice_revoked_htlc(justice_tx, input, amount, per_commitment_key, htlc_hu_conv);
240                                 long result = ret != null ? ret.ptr : 0;
241                                 return result;
242                         }
243                         @Override public long sign_counterparty_htlc_transaction(byte[] htlc_tx, long input, long amount, byte[] per_commitment_point, long htlc) {
244                                 HTLCOutputInCommitment htlc_hu_conv = new HTLCOutputInCommitment(null, htlc);
245                                 Result_SignatureNoneZ ret = arg.sign_counterparty_htlc_transaction(htlc_tx, input, amount, per_commitment_point, htlc_hu_conv);
246                                 long result = ret != null ? ret.ptr : 0;
247                                 return result;
248                         }
249                         @Override public long sign_closing_transaction(long closing_tx) {
250                                 ClosingTransaction closing_tx_hu_conv = new ClosingTransaction(null, closing_tx);
251                                 Result_SignatureNoneZ ret = arg.sign_closing_transaction(closing_tx_hu_conv);
252                                 long result = ret != null ? ret.ptr : 0;
253                                 return result;
254                         }
255                         @Override public long sign_channel_announcement(long msg) {
256                                 UnsignedChannelAnnouncement msg_hu_conv = new UnsignedChannelAnnouncement(null, msg);
257                                 Result_SignatureNoneZ ret = arg.sign_channel_announcement(msg_hu_conv);
258                                 long result = ret != null ? ret.ptr : 0;
259                                 return result;
260                         }
261                         @Override public void ready_channel(long channel_parameters) {
262                                 ChannelTransactionParameters channel_parameters_hu_conv = new ChannelTransactionParameters(null, channel_parameters);
263                                 arg.ready_channel(channel_parameters_hu_conv);
264                         }
265                 }, pubkeys);
266                 return impl_holder.held;
267         }
268         /**
269          * Gets the per-commitment point for a specific commitment number
270          * 
271          * Note that the commitment number starts at (1 << 48) - 1 and counts backwards.
272          */
273         public byte[] get_per_commitment_point(long idx) {
274                 byte[] ret = bindings.BaseSign_get_per_commitment_point(this.ptr, idx);
275                 return ret;
276         }
277
278         /**
279          * Gets the commitment secret for a specific commitment number as part of the revocation process
280          * 
281          * An external signer implementation should error here if the commitment was already signed
282          * and should refuse to sign it in the future.
283          * 
284          * May be called more than once for the same index.
285          * 
286          * Note that the commitment number starts at (1 << 48) - 1 and counts backwards.
287          */
288         public byte[] release_commitment_secret(long idx) {
289                 byte[] ret = bindings.BaseSign_release_commitment_secret(this.ptr, idx);
290                 return ret;
291         }
292
293         /**
294          * Validate the counterparty's signatures on the holder commitment transaction and HTLCs.
295          * 
296          * This is required in order for the signer to make sure that releasing a commitment
297          * secret won't leave us without a broadcastable holder transaction.
298          * Policy checks should be implemented in this function, including checking the amount
299          * sent to us and checking the HTLCs.
300          */
301         public Result_NoneNoneZ validate_holder_commitment(HolderCommitmentTransaction holder_tx) {
302                 long ret = bindings.BaseSign_validate_holder_commitment(this.ptr, holder_tx == null ? 0 : holder_tx.ptr & ~1);
303                 if (ret < 1024) { return null; }
304                 Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
305                 this.ptrs_to.add(holder_tx);
306                 return ret_hu_conv;
307         }
308
309         /**
310          * Gets an arbitrary identifier describing the set of keys which are provided back to you in
311          * some SpendableOutputDescriptor types. This should be sufficient to identify this
312          * Sign object uniquely and lookup or re-derive its keys.
313          */
314         public byte[] channel_keys_id() {
315                 byte[] ret = bindings.BaseSign_channel_keys_id(this.ptr);
316                 return ret;
317         }
318
319         /**
320          * Create a signature for a counterparty's commitment transaction and associated HTLC transactions.
321          * 
322          * Note that if signing fails or is rejected, the channel will be force-closed.
323          * 
324          * Policy checks should be implemented in this function, including checking the amount
325          * sent to us and checking the HTLCs.
326          */
327         public Result_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment(CommitmentTransaction commitment_tx) {
328                 long ret = bindings.BaseSign_sign_counterparty_commitment(this.ptr, commitment_tx == null ? 0 : commitment_tx.ptr & ~1);
329                 if (ret < 1024) { return null; }
330                 Result_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_hu_conv = Result_C2Tuple_SignatureCVec_SignatureZZNoneZ.constr_from_ptr(ret);
331                 this.ptrs_to.add(commitment_tx);
332                 return ret_hu_conv;
333         }
334
335         /**
336          * Validate the counterparty's revocation.
337          * 
338          * This is required in order for the signer to make sure that the state has moved
339          * forward and it is safe to sign the next counterparty commitment.
340          */
341         public Result_NoneNoneZ validate_counterparty_revocation(long idx, byte[] secret) {
342                 long ret = bindings.BaseSign_validate_counterparty_revocation(this.ptr, idx, secret);
343                 if (ret < 1024) { return null; }
344                 Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
345                 return ret_hu_conv;
346         }
347
348         /**
349          * Create a signatures for a holder's commitment transaction and its claiming HTLC transactions.
350          * This will only ever be called with a non-revoked commitment_tx.  This will be called with the
351          * latest commitment_tx when we initiate a force-close.
352          * This will be called with the previous latest, just to get claiming HTLC signatures, if we are
353          * reacting to a ChannelMonitor replica that decided to broadcast before it had been updated to
354          * the latest.
355          * This may be called multiple times for the same transaction.
356          * 
357          * An external signer implementation should check that the commitment has not been revoked.
358          * 
359          * May return Err if key derivation fails.  Callers, such as ChannelMonitor, will panic in such a case.
360          */
361         public Result_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htlcs(HolderCommitmentTransaction commitment_tx) {
362                 long ret = bindings.BaseSign_sign_holder_commitment_and_htlcs(this.ptr, commitment_tx == null ? 0 : commitment_tx.ptr & ~1);
363                 if (ret < 1024) { return null; }
364                 Result_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_hu_conv = Result_C2Tuple_SignatureCVec_SignatureZZNoneZ.constr_from_ptr(ret);
365                 this.ptrs_to.add(commitment_tx);
366                 return ret_hu_conv;
367         }
368
369         /**
370          * Create a signature for the given input in a transaction spending an HTLC transaction output
371          * or a commitment transaction `to_local` output when our counterparty broadcasts an old state.
372          * 
373          * A justice transaction may claim multiple outputs at the same time if timelocks are
374          * similar, but only a signature for the input at index `input` should be signed for here.
375          * It may be called multiple times for same output(s) if a fee-bump is needed with regards
376          * to an upcoming timelock expiration.
377          * 
378          * Amount is value of the output spent by this input, committed to in the BIP 143 signature.
379          * 
380          * per_commitment_key is revocation secret which was provided by our counterparty when they
381          * revoked the state which they eventually broadcast. It's not a _holder_ secret key and does
382          * not allow the spending of any funds by itself (you need our holder revocation_secret to do
383          * so).
384          */
385         public Result_SignatureNoneZ sign_justice_revoked_output(byte[] justice_tx, long input, long amount, byte[] per_commitment_key) {
386                 long ret = bindings.BaseSign_sign_justice_revoked_output(this.ptr, justice_tx, input, amount, per_commitment_key);
387                 if (ret < 1024) { return null; }
388                 Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
389                 return ret_hu_conv;
390         }
391
392         /**
393          * Create a signature for the given input in a transaction spending a commitment transaction
394          * HTLC output when our counterparty broadcasts an old state.
395          * 
396          * A justice transaction may claim multiple outputs at the same time if timelocks are
397          * similar, but only a signature for the input at index `input` should be signed for here.
398          * It may be called multiple times for same output(s) if a fee-bump is needed with regards
399          * to an upcoming timelock expiration.
400          * 
401          * Amount is value of the output spent by this input, committed to in the BIP 143 signature.
402          * 
403          * per_commitment_key is revocation secret which was provided by our counterparty when they
404          * revoked the state which they eventually broadcast. It's not a _holder_ secret key and does
405          * not allow the spending of any funds by itself (you need our holder revocation_secret to do
406          * so).
407          * 
408          * htlc holds HTLC elements (hash, timelock), thus changing the format of the witness script
409          * (which is committed to in the BIP 143 signatures).
410          */
411         public Result_SignatureNoneZ sign_justice_revoked_htlc(byte[] justice_tx, long input, long amount, byte[] per_commitment_key, HTLCOutputInCommitment htlc) {
412                 long ret = bindings.BaseSign_sign_justice_revoked_htlc(this.ptr, justice_tx, input, amount, per_commitment_key, htlc == null ? 0 : htlc.ptr & ~1);
413                 if (ret < 1024) { return null; }
414                 Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
415                 this.ptrs_to.add(htlc);
416                 return ret_hu_conv;
417         }
418
419         /**
420          * Create a signature for a claiming transaction for a HTLC output on a counterparty's commitment
421          * transaction, either offered or received.
422          * 
423          * Such a transaction may claim multiples offered outputs at same time if we know the
424          * preimage for each when we create it, but only the input at index `input` should be
425          * signed for here. It may be called multiple times for same output(s) if a fee-bump is
426          * needed with regards to an upcoming timelock expiration.
427          * 
428          * Witness_script is either a offered or received script as defined in BOLT3 for HTLC
429          * outputs.
430          * 
431          * Amount is value of the output spent by this input, committed to in the BIP 143 signature.
432          * 
433          * Per_commitment_point is the dynamic point corresponding to the channel state
434          * detected onchain. It has been generated by our counterparty and is used to derive
435          * channel state keys, which are then included in the witness script and committed to in the
436          * BIP 143 signature.
437          */
438         public Result_SignatureNoneZ sign_counterparty_htlc_transaction(byte[] htlc_tx, long input, long amount, byte[] per_commitment_point, HTLCOutputInCommitment htlc) {
439                 long ret = bindings.BaseSign_sign_counterparty_htlc_transaction(this.ptr, htlc_tx, input, amount, per_commitment_point, htlc == null ? 0 : htlc.ptr & ~1);
440                 if (ret < 1024) { return null; }
441                 Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
442                 this.ptrs_to.add(htlc);
443                 return ret_hu_conv;
444         }
445
446         /**
447          * Create a signature for a (proposed) closing transaction.
448          * 
449          * Note that, due to rounding, there may be one \"missing\" satoshi, and either party may have
450          * chosen to forgo their output as dust.
451          */
452         public Result_SignatureNoneZ sign_closing_transaction(ClosingTransaction closing_tx) {
453                 long ret = bindings.BaseSign_sign_closing_transaction(this.ptr, closing_tx == null ? 0 : closing_tx.ptr & ~1);
454                 if (ret < 1024) { return null; }
455                 Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
456                 this.ptrs_to.add(closing_tx);
457                 return ret_hu_conv;
458         }
459
460         /**
461          * Signs a channel announcement message with our funding key, proving it comes from one
462          * of the channel participants.
463          * 
464          * Note that if this fails or is rejected, the channel will not be publicly announced and
465          * our counterparty may (though likely will not) close the channel on us for violating the
466          * protocol.
467          */
468         public Result_SignatureNoneZ sign_channel_announcement(UnsignedChannelAnnouncement msg) {
469                 long ret = bindings.BaseSign_sign_channel_announcement(this.ptr, msg == null ? 0 : msg.ptr & ~1);
470                 if (ret < 1024) { return null; }
471                 Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
472                 this.ptrs_to.add(msg);
473                 return ret_hu_conv;
474         }
475
476         /**
477          * Set the counterparty static channel data, including basepoints,
478          * counterparty_selected/holder_selected_contest_delay and funding outpoint.
479          * This is done as soon as the funding outpoint is known.  Since these are static channel data,
480          * they MUST NOT be allowed to change to different values once set.
481          * 
482          * channel_parameters.is_populated() MUST be true.
483          * 
484          * We bind holder_selected_contest_delay late here for API convenience.
485          * 
486          * Will be called before any signatures are applied.
487          */
488         public void ready_channel(ChannelTransactionParameters channel_parameters) {
489                 bindings.BaseSign_ready_channel(this.ptr, channel_parameters == null ? 0 : channel_parameters.ptr & ~1);
490                 this.ptrs_to.add(channel_parameters);
491         }
492
493         /**
494          * Frees any resources associated with this object given its this_arg pointer.
495          * Does not need to free the outer struct containing function pointers and may be NULL is no resources need to be freed.
496          */
497         public ChannelPublicKeys get_pubkeys() {
498                 long ret = bindings.BaseSign_get_pubkeys(this.ptr);
499                 if (ret < 1024) { return null; }
500                 ChannelPublicKeys ret_hu_conv = new ChannelPublicKeys(null, ret);
501                 ret_hu_conv.ptrs_to.add(this);
502                 return ret_hu_conv;
503         }
504
505 }