Update auto-generated bindings to 0.0.102
[ldk-java] / src / main / java / org / ldk / structs / Event.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 /**
11  * An Event which you should probably take some action in response to.
12  * 
13  * Note that while Writeable and Readable are implemented for Event, you probably shouldn't use
14  * them directly as they don't round-trip exactly (for example FundingGenerationReady is never
15  * written as it makes no sense to respond to it after reconnecting to peers).
16  */
17 @SuppressWarnings("unchecked") // We correctly assign various generic arrays
18 public class Event extends CommonBase {
19         private Event(Object _dummy, long ptr) { super(ptr); }
20         @Override @SuppressWarnings("deprecation")
21         protected void finalize() throws Throwable {
22                 super.finalize();
23                 if (ptr != 0) { bindings.Event_free(ptr); }
24         }
25         static Event constr_from_ptr(long ptr) {
26                 bindings.LDKEvent raw_val = bindings.LDKEvent_ref_from_ptr(ptr);
27                 if (raw_val.getClass() == bindings.LDKEvent.FundingGenerationReady.class) {
28                         return new FundingGenerationReady(ptr, (bindings.LDKEvent.FundingGenerationReady)raw_val);
29                 }
30                 if (raw_val.getClass() == bindings.LDKEvent.PaymentReceived.class) {
31                         return new PaymentReceived(ptr, (bindings.LDKEvent.PaymentReceived)raw_val);
32                 }
33                 if (raw_val.getClass() == bindings.LDKEvent.PaymentSent.class) {
34                         return new PaymentSent(ptr, (bindings.LDKEvent.PaymentSent)raw_val);
35                 }
36                 if (raw_val.getClass() == bindings.LDKEvent.PaymentPathFailed.class) {
37                         return new PaymentPathFailed(ptr, (bindings.LDKEvent.PaymentPathFailed)raw_val);
38                 }
39                 if (raw_val.getClass() == bindings.LDKEvent.PendingHTLCsForwardable.class) {
40                         return new PendingHTLCsForwardable(ptr, (bindings.LDKEvent.PendingHTLCsForwardable)raw_val);
41                 }
42                 if (raw_val.getClass() == bindings.LDKEvent.SpendableOutputs.class) {
43                         return new SpendableOutputs(ptr, (bindings.LDKEvent.SpendableOutputs)raw_val);
44                 }
45                 if (raw_val.getClass() == bindings.LDKEvent.PaymentForwarded.class) {
46                         return new PaymentForwarded(ptr, (bindings.LDKEvent.PaymentForwarded)raw_val);
47                 }
48                 if (raw_val.getClass() == bindings.LDKEvent.ChannelClosed.class) {
49                         return new ChannelClosed(ptr, (bindings.LDKEvent.ChannelClosed)raw_val);
50                 }
51                 if (raw_val.getClass() == bindings.LDKEvent.DiscardFunding.class) {
52                         return new DiscardFunding(ptr, (bindings.LDKEvent.DiscardFunding)raw_val);
53                 }
54                 assert false; return null; // Unreachable without extending the (internal) bindings interface
55         }
56
57         public final static class FundingGenerationReady extends Event {
58                 /**
59                  * The random channel_id we picked which you'll need to pass into
60                  * ChannelManager::funding_transaction_generated.
61                 */
62                 public final byte[] temporary_channel_id;
63                 /**
64                  * The value, in satoshis, that the output should have.
65                 */
66                 public final long channel_value_satoshis;
67                 /**
68                  * The script which should be used in the transaction output.
69                 */
70                 public final byte[] output_script;
71                 /**
72                  * The `user_channel_id` value passed in to [`ChannelManager::create_channel`], or 0 for
73                  * an inbound channel.
74                  * 
75                  * [`ChannelManager::create_channel`]: crate::ln::channelmanager::ChannelManager::create_channel
76                 */
77                 public final long user_channel_id;
78                 private FundingGenerationReady(long ptr, bindings.LDKEvent.FundingGenerationReady obj) {
79                         super(null, ptr);
80                         this.temporary_channel_id = obj.temporary_channel_id;
81                         this.channel_value_satoshis = obj.channel_value_satoshis;
82                         this.output_script = obj.output_script;
83                         this.user_channel_id = obj.user_channel_id;
84                 }
85         }
86         public final static class PaymentReceived extends Event {
87                 /**
88                  * The hash for which the preimage should be handed to the ChannelManager.
89                 */
90                 public final byte[] payment_hash;
91                 /**
92                  * The value, in thousandths of a satoshi, that this payment is for.
93                 */
94                 public final long amt;
95                 /**
96                  * Information for claiming this received payment, based on whether the purpose of the
97                  * payment is to pay an invoice or to send a spontaneous payment.
98                 */
99                 public final PaymentPurpose purpose;
100                 private PaymentReceived(long ptr, bindings.LDKEvent.PaymentReceived obj) {
101                         super(null, ptr);
102                         this.payment_hash = obj.payment_hash;
103                         this.amt = obj.amt;
104                         long purpose = obj.purpose;
105                         PaymentPurpose purpose_hu_conv = PaymentPurpose.constr_from_ptr(purpose);
106                         purpose_hu_conv.ptrs_to.add(this);
107                         this.purpose = purpose_hu_conv;
108                 }
109         }
110         public final static class PaymentSent extends Event {
111                 /**
112                  * The preimage to the hash given to ChannelManager::send_payment.
113                  * Note that this serves as a payment receipt, if you wish to have such a thing, you must
114                  * store it somehow!
115                 */
116                 public final byte[] payment_preimage;
117                 /**
118                  * The hash which was given to [`ChannelManager::send_payment`].
119                  * 
120                  * [`ChannelManager::send_payment`]: crate::ln::channelmanager::ChannelManager::send_payment
121                 */
122                 public final byte[] payment_hash;
123                 private PaymentSent(long ptr, bindings.LDKEvent.PaymentSent obj) {
124                         super(null, ptr);
125                         this.payment_preimage = obj.payment_preimage;
126                         this.payment_hash = obj.payment_hash;
127                 }
128         }
129         public final static class PaymentPathFailed extends Event {
130                 /**
131                  * The hash which was given to ChannelManager::send_payment.
132                 */
133                 public final byte[] payment_hash;
134                 /**
135                  * Indicates the payment was rejected for some reason by the recipient. This implies that
136                  * the payment has failed, not just the route in question. If this is not set, you may
137                  * retry the payment via a different route.
138                 */
139                 public final boolean rejected_by_dest;
140                 /**
141                  * Any failure information conveyed via the Onion return packet by a node along the failed
142                  * payment route.
143                  * 
144                  * Should be applied to the [`NetworkGraph`] so that routing decisions can take into
145                  * account the update. [`NetGraphMsgHandler`] is capable of doing this.
146                  * 
147                  * [`NetworkGraph`]: crate::routing::network_graph::NetworkGraph
148                  * [`NetGraphMsgHandler`]: crate::routing::network_graph::NetGraphMsgHandler
149                 */
150                 public final Option_NetworkUpdateZ network_update;
151                 /**
152                  * For both single-path and multi-path payments, this is set if all paths of the payment have
153                  * failed. This will be set to false if (1) this is an MPP payment and (2) other parts of the
154                  * larger MPP payment were still in flight when this event was generated.
155                 */
156                 public final boolean all_paths_failed;
157                 /**
158                  * The payment path that failed.
159                 */
160                 public final RouteHop[] path;
161                 /**
162                  * The channel responsible for the failed payment path.
163                  * 
164                  * If this is `Some`, then the corresponding channel should be avoided when the payment is
165                  * retried. May be `None` for older [`Event`] serializations.
166                 */
167                 public final Option_u64Z short_channel_id;
168                 private PaymentPathFailed(long ptr, bindings.LDKEvent.PaymentPathFailed obj) {
169                         super(null, ptr);
170                         this.payment_hash = obj.payment_hash;
171                         this.rejected_by_dest = obj.rejected_by_dest;
172                         long network_update = obj.network_update;
173                         Option_NetworkUpdateZ network_update_hu_conv = Option_NetworkUpdateZ.constr_from_ptr(network_update);
174                         network_update_hu_conv.ptrs_to.add(this);
175                         this.network_update = network_update_hu_conv;
176                         this.all_paths_failed = obj.all_paths_failed;
177                         long[] path = obj.path;
178                         RouteHop[] path_conv_10_arr = new RouteHop[path.length];
179                         for (int k = 0; k < path.length; k++) {
180                                 long path_conv_10 = path[k];
181                                 RouteHop path_conv_10_hu_conv = new RouteHop(null, path_conv_10);
182                                 path_conv_10_hu_conv.ptrs_to.add(this);
183                                 path_conv_10_arr[k] = path_conv_10_hu_conv;
184                         }
185                         this.path = path_conv_10_arr;
186                         long short_channel_id = obj.short_channel_id;
187                         Option_u64Z short_channel_id_hu_conv = Option_u64Z.constr_from_ptr(short_channel_id);
188                         short_channel_id_hu_conv.ptrs_to.add(this);
189                         this.short_channel_id = short_channel_id_hu_conv;
190                 }
191         }
192         public final static class PendingHTLCsForwardable extends Event {
193                 /**
194                  * The minimum amount of time that should be waited prior to calling
195                  * process_pending_htlc_forwards. To increase the effort required to correlate payments,
196                  * you should wait a random amount of time in roughly the range (now + time_forwardable,
197                  * now + 5*time_forwardable).
198                 */
199                 public final long time_forwardable;
200                 private PendingHTLCsForwardable(long ptr, bindings.LDKEvent.PendingHTLCsForwardable obj) {
201                         super(null, ptr);
202                         this.time_forwardable = obj.time_forwardable;
203                 }
204         }
205         public final static class SpendableOutputs extends Event {
206                 /**
207                  * The outputs which you should store as spendable by you.
208                 */
209                 public final SpendableOutputDescriptor[] outputs;
210                 private SpendableOutputs(long ptr, bindings.LDKEvent.SpendableOutputs obj) {
211                         super(null, ptr);
212                         long[] outputs = obj.outputs;
213                         SpendableOutputDescriptor[] outputs_conv_27_arr = new SpendableOutputDescriptor[outputs.length];
214                         for (int b = 0; b < outputs.length; b++) {
215                                 long outputs_conv_27 = outputs[b];
216                                 SpendableOutputDescriptor outputs_conv_27_hu_conv = SpendableOutputDescriptor.constr_from_ptr(outputs_conv_27);
217                                 outputs_conv_27_hu_conv.ptrs_to.add(this);
218                                 outputs_conv_27_arr[b] = outputs_conv_27_hu_conv;
219                         }
220                         this.outputs = outputs_conv_27_arr;
221                 }
222         }
223         public final static class PaymentForwarded extends Event {
224                 /**
225                  * The fee, in milli-satoshis, which was earned as a result of the payment.
226                  * 
227                  * Note that if we force-closed the channel over which we forwarded an HTLC while the HTLC
228                  * was pending, the amount the next hop claimed will have been rounded down to the nearest
229                  * whole satoshi. Thus, the fee calculated here may be higher than expected as we still
230                  * claimed the full value in millisatoshis from the source. In this case,
231                  * `claim_from_onchain_tx` will be set.
232                  * 
233                  * If the channel which sent us the payment has been force-closed, we will claim the funds
234                  * via an on-chain transaction. In that case we do not yet know the on-chain transaction
235                  * fees which we will spend and will instead set this to `None`. It is possible duplicate
236                  * `PaymentForwarded` events are generated for the same payment iff `fee_earned_msat` is
237                  * `None`.
238                 */
239                 public final Option_u64Z fee_earned_msat;
240                 /**
241                  * If this is `true`, the forwarded HTLC was claimed by our counterparty via an on-chain
242                  * transaction.
243                 */
244                 public final boolean claim_from_onchain_tx;
245                 private PaymentForwarded(long ptr, bindings.LDKEvent.PaymentForwarded obj) {
246                         super(null, ptr);
247                         long fee_earned_msat = obj.fee_earned_msat;
248                         Option_u64Z fee_earned_msat_hu_conv = Option_u64Z.constr_from_ptr(fee_earned_msat);
249                         fee_earned_msat_hu_conv.ptrs_to.add(this);
250                         this.fee_earned_msat = fee_earned_msat_hu_conv;
251                         this.claim_from_onchain_tx = obj.claim_from_onchain_tx;
252                 }
253         }
254         public final static class ChannelClosed extends Event {
255                 /**
256                  * The channel_id of the channel which has been closed. Note that on-chain transactions
257                  * resolving the channel are likely still awaiting confirmation.
258                 */
259                 public final byte[] channel_id;
260                 /**
261                  * The `user_channel_id` value passed in to [`ChannelManager::create_channel`], or 0 for
262                  * an inbound channel. This will always be zero for objects serialized with LDK versions
263                  * prior to 0.0.102.
264                  * 
265                  * [`ChannelManager::create_channel`]: crate::ln::channelmanager::ChannelManager::create_channel
266                 */
267                 public final long user_channel_id;
268                 /**
269                  * The reason the channel was closed.
270                 */
271                 public final ClosureReason reason;
272                 private ChannelClosed(long ptr, bindings.LDKEvent.ChannelClosed obj) {
273                         super(null, ptr);
274                         this.channel_id = obj.channel_id;
275                         this.user_channel_id = obj.user_channel_id;
276                         long reason = obj.reason;
277                         ClosureReason reason_hu_conv = ClosureReason.constr_from_ptr(reason);
278                         reason_hu_conv.ptrs_to.add(this);
279                         this.reason = reason_hu_conv;
280                 }
281         }
282         public final static class DiscardFunding extends Event {
283                 /**
284                  * The channel_id of the channel which has been closed.
285                 */
286                 public final byte[] channel_id;
287                 /**
288                  * The full transaction received from the user
289                 */
290                 public final byte[] transaction;
291                 private DiscardFunding(long ptr, bindings.LDKEvent.DiscardFunding obj) {
292                         super(null, ptr);
293                         this.channel_id = obj.channel_id;
294                         this.transaction = obj.transaction;
295                 }
296         }
297         /**
298          * Creates a copy of the Event
299          */
300         public Event clone() {
301                 long ret = bindings.Event_clone(this.ptr);
302                 if (ret >= 0 && ret < 1024) { return null; }
303                 Event ret_hu_conv = Event.constr_from_ptr(ret);
304                 ret_hu_conv.ptrs_to.add(this);
305                 return ret_hu_conv;
306         }
307
308         /**
309          * Utility method to constructs a new FundingGenerationReady-variant Event
310          */
311         public static Event funding_generation_ready(byte[] temporary_channel_id, long channel_value_satoshis, byte[] output_script, long user_channel_id) {
312                 long ret = bindings.Event_funding_generation_ready(temporary_channel_id, channel_value_satoshis, output_script, user_channel_id);
313                 if (ret >= 0 && ret < 1024) { return null; }
314                 Event ret_hu_conv = Event.constr_from_ptr(ret);
315                 ret_hu_conv.ptrs_to.add(ret_hu_conv);
316                 return ret_hu_conv;
317         }
318
319         /**
320          * Utility method to constructs a new PaymentReceived-variant Event
321          */
322         public static Event payment_received(byte[] payment_hash, long amt, PaymentPurpose purpose) {
323                 long ret = bindings.Event_payment_received(payment_hash, amt, purpose.ptr);
324                 if (ret >= 0 && ret < 1024) { return null; }
325                 Event ret_hu_conv = Event.constr_from_ptr(ret);
326                 ret_hu_conv.ptrs_to.add(ret_hu_conv);
327                 return ret_hu_conv;
328         }
329
330         /**
331          * Utility method to constructs a new PaymentSent-variant Event
332          */
333         public static Event payment_sent(byte[] payment_preimage, byte[] payment_hash) {
334                 long ret = bindings.Event_payment_sent(payment_preimage, payment_hash);
335                 if (ret >= 0 && ret < 1024) { return null; }
336                 Event ret_hu_conv = Event.constr_from_ptr(ret);
337                 ret_hu_conv.ptrs_to.add(ret_hu_conv);
338                 return ret_hu_conv;
339         }
340
341         /**
342          * Utility method to constructs a new PaymentPathFailed-variant Event
343          */
344         public static Event payment_path_failed(byte[] payment_hash, boolean rejected_by_dest, Option_NetworkUpdateZ network_update, boolean all_paths_failed, RouteHop[] path, Option_u64Z short_channel_id) {
345                 long ret = bindings.Event_payment_path_failed(payment_hash, rejected_by_dest, network_update.ptr, all_paths_failed, path != null ? Arrays.stream(path).mapToLong(path_conv_10 -> path_conv_10 == null ? 0 : path_conv_10.ptr & ~1).toArray() : null, short_channel_id.ptr);
346                 if (ret >= 0 && ret < 1024) { return null; }
347                 Event ret_hu_conv = Event.constr_from_ptr(ret);
348                 ret_hu_conv.ptrs_to.add(ret_hu_conv);
349                 return ret_hu_conv;
350         }
351
352         /**
353          * Utility method to constructs a new PendingHTLCsForwardable-variant Event
354          */
355         public static Event pending_htlcs_forwardable(long time_forwardable) {
356                 long ret = bindings.Event_pending_htlcs_forwardable(time_forwardable);
357                 if (ret >= 0 && ret < 1024) { return null; }
358                 Event ret_hu_conv = Event.constr_from_ptr(ret);
359                 ret_hu_conv.ptrs_to.add(ret_hu_conv);
360                 return ret_hu_conv;
361         }
362
363         /**
364          * Utility method to constructs a new SpendableOutputs-variant Event
365          */
366         public static Event spendable_outputs(SpendableOutputDescriptor[] outputs) {
367                 long ret = bindings.Event_spendable_outputs(outputs != null ? Arrays.stream(outputs).mapToLong(outputs_conv_27 -> outputs_conv_27.ptr).toArray() : null);
368                 if (ret >= 0 && ret < 1024) { return null; }
369                 Event ret_hu_conv = Event.constr_from_ptr(ret);
370                 ret_hu_conv.ptrs_to.add(ret_hu_conv);
371                 return ret_hu_conv;
372         }
373
374         /**
375          * Utility method to constructs a new PaymentForwarded-variant Event
376          */
377         public static Event payment_forwarded(Option_u64Z fee_earned_msat, boolean claim_from_onchain_tx) {
378                 long ret = bindings.Event_payment_forwarded(fee_earned_msat.ptr, claim_from_onchain_tx);
379                 if (ret >= 0 && ret < 1024) { return null; }
380                 Event ret_hu_conv = Event.constr_from_ptr(ret);
381                 ret_hu_conv.ptrs_to.add(ret_hu_conv);
382                 return ret_hu_conv;
383         }
384
385         /**
386          * Utility method to constructs a new ChannelClosed-variant Event
387          */
388         public static Event channel_closed(byte[] channel_id, long user_channel_id, ClosureReason reason) {
389                 long ret = bindings.Event_channel_closed(channel_id, user_channel_id, reason.ptr);
390                 if (ret >= 0 && ret < 1024) { return null; }
391                 Event ret_hu_conv = Event.constr_from_ptr(ret);
392                 ret_hu_conv.ptrs_to.add(ret_hu_conv);
393                 return ret_hu_conv;
394         }
395
396         /**
397          * Utility method to constructs a new DiscardFunding-variant Event
398          */
399         public static Event discard_funding(byte[] channel_id, byte[] transaction) {
400                 long ret = bindings.Event_discard_funding(channel_id, transaction);
401                 if (ret >= 0 && ret < 1024) { return null; }
402                 Event ret_hu_conv = Event.constr_from_ptr(ret);
403                 ret_hu_conv.ptrs_to.add(ret_hu_conv);
404                 return ret_hu_conv;
405         }
406
407         /**
408          * Serialize the Event object into a byte array which can be read by Event_read
409          */
410         public byte[] write() {
411                 byte[] ret = bindings.Event_write(this.ptr);
412                 return ret;
413         }
414
415 }