Merge pull request #113 from TheBlueMatt/main v0.0.110.1
authorMatt Corallo <649246+TheBlueMatt@users.noreply.github.com>
Sat, 6 Aug 2022 00:25:08 +0000 (00:25 +0000)
committerGitHub <noreply@github.com>
Sat, 6 Aug 2022 00:25:08 +0000 (00:25 +0000)
Update to latest LDK-C-Bindings and fix assorted TS bugs

39 files changed:
gen_type_mapping.py
genbindings.sh
src/main/java/org/ldk/impl/bindings.java
src/main/java/org/ldk/structs/CommitmentSigned.java
src/main/java/org/ldk/structs/DelayedPaymentOutputDescriptor.java
src/main/java/org/ldk/structs/HolderCommitmentTransaction.java
src/main/java/org/ldk/structs/NodeAnnouncementInfo.java
src/main/java/org/ldk/structs/NodeInfo.java
src/main/java/org/ldk/structs/PaymentParameters.java
src/main/java/org/ldk/structs/QueryShortChannelIds.java
src/main/java/org/ldk/structs/ReadOnlyNetworkGraph.java
src/main/java/org/ldk/structs/ReplyChannelRange.java
src/main/java/org/ldk/structs/StaticPaymentOutputDescriptor.java
src/main/java/org/ldk/structs/UnsignedChannelUpdate.java
src/main/java/org/ldk/structs/UnsignedNodeAnnouncement.java
src/main/jni/bindings.c
src/main/jni/bindings.c.body
src/main/jni/org_ldk_impl_bindings.h
ts/bindings.c
ts/bindings.c.body
ts/bindings.mts
ts/js-wasm.h
ts/structs/CommitmentSigned.mts
ts/structs/CommonBase.mts
ts/structs/DelayedPaymentOutputDescriptor.mts
ts/structs/HolderCommitmentTransaction.mts
ts/structs/LockedChannelMonitor.mts
ts/structs/NodeAnnouncementInfo.mts
ts/structs/NodeInfo.mts
ts/structs/PaymentParameters.mts
ts/structs/QueryShortChannelIds.mts
ts/structs/ReadOnlyNetworkGraph.mts
ts/structs/ReplyChannelRange.mts
ts/structs/StaticPaymentOutputDescriptor.mts
ts/structs/TxOut.mts
ts/structs/UnsignedChannelUpdate.mts
ts/structs/UnsignedNodeAnnouncement.mts
ts/test/tests.mts
typescript_strings.py

index 2ed6faa375f9d70ebbdbd985495a66e7c9dbc1a6..8dd7c6cafe452b09b52b91bb83ee91e6a3a5b446 100644 (file)
@@ -187,8 +187,6 @@ class TypeMappingGenerator:
                     if is_nullable:
                         ret_conv = (ret_conv[0], ret_conv[1] + "\n}")
 
-                to_hu_conv = None
-                to_hu_conv_name = None
                 if subty.to_hu_conv is not None:
                     to_hu_conv = self.consts.var_decl_statement(self.consts.c_type_map["uint32_t"][0], conv_name + "_len", self.consts.get_java_arr_len(arr_name)) + ";\n"
                     to_hu_conv += self.consts.var_decl_statement(ty_info.java_hu_ty, conv_name + "_arr", self.consts.constr_hu_array(ty_info, conv_name + "_len"))
@@ -200,6 +198,12 @@ class TypeMappingGenerator:
                     if cleanup is not None:
                         to_hu_conv += "\n" + cleanup
                     to_hu_conv_name = conv_name + "_arr"
+                else:
+                    to_hu_conv = self.consts.primitive_arr_to_hu(ty_info.subty, None, arr_name, arr_name + "_conv")
+                    if to_hu_conv is not None:
+                        to_hu_conv_name = arr_name + "_conv"
+                    else:
+                        to_hu_conv_name = None
                 from_hu_conv = self.consts.primitive_arr_from_hu(ty_info.subty, None, arr_name)
                 if subty.from_hu_conv is not None:
                     hu_conv_b = ""
index 51c50feb6194cf809f7198d9bed799c553dd218e..491e1d425397e7f3e1d40340d249f4ca10e6c9b4 100755 (executable)
@@ -237,9 +237,9 @@ else
                        NODE_V="$(node --version)"
                        if [ "${NODE_V:1:2}" -gt 14 ]; then
                                cd ../ts
-                               node test/node.mjs
+                               node --stack_trace_limit=200 --trace-uncaught test/node.mjs
                                cd ../node-net
-                               node test/test.mjs
+                               node --stack_trace_limit=200 --trace-uncaught test/test.mjs
                        fi
                fi
        fi
index db55dbe371f433a10484fadcac2b73bda339ff8f..5c9e545167ba4e61bb8cefea9e8e8675c772ada2 100644 (file)
@@ -4621,6 +4621,8 @@ public class bindings {
        public static native short DelayedPaymentOutputDescriptor_get_to_self_delay(long this_ptr);
        // void DelayedPaymentOutputDescriptor_set_to_self_delay(struct LDKDelayedPaymentOutputDescriptor *NONNULL_PTR this_ptr, uint16_t val);
        public static native void DelayedPaymentOutputDescriptor_set_to_self_delay(long this_ptr, short val);
+       // struct LDKTxOut DelayedPaymentOutputDescriptor_get_output(const struct LDKDelayedPaymentOutputDescriptor *NONNULL_PTR this_ptr);
+       public static native long DelayedPaymentOutputDescriptor_get_output(long this_ptr);
        // void DelayedPaymentOutputDescriptor_set_output(struct LDKDelayedPaymentOutputDescriptor *NONNULL_PTR this_ptr, struct LDKTxOut val);
        public static native void DelayedPaymentOutputDescriptor_set_output(long this_ptr, long val);
        // struct LDKPublicKey DelayedPaymentOutputDescriptor_get_revocation_pubkey(const struct LDKDelayedPaymentOutputDescriptor *NONNULL_PTR this_ptr);
@@ -4651,6 +4653,8 @@ public class bindings {
        public static native long StaticPaymentOutputDescriptor_get_outpoint(long this_ptr);
        // void StaticPaymentOutputDescriptor_set_outpoint(struct LDKStaticPaymentOutputDescriptor *NONNULL_PTR this_ptr, struct LDKOutPoint val);
        public static native void StaticPaymentOutputDescriptor_set_outpoint(long this_ptr, long val);
+       // struct LDKTxOut StaticPaymentOutputDescriptor_get_output(const struct LDKStaticPaymentOutputDescriptor *NONNULL_PTR this_ptr);
+       public static native long StaticPaymentOutputDescriptor_get_output(long this_ptr);
        // void StaticPaymentOutputDescriptor_set_output(struct LDKStaticPaymentOutputDescriptor *NONNULL_PTR this_ptr, struct LDKTxOut val);
        public static native void StaticPaymentOutputDescriptor_set_output(long this_ptr, long val);
        // const uint8_t (*StaticPaymentOutputDescriptor_get_channel_keys_id(const struct LDKStaticPaymentOutputDescriptor *NONNULL_PTR this_ptr))[32];
@@ -5561,6 +5565,8 @@ public class bindings {
        public static native byte[] CommitmentSigned_get_signature(long this_ptr);
        // void CommitmentSigned_set_signature(struct LDKCommitmentSigned *NONNULL_PTR this_ptr, struct LDKSignature val);
        public static native void CommitmentSigned_set_signature(long this_ptr, byte[] val);
+       // struct LDKCVec_SignatureZ CommitmentSigned_get_htlc_signatures(const struct LDKCommitmentSigned *NONNULL_PTR this_ptr);
+       public static native byte[][] CommitmentSigned_get_htlc_signatures(long this_ptr);
        // void CommitmentSigned_set_htlc_signatures(struct LDKCommitmentSigned *NONNULL_PTR this_ptr, struct LDKCVec_SignatureZ val);
        public static native void CommitmentSigned_set_htlc_signatures(long this_ptr, byte[][] val);
        // MUST_USE_RES struct LDKCommitmentSigned CommitmentSigned_new(struct LDKThirtyTwoBytes channel_id_arg, struct LDKSignature signature_arg, struct LDKCVec_SignatureZ htlc_signatures_arg);
@@ -5705,6 +5711,8 @@ public class bindings {
        public static native byte[] UnsignedNodeAnnouncement_get_alias(long this_ptr);
        // void UnsignedNodeAnnouncement_set_alias(struct LDKUnsignedNodeAnnouncement *NONNULL_PTR this_ptr, struct LDKThirtyTwoBytes val);
        public static native void UnsignedNodeAnnouncement_set_alias(long this_ptr, byte[] val);
+       // struct LDKCVec_NetAddressZ UnsignedNodeAnnouncement_get_addresses(const struct LDKUnsignedNodeAnnouncement *NONNULL_PTR this_ptr);
+       public static native long[] UnsignedNodeAnnouncement_get_addresses(long this_ptr);
        // void UnsignedNodeAnnouncement_set_addresses(struct LDKUnsignedNodeAnnouncement *NONNULL_PTR this_ptr, struct LDKCVec_NetAddressZ val);
        public static native void UnsignedNodeAnnouncement_set_addresses(long this_ptr, long[] val);
        // uintptr_t UnsignedNodeAnnouncement_clone_ptr(LDKUnsignedNodeAnnouncement *NONNULL_PTR arg);
@@ -5827,6 +5835,8 @@ public class bindings {
        public static native int UnsignedChannelUpdate_get_fee_proportional_millionths(long this_ptr);
        // void UnsignedChannelUpdate_set_fee_proportional_millionths(struct LDKUnsignedChannelUpdate *NONNULL_PTR this_ptr, uint32_t val);
        public static native void UnsignedChannelUpdate_set_fee_proportional_millionths(long this_ptr, int val);
+       // struct LDKCVec_u8Z UnsignedChannelUpdate_get_excess_data(const struct LDKUnsignedChannelUpdate *NONNULL_PTR this_ptr);
+       public static native byte[] UnsignedChannelUpdate_get_excess_data(long this_ptr);
        // void UnsignedChannelUpdate_set_excess_data(struct LDKUnsignedChannelUpdate *NONNULL_PTR this_ptr, struct LDKCVec_u8Z val);
        public static native void UnsignedChannelUpdate_set_excess_data(long this_ptr, byte[] val);
        // MUST_USE_RES struct LDKUnsignedChannelUpdate UnsignedChannelUpdate_new(struct LDKThirtyTwoBytes chain_hash_arg, uint64_t short_channel_id_arg, uint32_t timestamp_arg, uint8_t flags_arg, uint16_t cltv_expiry_delta_arg, uint64_t htlc_minimum_msat_arg, uint64_t htlc_maximum_msat_arg, uint32_t fee_base_msat_arg, uint32_t fee_proportional_millionths_arg, struct LDKCVec_u8Z excess_data_arg);
@@ -5889,6 +5899,8 @@ public class bindings {
        public static native boolean ReplyChannelRange_get_sync_complete(long this_ptr);
        // void ReplyChannelRange_set_sync_complete(struct LDKReplyChannelRange *NONNULL_PTR this_ptr, bool val);
        public static native void ReplyChannelRange_set_sync_complete(long this_ptr, boolean val);
+       // struct LDKCVec_u64Z ReplyChannelRange_get_short_channel_ids(const struct LDKReplyChannelRange *NONNULL_PTR this_ptr);
+       public static native long[] ReplyChannelRange_get_short_channel_ids(long this_ptr);
        // void ReplyChannelRange_set_short_channel_ids(struct LDKReplyChannelRange *NONNULL_PTR this_ptr, struct LDKCVec_u64Z val);
        public static native void ReplyChannelRange_set_short_channel_ids(long this_ptr, long[] val);
        // MUST_USE_RES struct LDKReplyChannelRange ReplyChannelRange_new(struct LDKThirtyTwoBytes chain_hash_arg, uint32_t first_blocknum_arg, uint32_t number_of_blocks_arg, bool sync_complete_arg, struct LDKCVec_u64Z short_channel_ids_arg);
@@ -5903,6 +5915,8 @@ public class bindings {
        public static native byte[] QueryShortChannelIds_get_chain_hash(long this_ptr);
        // void QueryShortChannelIds_set_chain_hash(struct LDKQueryShortChannelIds *NONNULL_PTR this_ptr, struct LDKThirtyTwoBytes val);
        public static native void QueryShortChannelIds_set_chain_hash(long this_ptr, byte[] val);
+       // struct LDKCVec_u64Z QueryShortChannelIds_get_short_channel_ids(const struct LDKQueryShortChannelIds *NONNULL_PTR this_ptr);
+       public static native long[] QueryShortChannelIds_get_short_channel_ids(long this_ptr);
        // void QueryShortChannelIds_set_short_channel_ids(struct LDKQueryShortChannelIds *NONNULL_PTR this_ptr, struct LDKCVec_u64Z val);
        public static native void QueryShortChannelIds_set_short_channel_ids(long this_ptr, long[] val);
        // MUST_USE_RES struct LDKQueryShortChannelIds QueryShortChannelIds_new(struct LDKThirtyTwoBytes chain_hash_arg, struct LDKCVec_u64Z short_channel_ids_arg);
@@ -6453,6 +6467,8 @@ public class bindings {
        public static native byte[] HolderCommitmentTransaction_get_counterparty_sig(long this_ptr);
        // void HolderCommitmentTransaction_set_counterparty_sig(struct LDKHolderCommitmentTransaction *NONNULL_PTR this_ptr, struct LDKSignature val);
        public static native void HolderCommitmentTransaction_set_counterparty_sig(long this_ptr, byte[] val);
+       // struct LDKCVec_SignatureZ HolderCommitmentTransaction_get_counterparty_htlc_sigs(const struct LDKHolderCommitmentTransaction *NONNULL_PTR this_ptr);
+       public static native byte[][] HolderCommitmentTransaction_get_counterparty_htlc_sigs(long this_ptr);
        // void HolderCommitmentTransaction_set_counterparty_htlc_sigs(struct LDKHolderCommitmentTransaction *NONNULL_PTR this_ptr, struct LDKCVec_SignatureZ val);
        public static native void HolderCommitmentTransaction_set_counterparty_htlc_sigs(long this_ptr, byte[][] val);
        // uintptr_t HolderCommitmentTransaction_clone_ptr(LDKHolderCommitmentTransaction *NONNULL_PTR arg);
@@ -7143,6 +7159,8 @@ public class bindings {
        public static native long NodeAnnouncementInfo_get_alias(long this_ptr);
        // void NodeAnnouncementInfo_set_alias(struct LDKNodeAnnouncementInfo *NONNULL_PTR this_ptr, struct LDKNodeAlias val);
        public static native void NodeAnnouncementInfo_set_alias(long this_ptr, long val);
+       // struct LDKCVec_NetAddressZ NodeAnnouncementInfo_get_addresses(const struct LDKNodeAnnouncementInfo *NONNULL_PTR this_ptr);
+       public static native long[] NodeAnnouncementInfo_get_addresses(long this_ptr);
        // void NodeAnnouncementInfo_set_addresses(struct LDKNodeAnnouncementInfo *NONNULL_PTR this_ptr, struct LDKCVec_NetAddressZ val);
        public static native void NodeAnnouncementInfo_set_addresses(long this_ptr, long[] val);
        // struct LDKNodeAnnouncement NodeAnnouncementInfo_get_announcement_message(const struct LDKNodeAnnouncementInfo *NONNULL_PTR this_ptr);
@@ -7177,6 +7195,8 @@ public class bindings {
        public static native long NodeAlias_read(byte[] ser);
        // void NodeInfo_free(struct LDKNodeInfo this_obj);
        public static native void NodeInfo_free(long this_obj);
+       // struct LDKCVec_u64Z NodeInfo_get_channels(const struct LDKNodeInfo *NONNULL_PTR this_ptr);
+       public static native long[] NodeInfo_get_channels(long this_ptr);
        // void NodeInfo_set_channels(struct LDKNodeInfo *NONNULL_PTR this_ptr, struct LDKCVec_u64Z val);
        public static native void NodeInfo_set_channels(long this_ptr, long[] val);
        // struct LDKRoutingFees NodeInfo_get_lowest_inbound_channel_fees(const struct LDKNodeInfo *NONNULL_PTR this_ptr);
@@ -7233,8 +7253,12 @@ public class bindings {
        public static native long NetworkGraph_update_channel_unsigned(long this_arg, long msg);
        // MUST_USE_RES struct LDKChannelInfo ReadOnlyNetworkGraph_channel(const struct LDKReadOnlyNetworkGraph *NONNULL_PTR this_arg, uint64_t short_channel_id);
        public static native long ReadOnlyNetworkGraph_channel(long this_arg, long short_channel_id);
+       // MUST_USE_RES struct LDKCVec_u64Z ReadOnlyNetworkGraph_list_channels(const struct LDKReadOnlyNetworkGraph *NONNULL_PTR this_arg);
+       public static native long[] ReadOnlyNetworkGraph_list_channels(long this_arg);
        // MUST_USE_RES struct LDKNodeInfo ReadOnlyNetworkGraph_node(const struct LDKReadOnlyNetworkGraph *NONNULL_PTR this_arg, const struct LDKNodeId *NONNULL_PTR node_id);
        public static native long ReadOnlyNetworkGraph_node(long this_arg, long node_id);
+       // MUST_USE_RES struct LDKCVec_NodeIdZ ReadOnlyNetworkGraph_list_nodes(const struct LDKReadOnlyNetworkGraph *NONNULL_PTR this_arg);
+       public static native long[] ReadOnlyNetworkGraph_list_nodes(long this_arg);
        // MUST_USE_RES struct LDKCOption_CVec_NetAddressZZ ReadOnlyNetworkGraph_get_addresses(const struct LDKReadOnlyNetworkGraph *NONNULL_PTR this_arg, struct LDKPublicKey pubkey);
        public static native long ReadOnlyNetworkGraph_get_addresses(long this_arg, byte[] pubkey);
        // void RouteHop_free(struct LDKRouteHop this_obj);
@@ -7359,6 +7383,8 @@ public class bindings {
        public static native byte PaymentParameters_get_max_channel_saturation_power_of_half(long this_ptr);
        // void PaymentParameters_set_max_channel_saturation_power_of_half(struct LDKPaymentParameters *NONNULL_PTR this_ptr, uint8_t val);
        public static native void PaymentParameters_set_max_channel_saturation_power_of_half(long this_ptr, byte val);
+       // struct LDKCVec_u64Z PaymentParameters_get_previously_failed_channels(const struct LDKPaymentParameters *NONNULL_PTR this_ptr);
+       public static native long[] PaymentParameters_get_previously_failed_channels(long this_ptr);
        // void PaymentParameters_set_previously_failed_channels(struct LDKPaymentParameters *NONNULL_PTR this_ptr, struct LDKCVec_u64Z val);
        public static native void PaymentParameters_set_previously_failed_channels(long this_ptr, long[] val);
        // MUST_USE_RES struct LDKPaymentParameters PaymentParameters_new(struct LDKPublicKey payee_pubkey_arg, struct LDKInvoiceFeatures features_arg, struct LDKCVec_RouteHintZ route_hints_arg, struct LDKCOption_u64Z expiry_time_arg, uint32_t max_total_cltv_expiry_delta_arg, uint8_t max_path_count_arg, uint8_t max_channel_saturation_power_of_half_arg, struct LDKCVec_u64Z previously_failed_channels_arg);
index 69bcc98723e2fd64ed19d234499d9b92b708497b..41b54c2cad38077a5b36bbfea2baa9046d433f1d 100644 (file)
@@ -56,6 +56,17 @@ public class CommitmentSigned extends CommonBase {
                Reference.reachabilityFence(val);
        }
 
+       /**
+        * Signatures on the HTLC transactions
+        * 
+        * Returns a copy of the field.
+        */
+       public byte[][] get_htlc_signatures() {
+               byte[][] ret = bindings.CommitmentSigned_get_htlc_signatures(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
        /**
         * Signatures on the HTLC transactions
         */
index d0480df25bad257f06f1e8698a513700f29afe19..faebf6cad5cb1710363f7544fbd681d74f43957f 100644 (file)
@@ -80,6 +80,19 @@ public class DelayedPaymentOutputDescriptor extends CommonBase {
                Reference.reachabilityFence(val);
        }
 
+       /**
+        * The output which is referenced by the given outpoint
+        * 
+        * Returns a copy of the field.
+        */
+       public TxOut get_output() {
+               long ret = bindings.DelayedPaymentOutputDescriptor_get_output(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TxOut ret_conv = new TxOut(null, ret);
+               return ret_conv;
+       }
+
        /**
         * The output which is referenced by the given outpoint
         */
index 7288569882f3c8d658ce2d8081c4eaa3bec3ac30..a2f0f33ea8a76d26ccbe7502942b2256a16735bf 100644 (file)
@@ -40,6 +40,17 @@ public class HolderCommitmentTransaction extends CommonBase {
                Reference.reachabilityFence(val);
        }
 
+       /**
+        * All non-dust counterparty HTLC signatures, in the order they appear in the transaction
+        * 
+        * Returns a copy of the field.
+        */
+       public byte[][] get_counterparty_htlc_sigs() {
+               byte[][] ret = bindings.HolderCommitmentTransaction_get_counterparty_htlc_sigs(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
        /**
         * All non-dust counterparty HTLC signatures, in the order they appear in the transaction
         */
index 6249016016b30baec7eb5854c307c86d0e060535..13974cc3475f3e5617c95ee3d1a99747c17e1a9b 100644 (file)
@@ -104,6 +104,25 @@ public class NodeAnnouncementInfo extends CommonBase {
                Reference.reachabilityFence(val);
        }
 
+       /**
+        * Internet-level addresses via which one can connect to the node
+        * 
+        * Returns a copy of the field.
+        */
+       public NetAddress[] get_addresses() {
+               long[] ret = bindings.NodeAnnouncementInfo_get_addresses(this.ptr);
+               Reference.reachabilityFence(this);
+               int ret_conv_12_len = ret.length;
+               NetAddress[] ret_conv_12_arr = new NetAddress[ret_conv_12_len];
+               for (int m = 0; m < ret_conv_12_len; m++) {
+                       long ret_conv_12 = ret[m];
+                       org.ldk.structs.NetAddress ret_conv_12_hu_conv = org.ldk.structs.NetAddress.constr_from_ptr(ret_conv_12);
+                       ret_conv_12_hu_conv.ptrs_to.add(this);
+                       ret_conv_12_arr[m] = ret_conv_12_hu_conv;
+               }
+               return ret_conv_12_arr;
+       }
+
        /**
         * Internet-level addresses via which one can connect to the node
         */
index ea3a8654dd71835e2337c1d59542fee98c682150..6a68446d4207976d3d5210c91136978bb364c7b4 100644 (file)
@@ -20,6 +20,17 @@ public class NodeInfo extends CommonBase {
                if (ptr != 0) { bindings.NodeInfo_free(ptr); }
        }
 
+       /**
+        * All valid channels a node has announced
+        * 
+        * Returns a copy of the field.
+        */
+       public long[] get_channels() {
+               long[] ret = bindings.NodeInfo_get_channels(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
        /**
         * All valid channels a node has announced
         */
index 8e3efc9d013f4eb22a92d400c393894a2ad5da8d..783d8001f3841a2072790f7b5631b84042a5262c 100644 (file)
@@ -203,6 +203,19 @@ public class PaymentParameters extends CommonBase {
                Reference.reachabilityFence(val);
        }
 
+       /**
+        * A list of SCIDs which this payment was previously attempted over and which caused the
+        * payment to fail. Future attempts for the same payment shouldn't be relayed through any of
+        * these SCIDs.
+        * 
+        * Returns a copy of the field.
+        */
+       public long[] get_previously_failed_channels() {
+               long[] ret = bindings.PaymentParameters_get_previously_failed_channels(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
        /**
         * A list of SCIDs which this payment was previously attempted over and which caused the
         * payment to fail. Future attempts for the same payment shouldn't be relayed through any of
index 6be3a63d8918c3186009a9b51472930207197d51..3791e0f3395f8f9d4d2fd088d025637bf6ff3416 100644 (file)
@@ -45,6 +45,17 @@ public class QueryShortChannelIds extends CommonBase {
                Reference.reachabilityFence(val);
        }
 
+       /**
+        * The short_channel_ids that are being queried
+        * 
+        * Returns a copy of the field.
+        */
+       public long[] get_short_channel_ids() {
+               long[] ret = bindings.QueryShortChannelIds_get_short_channel_ids(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
        /**
         * The short_channel_ids that are being queried
         */
index 058daad0cd89ef630e676952d6b85dc0d6ca2780..caeb6b97e3c41063a0732e5a204709c9684e2433 100644 (file)
@@ -34,6 +34,15 @@ public class ReadOnlyNetworkGraph extends CommonBase implements AutoCloseable {
                return ret_hu_conv;
        }
 
+       /**
+        * Returns the list of channels in the graph
+        */
+       public long[] list_channels() {
+               long[] ret = bindings.ReadOnlyNetworkGraph_list_channels(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
        /**
         * Returns information on a node with the given id.
         * 
@@ -51,6 +60,23 @@ public class ReadOnlyNetworkGraph extends CommonBase implements AutoCloseable {
                return ret_hu_conv;
        }
 
+       /**
+        * Returns the list of nodes in the graph
+        */
+       public NodeId[] list_nodes() {
+               long[] ret = bindings.ReadOnlyNetworkGraph_list_nodes(this.ptr);
+               Reference.reachabilityFence(this);
+               int ret_conv_8_len = ret.length;
+               NodeId[] ret_conv_8_arr = new NodeId[ret_conv_8_len];
+               for (int i = 0; i < ret_conv_8_len; i++) {
+                       long ret_conv_8 = ret[i];
+                       org.ldk.structs.NodeId ret_conv_8_hu_conv = null; if (ret_conv_8 < 0 || ret_conv_8 > 4096) { ret_conv_8_hu_conv = new org.ldk.structs.NodeId(null, ret_conv_8); }
+                       ret_conv_8_hu_conv.ptrs_to.add(this);
+                       ret_conv_8_arr[i] = ret_conv_8_hu_conv;
+               }
+               return ret_conv_8_arr;
+       }
+
        /**
         * Get network addresses by node id.
         * Returns None if the requested node is completely unknown,
index ce08c8a8305934d5a9464bd3c3f601ff6b4d358f..9b2d8df551b55b5a5f35b5d3e7f5c42ec7f510cd 100644 (file)
@@ -98,6 +98,17 @@ public class ReplyChannelRange extends CommonBase {
                Reference.reachabilityFence(val);
        }
 
+       /**
+        * The short_channel_ids in the channel range
+        * 
+        * Returns a copy of the field.
+        */
+       public long[] get_short_channel_ids() {
+               long[] ret = bindings.ReplyChannelRange_get_short_channel_ids(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
        /**
         * The short_channel_ids in the channel range
         */
index ac9c3787cb66a8397ea93c5fa04ed52aebaa5791..9442fa98ee8484b5e8691666c7633440012cd947 100644 (file)
@@ -42,6 +42,19 @@ public class StaticPaymentOutputDescriptor extends CommonBase {
                Reference.reachabilityFence(val);
        }
 
+       /**
+        * The output which is referenced by the given outpoint
+        * 
+        * Returns a copy of the field.
+        */
+       public TxOut get_output() {
+               long ret = bindings.StaticPaymentOutputDescriptor_get_output(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TxOut ret_conv = new TxOut(null, ret);
+               return ret_conv;
+       }
+
        /**
         * The output which is referenced by the given outpoint
         */
index b22073917d76a97b84a9e19dc60c7ccd3b0ecdf0..fc6d0b6596b9b53f9ef6f97fefba7941871eec43 100644 (file)
@@ -196,6 +196,19 @@ public class UnsignedChannelUpdate extends CommonBase {
                Reference.reachabilityFence(val);
        }
 
+       /**
+        * Excess data which was signed as a part of the message which we do not (yet) understand how
+        * to decode. This is stored to ensure forward-compatibility as new fields are added to the
+        * lightning gossip
+        * 
+        * Returns a copy of the field.
+        */
+       public byte[] get_excess_data() {
+               byte[] ret = bindings.UnsignedChannelUpdate_get_excess_data(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
        /**
         * Excess data which was signed as a part of the message which we do not (yet) understand how
         * to decode. This is stored to ensure forward-compatibility as new fields are added to the
index 22708cd1a5f598bc27476037c94e009cbd890b5f..269bd489e8ae3321ee723a55b74de72d82486502 100644 (file)
@@ -117,6 +117,25 @@ public class UnsignedNodeAnnouncement extends CommonBase {
                Reference.reachabilityFence(val);
        }
 
+       /**
+        * List of addresses on which this node is reachable
+        * 
+        * Returns a copy of the field.
+        */
+       public NetAddress[] get_addresses() {
+               long[] ret = bindings.UnsignedNodeAnnouncement_get_addresses(this.ptr);
+               Reference.reachabilityFence(this);
+               int ret_conv_12_len = ret.length;
+               NetAddress[] ret_conv_12_arr = new NetAddress[ret_conv_12_len];
+               for (int m = 0; m < ret_conv_12_len; m++) {
+                       long ret_conv_12 = ret[m];
+                       org.ldk.structs.NetAddress ret_conv_12_hu_conv = org.ldk.structs.NetAddress.constr_from_ptr(ret_conv_12);
+                       ret_conv_12_hu_conv.ptrs_to.add(this);
+                       ret_conv_12_arr[m] = ret_conv_12_hu_conv;
+               }
+               return ret_conv_12_arr;
+       }
+
        /**
         * List of addresses on which this node is reachable
         */
index 56c417df249fffeb6531c220cde3e347d1255bd2..4675991c99a7dd681eddf210d10dd630ddb80fc6 100644 (file)
@@ -28252,6 +28252,16 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor
        DelayedPaymentOutputDescriptor_set_to_self_delay(&this_ptr_conv, val);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1output(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = DelayedPaymentOutputDescriptor_get_output(&this_ptr_conv);
+       return (int64_t)ret_ref;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1output(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -28452,6 +28462,16 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_
        StaticPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1get_1output(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = StaticPaymentOutputDescriptor_get_output(&this_ptr_conv);
+       return (int64_t)ret_ref;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1set_1output(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -34337,6 +34357,25 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1set_1signatu
        CommitmentSigned_set_signature(&this_ptr_conv, val_ref);
 }
 
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1get_1htlc_1signatures(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKCommitmentSigned this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_SignatureZ ret_var = CommitmentSigned_get_htlc_signatures(&this_ptr_conv);
+       jobjectArray ret_arr = NULL;
+       ret_arr = (*env)->NewObjectArray(env, ret_var.datalen, arr_of_B_clz, NULL);
+       ;
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int8_tArray ret_conv_8_arr = (*env)->NewByteArray(env, 64);
+               (*env)->SetByteArrayRegion(env, ret_conv_8_arr, 0, 64, ret_var.data[i].compact_form);
+               (*env)->SetObjectArrayElement(env, ret_arr, i, ret_conv_8_arr);
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1set_1htlc_1signatures(JNIEnv *env, jclass clz, int64_t this_ptr, jobjectArray val) {
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -35233,6 +35272,26 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_
        UnsignedNodeAnnouncement_set_alias(&this_ptr_conv, val_ref);
 }
 
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1get_1addresses(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKUnsignedNodeAnnouncement this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_NetAddressZ ret_var = UnsignedNodeAnnouncement_get_addresses(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
+       int64_t *ret_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, ret_arr, NULL);
+       for (size_t m = 0; m < ret_var.datalen; m++) {
+               LDKNetAddress *ret_conv_12_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
+               *ret_conv_12_copy = ret_var.data[m];
+               int64_t ret_conv_12_ref = (uintptr_t)ret_conv_12_copy;
+               ret_arr_ptr[m] = ret_conv_12_ref;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_1addresses(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -35966,6 +36025,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1set_1fe
        UnsignedChannelUpdate_set_fee_proportional_millionths(&this_ptr_conv, val);
 }
 
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1get_1excess_1data(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKUnsignedChannelUpdate this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_u8Z ret_var = UnsignedChannelUpdate_get_excess_data(&this_ptr_conv);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1set_1excess_1data(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -36351,6 +36422,24 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1set_1sync_1
        ReplyChannelRange_set_sync_complete(&this_ptr_conv, val);
 }
 
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1get_1short_1channel_1ids(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKReplyChannelRange this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_u64Z ret_var = ReplyChannelRange_get_short_channel_ids(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
+       int64_t *ret_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, ret_arr, NULL);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1set_1short_1channel_1ids(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -36466,6 +36555,24 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1set_1cha
        QueryShortChannelIds_set_chain_hash(&this_ptr_conv, val_ref);
 }
 
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1get_1short_1channel_1ids(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKQueryShortChannelIds this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_u64Z ret_var = QueryShortChannelIds_get_short_channel_ids(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
+       int64_t *ret_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, ret_arr, NULL);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1set_1short_1channel_1ids(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
        LDKQueryShortChannelIds this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -40047,6 +40154,25 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1s
        HolderCommitmentTransaction_set_counterparty_sig(&this_ptr_conv, val_ref);
 }
 
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1get_1counterparty_1htlc_1sigs(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKHolderCommitmentTransaction this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_SignatureZ ret_var = HolderCommitmentTransaction_get_counterparty_htlc_sigs(&this_ptr_conv);
+       jobjectArray ret_arr = NULL;
+       ret_arr = (*env)->NewObjectArray(env, ret_var.datalen, arr_of_B_clz, NULL);
+       ;
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int8_tArray ret_conv_8_arr = (*env)->NewByteArray(env, 64);
+               (*env)->SetByteArrayRegion(env, ret_conv_8_arr, 0, 64, ret_var.data[i].compact_form);
+               (*env)->SetObjectArrayElement(env, ret_arr, i, ret_conv_8_arr);
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1set_1counterparty_1htlc_1sigs(JNIEnv *env, jclass clz, int64_t this_ptr, jobjectArray val) {
        LDKHolderCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -43949,6 +44075,26 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1ali
        NodeAnnouncementInfo_set_alias(&this_ptr_conv, val_conv);
 }
 
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1addresses(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_NetAddressZ ret_var = NodeAnnouncementInfo_get_addresses(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
+       int64_t *ret_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, ret_arr, NULL);
+       for (size_t m = 0; m < ret_var.datalen; m++) {
+               LDKNetAddress *ret_conv_12_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
+               *ret_conv_12_copy = ret_var.data[m];
+               int64_t ret_conv_12_ref = (uintptr_t)ret_conv_12_copy;
+               ret_arr_ptr[m] = ret_conv_12_ref;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1addresses(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -44224,6 +44370,24 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1free(JNIEnv *env, jc
        NodeInfo_free(this_obj_conv);
 }
 
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_NodeInfo_1get_1channels(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKNodeInfo this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_u64Z ret_var = NodeInfo_get_channels(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
+       int64_t *ret_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, ret_arr, NULL);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1set_1channels(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -44672,6 +44836,24 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1chann
        return ret_ref;
 }
 
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1list_1channels(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKReadOnlyNetworkGraph this_arg_conv;
+       this_arg_conv.inner = (void*)(this_arg & (~1));
+       this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       LDKCVec_u64Z ret_var = ReadOnlyNetworkGraph_list_channels(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
+       int64_t *ret_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, ret_arr, NULL);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1node(JNIEnv *env, jclass clz, int64_t this_arg, int64_t node_id) {
        LDKReadOnlyNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
@@ -44695,6 +44877,32 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1node(
        return ret_ref;
 }
 
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1list_1nodes(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKReadOnlyNetworkGraph this_arg_conv;
+       this_arg_conv.inner = (void*)(this_arg & (~1));
+       this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       LDKCVec_NodeIdZ ret_var = ReadOnlyNetworkGraph_list_nodes(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
+       int64_t *ret_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, ret_arr, NULL);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               LDKNodeId ret_conv_8_var = ret_var.data[i];
+               int64_t ret_conv_8_ref = 0;
+               CHECK((((uintptr_t)ret_conv_8_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+               CHECK((((uintptr_t)&ret_conv_8_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_8_var);
+               ret_conv_8_ref = (uintptr_t)ret_conv_8_var.inner;
+               if (ret_conv_8_var.is_owned) {
+                       ret_conv_8_ref |= 1;
+               }
+               ret_arr_ptr[i] = ret_conv_8_ref;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1get_1addresses(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray pubkey) {
        LDKReadOnlyNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
@@ -45548,6 +45756,24 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1max_1c
        PaymentParameters_set_max_channel_saturation_power_of_half(&this_ptr_conv, val);
 }
 
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1previously_1failed_1channels(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_u64Z ret_var = PaymentParameters_get_previously_failed_channels(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
+       int64_t *ret_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, ret_arr, NULL);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1previously_1failed_1channels(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
        LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
index d07c167aa8d786763a6afcfdf5170408632b29a4..313335011129ce1f2f5d6b2927fd8cdf477653ae 100644 (file)
@@ -28250,6 +28250,16 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor
        DelayedPaymentOutputDescriptor_set_to_self_delay(&this_ptr_conv, val);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1output(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = DelayedPaymentOutputDescriptor_get_output(&this_ptr_conv);
+       return (int64_t)ret_ref;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1output(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -28450,6 +28460,16 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_
        StaticPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1get_1output(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = StaticPaymentOutputDescriptor_get_output(&this_ptr_conv);
+       return (int64_t)ret_ref;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1set_1output(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -34335,6 +34355,25 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1set_1signatu
        CommitmentSigned_set_signature(&this_ptr_conv, val_ref);
 }
 
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1get_1htlc_1signatures(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKCommitmentSigned this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_SignatureZ ret_var = CommitmentSigned_get_htlc_signatures(&this_ptr_conv);
+       jobjectArray ret_arr = NULL;
+       ret_arr = (*env)->NewObjectArray(env, ret_var.datalen, arr_of_B_clz, NULL);
+       ;
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int8_tArray ret_conv_8_arr = (*env)->NewByteArray(env, 64);
+               (*env)->SetByteArrayRegion(env, ret_conv_8_arr, 0, 64, ret_var.data[i].compact_form);
+               (*env)->SetObjectArrayElement(env, ret_arr, i, ret_conv_8_arr);
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1set_1htlc_1signatures(JNIEnv *env, jclass clz, int64_t this_ptr, jobjectArray val) {
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -35231,6 +35270,26 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_
        UnsignedNodeAnnouncement_set_alias(&this_ptr_conv, val_ref);
 }
 
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1get_1addresses(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKUnsignedNodeAnnouncement this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_NetAddressZ ret_var = UnsignedNodeAnnouncement_get_addresses(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
+       int64_t *ret_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, ret_arr, NULL);
+       for (size_t m = 0; m < ret_var.datalen; m++) {
+               LDKNetAddress *ret_conv_12_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
+               *ret_conv_12_copy = ret_var.data[m];
+               int64_t ret_conv_12_ref = (uintptr_t)ret_conv_12_copy;
+               ret_arr_ptr[m] = ret_conv_12_ref;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_1addresses(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -35964,6 +36023,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1set_1fe
        UnsignedChannelUpdate_set_fee_proportional_millionths(&this_ptr_conv, val);
 }
 
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1get_1excess_1data(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKUnsignedChannelUpdate this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_u8Z ret_var = UnsignedChannelUpdate_get_excess_data(&this_ptr_conv);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1set_1excess_1data(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -36349,6 +36420,24 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1set_1sync_1
        ReplyChannelRange_set_sync_complete(&this_ptr_conv, val);
 }
 
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1get_1short_1channel_1ids(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKReplyChannelRange this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_u64Z ret_var = ReplyChannelRange_get_short_channel_ids(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
+       int64_t *ret_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, ret_arr, NULL);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1set_1short_1channel_1ids(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -36464,6 +36553,24 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1set_1cha
        QueryShortChannelIds_set_chain_hash(&this_ptr_conv, val_ref);
 }
 
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1get_1short_1channel_1ids(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKQueryShortChannelIds this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_u64Z ret_var = QueryShortChannelIds_get_short_channel_ids(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
+       int64_t *ret_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, ret_arr, NULL);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1set_1short_1channel_1ids(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
        LDKQueryShortChannelIds this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -40045,6 +40152,25 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1s
        HolderCommitmentTransaction_set_counterparty_sig(&this_ptr_conv, val_ref);
 }
 
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1get_1counterparty_1htlc_1sigs(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKHolderCommitmentTransaction this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_SignatureZ ret_var = HolderCommitmentTransaction_get_counterparty_htlc_sigs(&this_ptr_conv);
+       jobjectArray ret_arr = NULL;
+       ret_arr = (*env)->NewObjectArray(env, ret_var.datalen, arr_of_B_clz, NULL);
+       ;
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int8_tArray ret_conv_8_arr = (*env)->NewByteArray(env, 64);
+               (*env)->SetByteArrayRegion(env, ret_conv_8_arr, 0, 64, ret_var.data[i].compact_form);
+               (*env)->SetObjectArrayElement(env, ret_arr, i, ret_conv_8_arr);
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1set_1counterparty_1htlc_1sigs(JNIEnv *env, jclass clz, int64_t this_ptr, jobjectArray val) {
        LDKHolderCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -43947,6 +44073,26 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1ali
        NodeAnnouncementInfo_set_alias(&this_ptr_conv, val_conv);
 }
 
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1addresses(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_NetAddressZ ret_var = NodeAnnouncementInfo_get_addresses(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
+       int64_t *ret_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, ret_arr, NULL);
+       for (size_t m = 0; m < ret_var.datalen; m++) {
+               LDKNetAddress *ret_conv_12_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
+               *ret_conv_12_copy = ret_var.data[m];
+               int64_t ret_conv_12_ref = (uintptr_t)ret_conv_12_copy;
+               ret_arr_ptr[m] = ret_conv_12_ref;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1addresses(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -44222,6 +44368,24 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1free(JNIEnv *env, jc
        NodeInfo_free(this_obj_conv);
 }
 
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_NodeInfo_1get_1channels(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKNodeInfo this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_u64Z ret_var = NodeInfo_get_channels(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
+       int64_t *ret_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, ret_arr, NULL);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1set_1channels(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -44670,6 +44834,24 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1chann
        return ret_ref;
 }
 
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1list_1channels(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKReadOnlyNetworkGraph this_arg_conv;
+       this_arg_conv.inner = (void*)(this_arg & (~1));
+       this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       LDKCVec_u64Z ret_var = ReadOnlyNetworkGraph_list_channels(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
+       int64_t *ret_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, ret_arr, NULL);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1node(JNIEnv *env, jclass clz, int64_t this_arg, int64_t node_id) {
        LDKReadOnlyNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
@@ -44693,6 +44875,32 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1node(
        return ret_ref;
 }
 
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1list_1nodes(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKReadOnlyNetworkGraph this_arg_conv;
+       this_arg_conv.inner = (void*)(this_arg & (~1));
+       this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       LDKCVec_NodeIdZ ret_var = ReadOnlyNetworkGraph_list_nodes(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
+       int64_t *ret_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, ret_arr, NULL);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               LDKNodeId ret_conv_8_var = ret_var.data[i];
+               int64_t ret_conv_8_ref = 0;
+               CHECK((((uintptr_t)ret_conv_8_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+               CHECK((((uintptr_t)&ret_conv_8_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_8_var);
+               ret_conv_8_ref = (uintptr_t)ret_conv_8_var.inner;
+               if (ret_conv_8_var.is_owned) {
+                       ret_conv_8_ref |= 1;
+               }
+               ret_arr_ptr[i] = ret_conv_8_ref;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1get_1addresses(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray pubkey) {
        LDKReadOnlyNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
@@ -45546,6 +45754,24 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1max_1c
        PaymentParameters_set_max_channel_saturation_power_of_half(&this_ptr_conv, val);
 }
 
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1previously_1failed_1channels(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_u64Z ret_var = PaymentParameters_get_previously_failed_channels(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
+       int64_t *ret_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, ret_arr, NULL);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1previously_1failed_1channels(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
        LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
index 31d69e31feebf99295d16ff27ed8c4478e6d8ef3..4133a2361b949d58d16fa5119bcfade66d0e4f3a 100644 (file)
@@ -14511,6 +14511,14 @@ JNIEXPORT jshort JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescript
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1to_1self_1delay
   (JNIEnv *, jclass, jlong, jshort);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    DelayedPaymentOutputDescriptor_get_output
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1output
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    DelayedPaymentOutputDescriptor_set_output
@@ -14631,6 +14639,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1set_1outpoint
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    StaticPaymentOutputDescriptor_get_output
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1get_1output
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    StaticPaymentOutputDescriptor_set_output
@@ -18271,6 +18287,14 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1get_1s
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1set_1signature
   (JNIEnv *, jclass, jlong, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CommitmentSigned_get_htlc_signatures
+ * Signature: (J)[[B
+ */
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1get_1htlc_1signatures
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CommitmentSigned_set_htlc_signatures
@@ -18847,6 +18871,14 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_1alias
   (JNIEnv *, jclass, jlong, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedNodeAnnouncement_get_addresses
+ * Signature: (J)[J
+ */
+JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1get_1addresses
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    UnsignedNodeAnnouncement_set_addresses
@@ -19335,6 +19367,14 @@ JNIEXPORT jint JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1get_1fe
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1set_1fee_1proportional_1millionths
   (JNIEnv *, jclass, jlong, jint);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedChannelUpdate_get_excess_data
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1get_1excess_1data
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    UnsignedChannelUpdate_set_excess_data
@@ -19583,6 +19623,14 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1get_1sy
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1set_1sync_1complete
   (JNIEnv *, jclass, jlong, jboolean);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ReplyChannelRange_get_short_channel_ids
+ * Signature: (J)[J
+ */
+JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1get_1short_1channel_1ids
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ReplyChannelRange_set_short_channel_ids
@@ -19639,6 +19687,14 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1ge
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1set_1chain_1hash
   (JNIEnv *, jclass, jlong, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    QueryShortChannelIds_get_short_channel_ids
+ * Signature: (J)[J
+ */
+JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1get_1short_1channel_1ids
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    QueryShortChannelIds_set_short_channel_ids
@@ -21839,6 +21895,14 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransact
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1set_1counterparty_1sig
   (JNIEnv *, jclass, jlong, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    HolderCommitmentTransaction_get_counterparty_htlc_sigs
+ * Signature: (J)[[B
+ */
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1get_1counterparty_1htlc_1sigs
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    HolderCommitmentTransaction_set_counterparty_htlc_sigs
@@ -24599,6 +24663,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1al
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1alias
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    NodeAnnouncementInfo_get_addresses
+ * Signature: (J)[J
+ */
+JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1addresses
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    NodeAnnouncementInfo_set_addresses
@@ -24735,6 +24807,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NodeAlias_1read
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    NodeInfo_get_channels
+ * Signature: (J)[J
+ */
+JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_NodeInfo_1get_1channels
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    NodeInfo_set_channels
@@ -24959,6 +25039,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1channel
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1channel
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ReadOnlyNetworkGraph_list_channels
+ * Signature: (J)[J
+ */
+JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1list_1channels
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ReadOnlyNetworkGraph_node
@@ -24967,6 +25055,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1channel
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1node
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ReadOnlyNetworkGraph_list_nodes
+ * Signature: (J)[J
+ */
+JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1list_1nodes
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ReadOnlyNetworkGraph_get_addresses
@@ -25463,6 +25559,14 @@ JNIEXPORT jbyte JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1max_1
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1max_1channel_1saturation_1power_1of_1half
   (JNIEnv *, jclass, jlong, jbyte);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentParameters_get_previously_failed_channels
+ * Signature: (J)[J
+ */
+JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1previously_1failed_1channels
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    PaymentParameters_set_previously_failed_channels
index 091bb17421ae01aba9bcb245da6cc2872aca0000..27d8f80f45d533d32bcd7a14ff61001286eb06fd 100644 (file)
@@ -39,12 +39,12 @@ _Static_assert(sizeof(void*) == 4, "Pointers mut be 32 bits");
 
 #define DECL_ARR_TYPE(ty, name) \
        struct name##array { \
-               uint32_t arr_len; \
+               uint64_t arr_len; /* uint32_t would suffice but we want to align uint64_ts as well */ \
                ty elems[]; \
        }; \
        typedef struct name##array * name##Array; \
        static inline name##Array init_##name##Array(size_t arr_len, int lineno) { \
-               name##Array arr = (name##Array)do_MALLOC(arr_len * sizeof(ty) + sizeof(uint32_t), #name" array init", lineno); \
+               name##Array arr = (name##Array)do_MALLOC(arr_len * sizeof(ty) + sizeof(uint64_t), #name" array init", lineno); \
                arr->arr_len = arr_len; \
                return arr; \
        }
@@ -900,7 +900,7 @@ ptrArray  __attribute__((export_name("TS_CResult_CVec_SignatureZNoneZ_get_ok")))
        LDKCVec_SignatureZ ret_var = CResult_CVec_SignatureZNoneZ_get_ok(owner_conv);
        ptrArray ret_arr = NULL;
        ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 4);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
        for (size_t m = 0; m < ret_var.datalen; m++) {
                int8_tArray ret_conv_12_arr = init_int8_tArray(64, __LINE__);
                memcpy(ret_conv_12_arr->elems, ret_var.data[m].compact_form, 64);
@@ -1777,7 +1777,7 @@ uint32_tArray __attribute__((export_name("TS_LDKEvent_PaymentPathSuccessful_get_
                        LDKCVec_RouteHopZ path_var = obj->payment_path_successful.path;
                        uint32_tArray path_arr = NULL;
                        path_arr = init_uint32_tArray(path_var.datalen, __LINE__);
-                       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 4);
+                       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 8);
                        for (size_t k = 0; k < path_var.datalen; k++) {
                                LDKRouteHop path_conv_10_var = path_var.data[k];
                                uint32_t path_conv_10_ref = 0;
@@ -1828,7 +1828,7 @@ uint32_tArray __attribute__((export_name("TS_LDKEvent_PaymentPathFailed_get_path
                        LDKCVec_RouteHopZ path_var = obj->payment_path_failed.path;
                        uint32_tArray path_arr = NULL;
                        path_arr = init_uint32_tArray(path_var.datalen, __LINE__);
-                       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 4);
+                       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 8);
                        for (size_t k = 0; k < path_var.datalen; k++) {
                                LDKRouteHop path_conv_10_var = path_var.data[k];
                                uint32_t path_conv_10_ref = 0;
@@ -1880,7 +1880,7 @@ uint32_tArray __attribute__((export_name("TS_LDKEvent_ProbeSuccessful_get_path")
                        LDKCVec_RouteHopZ path_var = obj->probe_successful.path;
                        uint32_tArray path_arr = NULL;
                        path_arr = init_uint32_tArray(path_var.datalen, __LINE__);
-                       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 4);
+                       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 8);
                        for (size_t k = 0; k < path_var.datalen; k++) {
                                LDKRouteHop path_conv_10_var = path_var.data[k];
                                uint32_t path_conv_10_ref = 0;
@@ -1913,7 +1913,7 @@ uint32_tArray __attribute__((export_name("TS_LDKEvent_ProbeFailed_get_path"))) T
                        LDKCVec_RouteHopZ path_var = obj->probe_failed.path;
                        uint32_tArray path_arr = NULL;
                        path_arr = init_uint32_tArray(path_var.datalen, __LINE__);
-                       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 4);
+                       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 8);
                        for (size_t k = 0; k < path_var.datalen; k++) {
                                LDKRouteHop path_conv_10_var = path_var.data[k];
                                uint32_t path_conv_10_ref = 0;
@@ -1944,7 +1944,7 @@ uint32_tArray __attribute__((export_name("TS_LDKEvent_SpendableOutputs_get_outpu
                        LDKCVec_SpendableOutputDescriptorZ outputs_var = obj->spendable_outputs.outputs;
                        uint32_tArray outputs_arr = NULL;
                        outputs_arr = init_uint32_tArray(outputs_var.datalen, __LINE__);
-                       uint32_t *outputs_arr_ptr = (uint32_t*)(((uint8_t*)outputs_arr) + 4);
+                       uint32_t *outputs_arr_ptr = (uint32_t*)(((uint8_t*)outputs_arr) + 8);
                        for (size_t b = 0; b < outputs_var.datalen; b++) {
                                uint32_t outputs_conv_27_ref = ((uintptr_t)&outputs_var.data[b]) | 1;
                                outputs_arr_ptr[b] = outputs_conv_27_ref;
@@ -2709,7 +2709,7 @@ uint32_tArray  __attribute__((export_name("TS_C3Tuple_OutPointCVec_MonitorEventZ
        LDKCVec_MonitorEventZ ret_var = C3Tuple_OutPointCVec_MonitorEventZPublicKeyZ_get_b(owner_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t o = 0; o < ret_var.datalen; o++) {
                LDKMonitorEvent *ret_conv_14_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
                *ret_conv_14_copy = ret_var.data[o];
@@ -2853,7 +2853,7 @@ void log_LDKLogger_jcall(const void* this_arg, const LDKRecord * record) {
        if (record_var.is_owned) {
                record_ref |= 1;
        }
-       js_invoke_function_u_u(j_calls->instance_ptr, 0, (uint32_t)record_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 0, (uint32_t)record_ref, 0, 0, 0, 0, 0);
 }
 static void LDKLogger_JCalls_cloned(LDKLogger* new_obj) {
        LDKLogger_JCalls *j_calls = (LDKLogger_JCalls*) new_obj->this_arg;
@@ -3170,7 +3170,7 @@ LDKCResult_TxOutAccessErrorZ get_utxo_LDKAccess_jcall(const void* this_arg, cons
        int8_tArray genesis_hash_arr = init_int8_tArray(32, __LINE__);
        memcpy(genesis_hash_arr->elems, *genesis_hash, 32);
        int64_t short_channel_id_conv = short_channel_id;
-       uint32_t ret = js_invoke_function_u_bb(j_calls->instance_ptr, 1, (uint32_t)genesis_hash_arr, (uint32_t)short_channel_id_conv);
+       uint32_t ret = js_invoke_function_ubuuuu(j_calls->instance_ptr, 1, (uint32_t)genesis_hash_arr, (uint32_t)short_channel_id_conv, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_TxOutAccessErrorZ ret_conv = *(LDKCResult_TxOutAccessErrorZ*)(ret_ptr);
@@ -3707,7 +3707,7 @@ uint32_tArray __attribute__((export_name("TS_LDKCOption_CVec_NetAddressZZ_Some_g
                        LDKCVec_NetAddressZ some_var = obj->some;
                        uint32_tArray some_arr = NULL;
                        some_arr = init_uint32_tArray(some_var.datalen, __LINE__);
-                       uint32_t *some_arr_ptr = (uint32_t*)(((uint8_t*)some_arr) + 4);
+                       uint32_t *some_arr_ptr = (uint32_t*)(((uint8_t*)some_arr) + 8);
                        for (size_t m = 0; m < some_var.datalen; m++) {
                                uint32_t some_conv_12_ref = ((uintptr_t)&some_var.data[m]) | 1;
                                some_arr_ptr[m] = some_conv_12_ref;
@@ -3842,7 +3842,7 @@ ptrArray  __attribute__((export_name("TS_C2Tuple_SignatureCVec_SignatureZZ_get_b
        LDKCVec_SignatureZ ret_var = C2Tuple_SignatureCVec_SignatureZZ_get_b(owner_conv);
        ptrArray ret_arr = NULL;
        ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 4);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
        for (size_t m = 0; m < ret_var.datalen; m++) {
                int8_tArray ret_conv_12_arr = init_int8_tArray(64, __LINE__);
                memcpy(ret_conv_12_arr->elems, ret_var.data[m].compact_form, 64);
@@ -3965,7 +3965,7 @@ static void LDKBaseSign_JCalls_free(void* this_arg) {
 LDKPublicKey get_per_commitment_point_LDKBaseSign_jcall(const void* this_arg, uint64_t idx) {
        LDKBaseSign_JCalls *j_calls = (LDKBaseSign_JCalls*) this_arg;
        int64_t idx_conv = idx;
-       int8_tArray ret = (int8_tArray)js_invoke_function_u_b(j_calls->instance_ptr, 2, (uint32_t)idx_conv);
+       int8_tArray ret = (int8_tArray)js_invoke_function_buuuuu(j_calls->instance_ptr, 2, (uint32_t)idx_conv, 0, 0, 0, 0, 0);
        LDKPublicKey ret_ref;
        CHECK(ret->arr_len == 33);
        memcpy(ret_ref.compressed_form, ret->elems, 33); FREE(ret);
@@ -3974,7 +3974,7 @@ LDKPublicKey get_per_commitment_point_LDKBaseSign_jcall(const void* this_arg, ui
 LDKThirtyTwoBytes release_commitment_secret_LDKBaseSign_jcall(const void* this_arg, uint64_t idx) {
        LDKBaseSign_JCalls *j_calls = (LDKBaseSign_JCalls*) this_arg;
        int64_t idx_conv = idx;
-       int8_tArray ret = (int8_tArray)js_invoke_function_u_b(j_calls->instance_ptr, 3, (uint32_t)idx_conv);
+       int8_tArray ret = (int8_tArray)js_invoke_function_buuuuu(j_calls->instance_ptr, 3, (uint32_t)idx_conv, 0, 0, 0, 0, 0);
        LDKThirtyTwoBytes ret_ref;
        CHECK(ret->arr_len == 32);
        memcpy(ret_ref.data, ret->elems, 32); FREE(ret);
@@ -3995,7 +3995,7 @@ LDKCResult_NoneNoneZ validate_holder_commitment_LDKBaseSign_jcall(const void* th
        LDKCVec_PaymentPreimageZ preimages_var = preimages;
        ptrArray preimages_arr = NULL;
        preimages_arr = init_ptrArray(preimages_var.datalen, __LINE__);
-       int8_tArray *preimages_arr_ptr = (int8_tArray*)(((uint8_t*)preimages_arr) + 4);
+       int8_tArray *preimages_arr_ptr = (int8_tArray*)(((uint8_t*)preimages_arr) + 8);
        for (size_t m = 0; m < preimages_var.datalen; m++) {
                int8_tArray preimages_conv_12_arr = init_int8_tArray(32, __LINE__);
                memcpy(preimages_conv_12_arr->elems, preimages_var.data[m].data, 32);
@@ -4003,7 +4003,7 @@ LDKCResult_NoneNoneZ validate_holder_commitment_LDKBaseSign_jcall(const void* th
        }
        
        FREE(preimages_var.data);
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 4, (uint32_t)holder_tx_ref, (uint32_t)preimages_arr);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 4, (uint32_t)holder_tx_ref, (uint32_t)preimages_arr, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneNoneZ ret_conv = *(LDKCResult_NoneNoneZ*)(ret_ptr);
@@ -4012,7 +4012,7 @@ LDKCResult_NoneNoneZ validate_holder_commitment_LDKBaseSign_jcall(const void* th
 }
 LDKThirtyTwoBytes channel_keys_id_LDKBaseSign_jcall(const void* this_arg) {
        LDKBaseSign_JCalls *j_calls = (LDKBaseSign_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_u_(j_calls->instance_ptr, 5);
+       int8_tArray ret = (int8_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 5, 0, 0, 0, 0, 0, 0);
        LDKThirtyTwoBytes ret_ref;
        CHECK(ret->arr_len == 32);
        memcpy(ret_ref.data, ret->elems, 32); FREE(ret);
@@ -4033,7 +4033,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_L
        LDKCVec_PaymentPreimageZ preimages_var = preimages;
        ptrArray preimages_arr = NULL;
        preimages_arr = init_ptrArray(preimages_var.datalen, __LINE__);
-       int8_tArray *preimages_arr_ptr = (int8_tArray*)(((uint8_t*)preimages_arr) + 4);
+       int8_tArray *preimages_arr_ptr = (int8_tArray*)(((uint8_t*)preimages_arr) + 8);
        for (size_t m = 0; m < preimages_var.datalen; m++) {
                int8_tArray preimages_conv_12_arr = init_int8_tArray(32, __LINE__);
                memcpy(preimages_conv_12_arr->elems, preimages_var.data[m].data, 32);
@@ -4041,7 +4041,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_L
        }
        
        FREE(preimages_var.data);
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 6, (uint32_t)commitment_tx_ref, (uint32_t)preimages_arr);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 6, (uint32_t)commitment_tx_ref, (uint32_t)preimages_arr, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(ret_ptr);
@@ -4053,7 +4053,7 @@ LDKCResult_NoneNoneZ validate_counterparty_revocation_LDKBaseSign_jcall(const vo
        int64_t idx_conv = idx;
        int8_tArray secret_arr = init_int8_tArray(32, __LINE__);
        memcpy(secret_arr->elems, *secret, 32);
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 7, (uint32_t)idx_conv, (uint32_t)secret_arr);
+       uint32_t ret = js_invoke_function_buuuuu(j_calls->instance_ptr, 7, (uint32_t)idx_conv, (uint32_t)secret_arr, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneNoneZ ret_conv = *(LDKCResult_NoneNoneZ*)(ret_ptr);
@@ -4072,7 +4072,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htl
        if (commitment_tx_var.is_owned) {
                commitment_tx_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 8, (uint32_t)commitment_tx_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 8, (uint32_t)commitment_tx_ref, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(ret_ptr);
@@ -4089,7 +4089,7 @@ LDKCResult_SignatureNoneZ sign_justice_revoked_output_LDKBaseSign_jcall(const vo
        int64_t amount_conv = amount;
        int8_tArray per_commitment_key_arr = init_int8_tArray(32, __LINE__);
        memcpy(per_commitment_key_arr->elems, *per_commitment_key, 32);
-       uint32_t ret = js_invoke_function_u_uuuu(j_calls->instance_ptr, 9, (uint32_t)justice_tx_arr, (uint32_t)input_conv, (uint32_t)amount_conv, (uint32_t)per_commitment_key_arr);
+       uint32_t ret = js_invoke_function_uubuuu(j_calls->instance_ptr, 9, (uint32_t)justice_tx_arr, (uint32_t)input_conv, (uint32_t)amount_conv, (uint32_t)per_commitment_key_arr, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
@@ -4116,7 +4116,7 @@ LDKCResult_SignatureNoneZ sign_justice_revoked_htlc_LDKBaseSign_jcall(const void
        if (htlc_var.is_owned) {
                htlc_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_uuuuu(j_calls->instance_ptr, 10, (uint32_t)justice_tx_arr, (uint32_t)input_conv, (uint32_t)amount_conv, (uint32_t)per_commitment_key_arr, (uint32_t)htlc_ref);
+       uint32_t ret = js_invoke_function_uubuuu(j_calls->instance_ptr, 10, (uint32_t)justice_tx_arr, (uint32_t)input_conv, (uint32_t)amount_conv, (uint32_t)per_commitment_key_arr, (uint32_t)htlc_ref, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
@@ -4143,7 +4143,7 @@ LDKCResult_SignatureNoneZ sign_counterparty_htlc_transaction_LDKBaseSign_jcall(c
        if (htlc_var.is_owned) {
                htlc_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_uuuuu(j_calls->instance_ptr, 11, (uint32_t)htlc_tx_arr, (uint32_t)input_conv, (uint32_t)amount_conv, (uint32_t)per_commitment_point_arr, (uint32_t)htlc_ref);
+       uint32_t ret = js_invoke_function_uubuuu(j_calls->instance_ptr, 11, (uint32_t)htlc_tx_arr, (uint32_t)input_conv, (uint32_t)amount_conv, (uint32_t)per_commitment_point_arr, (uint32_t)htlc_ref, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
@@ -4162,7 +4162,7 @@ LDKCResult_SignatureNoneZ sign_closing_transaction_LDKBaseSign_jcall(const void*
        if (closing_tx_var.is_owned) {
                closing_tx_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 12, (uint32_t)closing_tx_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 12, (uint32_t)closing_tx_ref, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
@@ -4181,7 +4181,7 @@ LDKCResult_C2Tuple_SignatureSignatureZNoneZ sign_channel_announcement_LDKBaseSig
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 13, (uint32_t)msg_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 13, (uint32_t)msg_ref, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_C2Tuple_SignatureSignatureZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureSignatureZNoneZ*)(ret_ptr);
@@ -4200,7 +4200,7 @@ void ready_channel_LDKBaseSign_jcall(void* this_arg, const LDKChannelTransaction
        if (channel_parameters_var.is_owned) {
                channel_parameters_ref |= 1;
        }
-       js_invoke_function_u_u(j_calls->instance_ptr, 14, (uint32_t)channel_parameters_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 14, (uint32_t)channel_parameters_ref, 0, 0, 0, 0, 0);
 }
 static void LDKBaseSign_JCalls_cloned(LDKBaseSign* new_obj) {
        LDKBaseSign_JCalls *j_calls = (LDKBaseSign_JCalls*) new_obj->this_arg;
@@ -4483,7 +4483,7 @@ static void LDKSign_JCalls_free(void* this_arg) {
 }
 LDKCVec_u8Z write_LDKSign_jcall(const void* this_arg) {
        LDKSign_JCalls *j_calls = (LDKSign_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_u_(j_calls->instance_ptr, 15);
+       int8_tArray ret = (int8_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 15, 0, 0, 0, 0, 0, 0);
        LDKCVec_u8Z ret_ref;
        ret_ref.datalen = ret->arr_len;
        ret_ref.data = MALLOC(ret_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -4596,7 +4596,7 @@ ptrArray  __attribute__((export_name("TS_CResult_CVec_CVec_u8ZZNoneZ_get_ok")))
        LDKCVec_CVec_u8ZZ ret_var = CResult_CVec_CVec_u8ZZNoneZ_get_ok(owner_conv);
        ptrArray ret_arr = NULL;
        ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 4);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
        for (size_t m = 0; m < ret_var.datalen; m++) {
                LDKCVec_u8Z ret_conv_12_var = ret_var.data[m];
                int8_tArray ret_conv_12_arr = init_int8_tArray(ret_conv_12_var.datalen, __LINE__);
@@ -4833,7 +4833,7 @@ uint32_tArray __attribute__((export_name("TS_LDKPaymentSendFailure_PathParameter
                        LDKCVec_CResult_NoneAPIErrorZZ path_parameter_error_var = obj->path_parameter_error;
                        uint32_tArray path_parameter_error_arr = NULL;
                        path_parameter_error_arr = init_uint32_tArray(path_parameter_error_var.datalen, __LINE__);
-                       uint32_t *path_parameter_error_arr_ptr = (uint32_t*)(((uint8_t*)path_parameter_error_arr) + 4);
+                       uint32_t *path_parameter_error_arr_ptr = (uint32_t*)(((uint8_t*)path_parameter_error_arr) + 8);
                        for (size_t w = 0; w < path_parameter_error_var.datalen; w++) {
                                LDKCResult_NoneAPIErrorZ* path_parameter_error_conv_22_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
                                *path_parameter_error_conv_22_conv = path_parameter_error_var.data[w];
@@ -4849,7 +4849,7 @@ uint32_tArray __attribute__((export_name("TS_LDKPaymentSendFailure_AllFailedRetr
                        LDKCVec_APIErrorZ all_failed_retry_safe_var = obj->all_failed_retry_safe;
                        uint32_tArray all_failed_retry_safe_arr = NULL;
                        all_failed_retry_safe_arr = init_uint32_tArray(all_failed_retry_safe_var.datalen, __LINE__);
-                       uint32_t *all_failed_retry_safe_arr_ptr = (uint32_t*)(((uint8_t*)all_failed_retry_safe_arr) + 4);
+                       uint32_t *all_failed_retry_safe_arr_ptr = (uint32_t*)(((uint8_t*)all_failed_retry_safe_arr) + 8);
                        for (size_t k = 0; k < all_failed_retry_safe_var.datalen; k++) {
                                uint32_t all_failed_retry_safe_conv_10_ref = ((uintptr_t)&all_failed_retry_safe_var.data[k]) | 1;
                                all_failed_retry_safe_arr_ptr[k] = all_failed_retry_safe_conv_10_ref;
@@ -4863,7 +4863,7 @@ uint32_tArray __attribute__((export_name("TS_LDKPaymentSendFailure_PartialFailur
                        LDKCVec_CResult_NoneAPIErrorZZ results_var = obj->partial_failure.results;
                        uint32_tArray results_arr = NULL;
                        results_arr = init_uint32_tArray(results_var.datalen, __LINE__);
-                       uint32_t *results_arr_ptr = (uint32_t*)(((uint8_t*)results_arr) + 4);
+                       uint32_t *results_arr_ptr = (uint32_t*)(((uint8_t*)results_arr) + 8);
                        for (size_t w = 0; w < results_var.datalen; w++) {
                                LDKCResult_NoneAPIErrorZ* results_conv_22_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
                                *results_conv_22_conv = results_var.data[w];
@@ -5297,7 +5297,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ watch_channel_LDKWatch_jcall(const void*
        if (monitor_var.is_owned) {
                monitor_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 16, (uint32_t)funding_txo_ref, (uint32_t)monitor_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 16, (uint32_t)funding_txo_ref, (uint32_t)monitor_ref, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
@@ -5324,7 +5324,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_channel_LDKWatch_jcall(const void
        if (update_var.is_owned) {
                update_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 17, (uint32_t)funding_txo_ref, (uint32_t)update_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 17, (uint32_t)funding_txo_ref, (uint32_t)update_ref, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
@@ -5333,7 +5333,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_channel_LDKWatch_jcall(const void
 }
 LDKCVec_C3Tuple_OutPointCVec_MonitorEventZPublicKeyZZ release_pending_monitor_events_LDKWatch_jcall(const void* this_arg) {
        LDKWatch_JCalls *j_calls = (LDKWatch_JCalls*) this_arg;
-       uint32_tArray ret = (uint32_tArray)js_invoke_function_u_(j_calls->instance_ptr, 18);
+       uint32_tArray ret = (uint32_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 18, 0, 0, 0, 0, 0, 0);
        LDKCVec_C3Tuple_OutPointCVec_MonitorEventZPublicKeyZZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
@@ -5420,7 +5420,7 @@ uint32_tArray  __attribute__((export_name("TS_Watch_release_pending_monitor_even
        LDKCVec_C3Tuple_OutPointCVec_MonitorEventZPublicKeyZZ ret_var = (this_arg_conv->release_pending_monitor_events)(this_arg_conv->this_arg);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t x = 0; x < ret_var.datalen; x++) {
                LDKC3Tuple_OutPointCVec_MonitorEventZPublicKeyZ* ret_conv_49_conv = MALLOC(sizeof(LDKC3Tuple_OutPointCVec_MonitorEventZPublicKeyZ), "LDKC3Tuple_OutPointCVec_MonitorEventZPublicKeyZ");
                *ret_conv_49_conv = ret_var.data[x];
@@ -5447,7 +5447,7 @@ void broadcast_transaction_LDKBroadcasterInterface_jcall(const void* this_arg, L
        int8_tArray tx_arr = init_int8_tArray(tx_var.datalen, __LINE__);
        memcpy(tx_arr->elems, tx_var.data, tx_var.datalen);
        Transaction_free(tx_var);
-       js_invoke_function_u_u(j_calls->instance_ptr, 19, (uint32_t)tx_arr);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 19, (uint32_t)tx_arr, 0, 0, 0, 0, 0);
 }
 static void LDKBroadcasterInterface_JCalls_cloned(LDKBroadcasterInterface* new_obj) {
        LDKBroadcasterInterface_JCalls *j_calls = (LDKBroadcasterInterface_JCalls*) new_obj->this_arg;
@@ -5495,7 +5495,7 @@ static void LDKKeysInterface_JCalls_free(void* this_arg) {
 LDKCResult_SecretKeyNoneZ get_node_secret_LDKKeysInterface_jcall(const void* this_arg, LDKRecipient recipient) {
        LDKKeysInterface_JCalls *j_calls = (LDKKeysInterface_JCalls*) this_arg;
        uint32_t recipient_conv = LDKRecipient_to_js(recipient);
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 20, (uint32_t)recipient_conv);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 20, (uint32_t)recipient_conv, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SecretKeyNoneZ ret_conv = *(LDKCResult_SecretKeyNoneZ*)(ret_ptr);
@@ -5504,7 +5504,7 @@ LDKCResult_SecretKeyNoneZ get_node_secret_LDKKeysInterface_jcall(const void* thi
 }
 LDKCVec_u8Z get_destination_script_LDKKeysInterface_jcall(const void* this_arg) {
        LDKKeysInterface_JCalls *j_calls = (LDKKeysInterface_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_u_(j_calls->instance_ptr, 21);
+       int8_tArray ret = (int8_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 21, 0, 0, 0, 0, 0, 0);
        LDKCVec_u8Z ret_ref;
        ret_ref.datalen = ret->arr_len;
        ret_ref.data = MALLOC(ret_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -5513,7 +5513,7 @@ LDKCVec_u8Z get_destination_script_LDKKeysInterface_jcall(const void* this_arg)
 }
 LDKShutdownScript get_shutdown_scriptpubkey_LDKKeysInterface_jcall(const void* this_arg) {
        LDKKeysInterface_JCalls *j_calls = (LDKKeysInterface_JCalls*) this_arg;
-       uint32_t ret = js_invoke_function_u_(j_calls->instance_ptr, 22);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 22, 0, 0, 0, 0, 0, 0);
        LDKShutdownScript ret_conv;
        ret_conv.inner = (void*)(ret & (~1));
        ret_conv.is_owned = (ret & 1) || (ret == 0);
@@ -5524,7 +5524,7 @@ LDKSign get_channel_signer_LDKKeysInterface_jcall(const void* this_arg, bool inb
        LDKKeysInterface_JCalls *j_calls = (LDKKeysInterface_JCalls*) this_arg;
        jboolean inbound_conv = inbound;
        int64_t channel_value_satoshis_conv = channel_value_satoshis;
-       uint32_t ret = js_invoke_function_u_bb(j_calls->instance_ptr, 23, (uint32_t)inbound_conv, (uint32_t)channel_value_satoshis_conv);
+       uint32_t ret = js_invoke_function_ubuuuu(j_calls->instance_ptr, 23, (uint32_t)inbound_conv, (uint32_t)channel_value_satoshis_conv, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKSign ret_conv = *(LDKSign*)(ret_ptr);
@@ -5533,7 +5533,7 @@ LDKSign get_channel_signer_LDKKeysInterface_jcall(const void* this_arg, bool inb
 }
 LDKThirtyTwoBytes get_secure_random_bytes_LDKKeysInterface_jcall(const void* this_arg) {
        LDKKeysInterface_JCalls *j_calls = (LDKKeysInterface_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_u_(j_calls->instance_ptr, 24);
+       int8_tArray ret = (int8_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 24, 0, 0, 0, 0, 0, 0);
        LDKThirtyTwoBytes ret_ref;
        CHECK(ret->arr_len == 32);
        memcpy(ret_ref.data, ret->elems, 32); FREE(ret);
@@ -5544,7 +5544,7 @@ LDKCResult_SignDecodeErrorZ read_chan_signer_LDKKeysInterface_jcall(const void*
        LDKu8slice reader_var = reader;
        int8_tArray reader_arr = init_int8_tArray(reader_var.datalen, __LINE__);
        memcpy(reader_arr->elems, reader_var.data, reader_var.datalen);
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 25, (uint32_t)reader_arr);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 25, (uint32_t)reader_arr, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignDecodeErrorZ ret_conv = *(LDKCResult_SignDecodeErrorZ*)(ret_ptr);
@@ -5559,7 +5559,7 @@ LDKCResult_RecoverableSignatureNoneZ sign_invoice_LDKKeysInterface_jcall(const v
        LDKCVec_u5Z invoice_data_var = invoice_data;
        ptrArray invoice_data_arr = NULL;
        invoice_data_arr = init_ptrArray(invoice_data_var.datalen, __LINE__);
-       int8_t *invoice_data_arr_ptr = (int8_t*)(((uint8_t*)invoice_data_arr) + 4);
+       int8_t *invoice_data_arr_ptr = (int8_t*)(((uint8_t*)invoice_data_arr) + 8);
        for (size_t h = 0; h < invoice_data_var.datalen; h++) {
                uint8_t invoice_data_conv_7_val = invoice_data_var.data[h]._0;
                invoice_data_arr_ptr[h] = invoice_data_conv_7_val;
@@ -5567,7 +5567,7 @@ LDKCResult_RecoverableSignatureNoneZ sign_invoice_LDKKeysInterface_jcall(const v
        
        FREE(invoice_data_var.data);
        uint32_t receipient_conv = LDKRecipient_to_js(receipient);
-       uint32_t ret = js_invoke_function_u_uuu(j_calls->instance_ptr, 26, (uint32_t)hrp_bytes_arr, (uint32_t)invoice_data_arr, (uint32_t)receipient_conv);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 26, (uint32_t)hrp_bytes_arr, (uint32_t)invoice_data_arr, (uint32_t)receipient_conv, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_RecoverableSignatureNoneZ ret_conv = *(LDKCResult_RecoverableSignatureNoneZ*)(ret_ptr);
@@ -5576,7 +5576,7 @@ LDKCResult_RecoverableSignatureNoneZ sign_invoice_LDKKeysInterface_jcall(const v
 }
 LDKThirtyTwoBytes get_inbound_payment_key_material_LDKKeysInterface_jcall(const void* this_arg) {
        LDKKeysInterface_JCalls *j_calls = (LDKKeysInterface_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_u_(j_calls->instance_ptr, 27);
+       int8_tArray ret = (int8_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 27, 0, 0, 0, 0, 0, 0);
        LDKThirtyTwoBytes ret_ref;
        CHECK(ret->arr_len == 32);
        memcpy(ret_ref.data, ret->elems, 32); FREE(ret);
@@ -5727,7 +5727,7 @@ static void LDKFeeEstimator_JCalls_free(void* this_arg) {
 uint32_t get_est_sat_per_1000_weight_LDKFeeEstimator_jcall(const void* this_arg, LDKConfirmationTarget confirmation_target) {
        LDKFeeEstimator_JCalls *j_calls = (LDKFeeEstimator_JCalls*) this_arg;
        uint32_t confirmation_target_conv = LDKConfirmationTarget_to_js(confirmation_target);
-       return js_invoke_function_u_u(j_calls->instance_ptr, 28, (uint32_t)confirmation_target_conv);
+       return js_invoke_function_uuuuuu(j_calls->instance_ptr, 28, (uint32_t)confirmation_target_conv, 0, 0, 0, 0, 0);
 }
 static void LDKFeeEstimator_JCalls_cloned(LDKFeeEstimator* new_obj) {
        LDKFeeEstimator_JCalls *j_calls = (LDKFeeEstimator_JCalls*) new_obj->this_arg;
@@ -5895,17 +5895,17 @@ static void LDKType_JCalls_free(void* this_arg) {
 }
 uint16_t type_id_LDKType_jcall(const void* this_arg) {
        LDKType_JCalls *j_calls = (LDKType_JCalls*) this_arg;
-       return js_invoke_function_u_(j_calls->instance_ptr, 29);
+       return js_invoke_function_uuuuuu(j_calls->instance_ptr, 29, 0, 0, 0, 0, 0, 0);
 }
 LDKStr debug_str_LDKType_jcall(const void* this_arg) {
        LDKType_JCalls *j_calls = (LDKType_JCalls*) this_arg;
-       jstring ret = (jstring)js_invoke_function_u_(j_calls->instance_ptr, 30);
+       jstring ret = (jstring)js_invoke_function_uuuuuu(j_calls->instance_ptr, 30, 0, 0, 0, 0, 0, 0);
        LDKStr ret_conv = str_ref_to_owned_c(ret);
        return ret_conv;
 }
 LDKCVec_u8Z write_LDKType_jcall(const void* this_arg) {
        LDKType_JCalls *j_calls = (LDKType_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_u_(j_calls->instance_ptr, 31);
+       int8_tArray ret = (int8_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 31, 0, 0, 0, 0, 0, 0);
        LDKCVec_u8Z ret_ref;
        ret_ref.datalen = ret->arr_len;
        ret_ref.data = MALLOC(ret_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -6645,7 +6645,7 @@ uint32_tArray  __attribute__((export_name("TS_C2Tuple_TxidCVec_C2Tuple_u32Script
        LDKCVec_C2Tuple_u32ScriptZZ ret_var = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_b(owner_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t v = 0; v < ret_var.datalen; v++) {
                LDKC2Tuple_u32ScriptZ* ret_conv_21_conv = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ), "LDKC2Tuple_u32ScriptZ");
                *ret_conv_21_conv = ret_var.data[v];
@@ -6714,7 +6714,7 @@ uint32_tArray  __attribute__((export_name("TS_C2Tuple_TxidCVec_C2Tuple_u32TxOutZ
        LDKCVec_C2Tuple_u32TxOutZZ ret_var = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_b(owner_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t u = 0; u < ret_var.datalen; u++) {
                LDKC2Tuple_u32TxOutZ* ret_conv_20_conv = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ), "LDKC2Tuple_u32TxOutZ");
                *ret_conv_20_conv = ret_var.data[u];
@@ -8300,7 +8300,7 @@ void register_tx_LDKFilter_jcall(const void* this_arg, const uint8_t (* txid)[32
        LDKu8slice script_pubkey_var = script_pubkey;
        int8_tArray script_pubkey_arr = init_int8_tArray(script_pubkey_var.datalen, __LINE__);
        memcpy(script_pubkey_arr->elems, script_pubkey_var.data, script_pubkey_var.datalen);
-       js_invoke_function_u_uu(j_calls->instance_ptr, 32, (uint32_t)txid_arr, (uint32_t)script_pubkey_arr);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 32, (uint32_t)txid_arr, (uint32_t)script_pubkey_arr, 0, 0, 0, 0);
 }
 LDKCOption_C2Tuple_usizeTransactionZZ register_output_LDKFilter_jcall(const void* this_arg, LDKWatchedOutput output) {
        LDKFilter_JCalls *j_calls = (LDKFilter_JCalls*) this_arg;
@@ -8313,7 +8313,7 @@ LDKCOption_C2Tuple_usizeTransactionZZ register_output_LDKFilter_jcall(const void
        if (output_var.is_owned) {
                output_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 33, (uint32_t)output_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 33, (uint32_t)output_ref, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCOption_C2Tuple_usizeTransactionZZ ret_conv = *(LDKCOption_C2Tuple_usizeTransactionZZ*)(ret_ptr);
@@ -8435,7 +8435,7 @@ static void LDKMessageSendEventsProvider_JCalls_free(void* this_arg) {
 }
 LDKCVec_MessageSendEventZ get_and_clear_pending_msg_events_LDKMessageSendEventsProvider_jcall(const void* this_arg) {
        LDKMessageSendEventsProvider_JCalls *j_calls = (LDKMessageSendEventsProvider_JCalls*) this_arg;
-       uint32_tArray ret = (uint32_tArray)js_invoke_function_u_(j_calls->instance_ptr, 34);
+       uint32_tArray ret = (uint32_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 34, 0, 0, 0, 0, 0, 0);
        LDKCVec_MessageSendEventZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
@@ -8482,7 +8482,7 @@ uint32_tArray  __attribute__((export_name("TS_MessageSendEventsProvider_get_and_
        LDKCVec_MessageSendEventZ ret_var = (this_arg_conv->get_and_clear_pending_msg_events)(this_arg_conv->this_arg);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t s = 0; s < ret_var.datalen; s++) {
                LDKMessageSendEvent *ret_conv_18_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
                *ret_conv_18_copy = ret_var.data[s];
@@ -8508,7 +8508,7 @@ void handle_event_LDKEventHandler_jcall(const void* this_arg, const LDKEvent * e
        LDKEventHandler_JCalls *j_calls = (LDKEventHandler_JCalls*) this_arg;
        LDKEvent *ret_event = MALLOC(sizeof(LDKEvent), "LDKEvent ret conversion");
        *ret_event = Event_clone(event);
-       js_invoke_function_u_u(j_calls->instance_ptr, 35, (uint32_t)(uint32_t)ret_event);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 35, (uint32_t)(uint32_t)ret_event, 0, 0, 0, 0, 0);
 }
 static void LDKEventHandler_JCalls_cloned(LDKEventHandler* new_obj) {
        LDKEventHandler_JCalls *j_calls = (LDKEventHandler_JCalls*) new_obj->this_arg;
@@ -8553,7 +8553,7 @@ void process_pending_events_LDKEventsProvider_jcall(const void* this_arg, LDKEve
        LDKEventsProvider_JCalls *j_calls = (LDKEventsProvider_JCalls*) this_arg;
        LDKEventHandler* handler_ret = MALLOC(sizeof(LDKEventHandler), "LDKEventHandler");
        *handler_ret = handler;
-       js_invoke_function_u_u(j_calls->instance_ptr, 36, (uint32_t)(uint32_t)handler_ret);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 36, (uint32_t)(uint32_t)handler_ret, 0, 0, 0, 0, 0);
 }
 static void LDKEventsProvider_JCalls_cloned(LDKEventsProvider* new_obj) {
        LDKEventsProvider_JCalls *j_calls = (LDKEventsProvider_JCalls*) new_obj->this_arg;
@@ -8632,14 +8632,14 @@ uint64_t channel_penalty_msat_LDKScore_jcall(const void* this_arg, uint64_t shor
        if (usage_var.is_owned) {
                usage_ref |= 1;
        }
-       return js_invoke_function_b_uuuu(j_calls->instance_ptr, 37, (uint32_t)short_channel_id_conv, (uint32_t)source_ref, (uint32_t)target_ref, (uint32_t)usage_ref);
+       return js_invoke_function_buuuuu(j_calls->instance_ptr, 37, (uint32_t)short_channel_id_conv, (uint32_t)source_ref, (uint32_t)target_ref, (uint32_t)usage_ref, 0, 0);
 }
 void payment_path_failed_LDKScore_jcall(void* this_arg, LDKCVec_RouteHopZ path, uint64_t short_channel_id) {
        LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
        LDKCVec_RouteHopZ path_var = path;
        uint32_tArray path_arr = NULL;
        path_arr = init_uint32_tArray(path_var.datalen, __LINE__);
-       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 4);
+       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 8);
        for (size_t k = 0; k < path_var.datalen; k++) {
                LDKRouteHop path_conv_10_var = path_var.data[k];
                uint32_t path_conv_10_ref = 0;
@@ -8655,14 +8655,14 @@ void payment_path_failed_LDKScore_jcall(void* this_arg, LDKCVec_RouteHopZ path,
        
        FREE(path_var.data);
        int64_t short_channel_id_conv = short_channel_id;
-       js_invoke_function_u_bb(j_calls->instance_ptr, 38, (uint32_t)path_arr, (uint32_t)short_channel_id_conv);
+       js_invoke_function_ubuuuu(j_calls->instance_ptr, 38, (uint32_t)path_arr, (uint32_t)short_channel_id_conv, 0, 0, 0, 0);
 }
 void payment_path_successful_LDKScore_jcall(void* this_arg, LDKCVec_RouteHopZ path) {
        LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
        LDKCVec_RouteHopZ path_var = path;
        uint32_tArray path_arr = NULL;
        path_arr = init_uint32_tArray(path_var.datalen, __LINE__);
-       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 4);
+       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 8);
        for (size_t k = 0; k < path_var.datalen; k++) {
                LDKRouteHop path_conv_10_var = path_var.data[k];
                uint32_t path_conv_10_ref = 0;
@@ -8677,14 +8677,14 @@ void payment_path_successful_LDKScore_jcall(void* this_arg, LDKCVec_RouteHopZ pa
        }
        
        FREE(path_var.data);
-       js_invoke_function_u_u(j_calls->instance_ptr, 39, (uint32_t)path_arr);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 39, (uint32_t)path_arr, 0, 0, 0, 0, 0);
 }
 void probe_failed_LDKScore_jcall(void* this_arg, LDKCVec_RouteHopZ path, uint64_t short_channel_id) {
        LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
        LDKCVec_RouteHopZ path_var = path;
        uint32_tArray path_arr = NULL;
        path_arr = init_uint32_tArray(path_var.datalen, __LINE__);
-       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 4);
+       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 8);
        for (size_t k = 0; k < path_var.datalen; k++) {
                LDKRouteHop path_conv_10_var = path_var.data[k];
                uint32_t path_conv_10_ref = 0;
@@ -8700,14 +8700,14 @@ void probe_failed_LDKScore_jcall(void* this_arg, LDKCVec_RouteHopZ path, uint64_
        
        FREE(path_var.data);
        int64_t short_channel_id_conv = short_channel_id;
-       js_invoke_function_u_bb(j_calls->instance_ptr, 40, (uint32_t)path_arr, (uint32_t)short_channel_id_conv);
+       js_invoke_function_ubuuuu(j_calls->instance_ptr, 40, (uint32_t)path_arr, (uint32_t)short_channel_id_conv, 0, 0, 0, 0);
 }
 void probe_successful_LDKScore_jcall(void* this_arg, LDKCVec_RouteHopZ path) {
        LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
        LDKCVec_RouteHopZ path_var = path;
        uint32_tArray path_arr = NULL;
        path_arr = init_uint32_tArray(path_var.datalen, __LINE__);
-       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 4);
+       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 8);
        for (size_t k = 0; k < path_var.datalen; k++) {
                LDKRouteHop path_conv_10_var = path_var.data[k];
                uint32_t path_conv_10_ref = 0;
@@ -8722,11 +8722,11 @@ void probe_successful_LDKScore_jcall(void* this_arg, LDKCVec_RouteHopZ path) {
        }
        
        FREE(path_var.data);
-       js_invoke_function_u_u(j_calls->instance_ptr, 41, (uint32_t)path_arr);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 41, (uint32_t)path_arr, 0, 0, 0, 0, 0);
 }
 LDKCVec_u8Z write_LDKScore_jcall(const void* this_arg) {
        LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_u_(j_calls->instance_ptr, 42);
+       int8_tArray ret = (int8_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 42, 0, 0, 0, 0, 0, 0);
        LDKCVec_u8Z ret_ref;
        ret_ref.datalen = ret->arr_len;
        ret_ref.data = MALLOC(ret_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -8909,7 +8909,7 @@ LDKCResult_NoneErrorZ persist_manager_LDKPersister_jcall(const void* this_arg, c
        if (channel_manager_var.is_owned) {
                channel_manager_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 43, (uint32_t)channel_manager_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 43, (uint32_t)channel_manager_ref, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneErrorZ ret_conv = *(LDKCResult_NoneErrorZ*)(ret_ptr);
@@ -8928,7 +8928,7 @@ LDKCResult_NoneErrorZ persist_graph_LDKPersister_jcall(const void* this_arg, con
        if (network_graph_var.is_owned) {
                network_graph_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 44, (uint32_t)network_graph_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 44, (uint32_t)network_graph_ref, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneErrorZ ret_conv = *(LDKCResult_NoneErrorZ*)(ret_ptr);
@@ -8947,7 +8947,7 @@ LDKCResult_NoneErrorZ persist_scorer_LDKPersister_jcall(const void* this_arg, co
        if (scorer_var.is_owned) {
                scorer_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 45, (uint32_t)scorer_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 45, (uint32_t)scorer_ref, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneErrorZ ret_conv = *(LDKCResult_NoneErrorZ*)(ret_ptr);
@@ -9033,7 +9033,7 @@ void filtered_block_connected_LDKListen_jcall(const void* this_arg, const uint8_
        LDKCVec_C2Tuple_usizeTransactionZZ txdata_var = txdata;
        uint32_tArray txdata_arr = NULL;
        txdata_arr = init_uint32_tArray(txdata_var.datalen, __LINE__);
-       uint32_t *txdata_arr_ptr = (uint32_t*)(((uint8_t*)txdata_arr) + 4);
+       uint32_t *txdata_arr_ptr = (uint32_t*)(((uint8_t*)txdata_arr) + 8);
        for (size_t c = 0; c < txdata_var.datalen; c++) {
                LDKC2Tuple_usizeTransactionZ* txdata_conv_28_conv = MALLOC(sizeof(LDKC2Tuple_usizeTransactionZ), "LDKC2Tuple_usizeTransactionZ");
                *txdata_conv_28_conv = txdata_var.data[c];
@@ -9042,7 +9042,7 @@ void filtered_block_connected_LDKListen_jcall(const void* this_arg, const uint8_
        
        FREE(txdata_var.data);
        int32_t height_conv = height;
-       js_invoke_function_u_uuu(j_calls->instance_ptr, 46, (uint32_t)header_arr, (uint32_t)txdata_arr, (uint32_t)height_conv);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 46, (uint32_t)header_arr, (uint32_t)txdata_arr, (uint32_t)height_conv, 0, 0, 0);
 }
 void block_connected_LDKListen_jcall(const void* this_arg, LDKu8slice block, uint32_t height) {
        LDKListen_JCalls *j_calls = (LDKListen_JCalls*) this_arg;
@@ -9050,14 +9050,14 @@ void block_connected_LDKListen_jcall(const void* this_arg, LDKu8slice block, uin
        int8_tArray block_arr = init_int8_tArray(block_var.datalen, __LINE__);
        memcpy(block_arr->elems, block_var.data, block_var.datalen);
        int32_t height_conv = height;
-       js_invoke_function_u_uu(j_calls->instance_ptr, 47, (uint32_t)block_arr, (uint32_t)height_conv);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 47, (uint32_t)block_arr, (uint32_t)height_conv, 0, 0, 0, 0);
 }
 void block_disconnected_LDKListen_jcall(const void* this_arg, const uint8_t (* header)[80], uint32_t height) {
        LDKListen_JCalls *j_calls = (LDKListen_JCalls*) this_arg;
        int8_tArray header_arr = init_int8_tArray(80, __LINE__);
        memcpy(header_arr->elems, *header, 80);
        int32_t height_conv = height;
-       js_invoke_function_u_uu(j_calls->instance_ptr, 48, (uint32_t)header_arr, (uint32_t)height_conv);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 48, (uint32_t)header_arr, (uint32_t)height_conv, 0, 0, 0, 0);
 }
 static void LDKListen_JCalls_cloned(LDKListen* new_obj) {
        LDKListen_JCalls *j_calls = (LDKListen_JCalls*) new_obj->this_arg;
@@ -9148,7 +9148,7 @@ void transactions_confirmed_LDKConfirm_jcall(const void* this_arg, const uint8_t
        LDKCVec_C2Tuple_usizeTransactionZZ txdata_var = txdata;
        uint32_tArray txdata_arr = NULL;
        txdata_arr = init_uint32_tArray(txdata_var.datalen, __LINE__);
-       uint32_t *txdata_arr_ptr = (uint32_t*)(((uint8_t*)txdata_arr) + 4);
+       uint32_t *txdata_arr_ptr = (uint32_t*)(((uint8_t*)txdata_arr) + 8);
        for (size_t c = 0; c < txdata_var.datalen; c++) {
                LDKC2Tuple_usizeTransactionZ* txdata_conv_28_conv = MALLOC(sizeof(LDKC2Tuple_usizeTransactionZ), "LDKC2Tuple_usizeTransactionZ");
                *txdata_conv_28_conv = txdata_var.data[c];
@@ -9157,24 +9157,24 @@ void transactions_confirmed_LDKConfirm_jcall(const void* this_arg, const uint8_t
        
        FREE(txdata_var.data);
        int32_t height_conv = height;
-       js_invoke_function_u_uuu(j_calls->instance_ptr, 49, (uint32_t)header_arr, (uint32_t)txdata_arr, (uint32_t)height_conv);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 49, (uint32_t)header_arr, (uint32_t)txdata_arr, (uint32_t)height_conv, 0, 0, 0);
 }
 void transaction_unconfirmed_LDKConfirm_jcall(const void* this_arg, const uint8_t (* txid)[32]) {
        LDKConfirm_JCalls *j_calls = (LDKConfirm_JCalls*) this_arg;
        int8_tArray txid_arr = init_int8_tArray(32, __LINE__);
        memcpy(txid_arr->elems, *txid, 32);
-       js_invoke_function_u_u(j_calls->instance_ptr, 50, (uint32_t)txid_arr);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 50, (uint32_t)txid_arr, 0, 0, 0, 0, 0);
 }
 void best_block_updated_LDKConfirm_jcall(const void* this_arg, const uint8_t (* header)[80], uint32_t height) {
        LDKConfirm_JCalls *j_calls = (LDKConfirm_JCalls*) this_arg;
        int8_tArray header_arr = init_int8_tArray(80, __LINE__);
        memcpy(header_arr->elems, *header, 80);
        int32_t height_conv = height;
-       js_invoke_function_u_uu(j_calls->instance_ptr, 51, (uint32_t)header_arr, (uint32_t)height_conv);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 51, (uint32_t)header_arr, (uint32_t)height_conv, 0, 0, 0, 0);
 }
 LDKCVec_TxidZ get_relevant_txids_LDKConfirm_jcall(const void* this_arg) {
        LDKConfirm_JCalls *j_calls = (LDKConfirm_JCalls*) this_arg;
-       ptrArray ret = (ptrArray)js_invoke_function_u_(j_calls->instance_ptr, 52);
+       ptrArray ret = (ptrArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 52, 0, 0, 0, 0, 0, 0);
        LDKCVec_TxidZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
@@ -9272,7 +9272,7 @@ ptrArray  __attribute__((export_name("TS_Confirm_get_relevant_txids"))) TS_Confi
        LDKCVec_TxidZ ret_var = (this_arg_conv->get_relevant_txids)(this_arg_conv->this_arg);
        ptrArray ret_arr = NULL;
        ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 4);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
        for (size_t m = 0; m < ret_var.datalen; m++) {
                int8_tArray ret_conv_12_arr = init_int8_tArray(32, __LINE__);
                memcpy(ret_conv_12_arr->elems, ret_var.data[m].data, 32);
@@ -9323,7 +9323,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ persist_new_channel_LDKPersist_jcall(con
        if (update_id_var.is_owned) {
                update_id_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_uuu(j_calls->instance_ptr, 53, (uint32_t)channel_id_ref, (uint32_t)data_ref, (uint32_t)update_id_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 53, (uint32_t)channel_id_ref, (uint32_t)data_ref, (uint32_t)update_id_ref, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
@@ -9372,7 +9372,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcal
        if (update_id_var.is_owned) {
                update_id_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_uuuu(j_calls->instance_ptr, 54, (uint32_t)channel_id_ref, (uint32_t)update_ref, (uint32_t)data_ref, (uint32_t)update_id_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 54, (uint32_t)channel_id_ref, (uint32_t)update_ref, (uint32_t)data_ref, (uint32_t)update_id_ref, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
@@ -9485,7 +9485,7 @@ void handle_open_channel_LDKChannelMessageHandler_jcall(const void* this_arg, LD
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uuu(j_calls->instance_ptr, 55, (uint32_t)their_node_id_arr, (uint32_t)their_features_ref, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 55, (uint32_t)their_node_id_arr, (uint32_t)their_features_ref, (uint32_t)msg_ref, 0, 0, 0);
 }
 void handle_accept_channel_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, LDKInitFeatures their_features, const LDKAcceptChannel * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9510,7 +9510,7 @@ void handle_accept_channel_LDKChannelMessageHandler_jcall(const void* this_arg,
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uuu(j_calls->instance_ptr, 56, (uint32_t)their_node_id_arr, (uint32_t)their_features_ref, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 56, (uint32_t)their_node_id_arr, (uint32_t)their_features_ref, (uint32_t)msg_ref, 0, 0, 0);
 }
 void handle_funding_created_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKFundingCreated * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9526,7 +9526,7 @@ void handle_funding_created_LDKChannelMessageHandler_jcall(const void* this_arg,
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 57, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 57, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_funding_signed_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKFundingSigned * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9542,7 +9542,7 @@ void handle_funding_signed_LDKChannelMessageHandler_jcall(const void* this_arg,
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 58, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 58, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_channel_ready_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKChannelReady * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9558,7 +9558,7 @@ void handle_channel_ready_LDKChannelMessageHandler_jcall(const void* this_arg, L
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 59, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 59, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_shutdown_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKInitFeatures * their_features, const LDKShutdown * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9584,7 +9584,7 @@ void handle_shutdown_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPub
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uuu(j_calls->instance_ptr, 60, (uint32_t)their_node_id_arr, (uint32_t)their_features_ref, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 60, (uint32_t)their_node_id_arr, (uint32_t)their_features_ref, (uint32_t)msg_ref, 0, 0, 0);
 }
 void handle_closing_signed_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKClosingSigned * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9600,7 +9600,7 @@ void handle_closing_signed_LDKChannelMessageHandler_jcall(const void* this_arg,
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 61, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 61, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_update_add_htlc_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKUpdateAddHTLC * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9616,7 +9616,7 @@ void handle_update_add_htlc_LDKChannelMessageHandler_jcall(const void* this_arg,
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 62, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 62, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_update_fulfill_htlc_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKUpdateFulfillHTLC * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9632,7 +9632,7 @@ void handle_update_fulfill_htlc_LDKChannelMessageHandler_jcall(const void* this_
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 63, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 63, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_update_fail_htlc_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKUpdateFailHTLC * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9648,7 +9648,7 @@ void handle_update_fail_htlc_LDKChannelMessageHandler_jcall(const void* this_arg
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 64, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 64, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_update_fail_malformed_htlc_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKUpdateFailMalformedHTLC * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9664,7 +9664,7 @@ void handle_update_fail_malformed_htlc_LDKChannelMessageHandler_jcall(const void
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 65, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 65, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_commitment_signed_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKCommitmentSigned * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9680,7 +9680,7 @@ void handle_commitment_signed_LDKChannelMessageHandler_jcall(const void* this_ar
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 66, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 66, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_revoke_and_ack_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKRevokeAndACK * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9696,7 +9696,7 @@ void handle_revoke_and_ack_LDKChannelMessageHandler_jcall(const void* this_arg,
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 67, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 67, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_update_fee_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKUpdateFee * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9712,7 +9712,7 @@ void handle_update_fee_LDKChannelMessageHandler_jcall(const void* this_arg, LDKP
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 68, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 68, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_announcement_signatures_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKAnnouncementSignatures * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9728,14 +9728,14 @@ void handle_announcement_signatures_LDKChannelMessageHandler_jcall(const void* t
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 69, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 69, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void peer_disconnected_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, bool no_connection_possible) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
        int8_tArray their_node_id_arr = init_int8_tArray(33, __LINE__);
        memcpy(their_node_id_arr->elems, their_node_id.compressed_form, 33);
        jboolean no_connection_possible_conv = no_connection_possible;
-       js_invoke_function_u_uu(j_calls->instance_ptr, 70, (uint32_t)their_node_id_arr, (uint32_t)no_connection_possible_conv);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 70, (uint32_t)their_node_id_arr, (uint32_t)no_connection_possible_conv, 0, 0, 0, 0);
 }
 void peer_connected_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKInit * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9751,7 +9751,7 @@ void peer_connected_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPubl
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 71, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 71, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_channel_reestablish_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKChannelReestablish * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9767,7 +9767,7 @@ void handle_channel_reestablish_LDKChannelMessageHandler_jcall(const void* this_
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 72, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 72, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_channel_update_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKChannelUpdate * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9783,7 +9783,7 @@ void handle_channel_update_LDKChannelMessageHandler_jcall(const void* this_arg,
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 73, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 73, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_error_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKErrorMessage * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9799,7 +9799,7 @@ void handle_error_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublic
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 74, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 74, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 static void LDKChannelMessageHandler_JCalls_cloned(LDKChannelMessageHandler* new_obj) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) new_obj->this_arg;
@@ -10157,7 +10157,7 @@ LDKCResult_boolLightningErrorZ handle_node_announcement_LDKRoutingMessageHandler
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 75, (uint32_t)msg_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 75, (uint32_t)msg_ref, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
@@ -10176,7 +10176,7 @@ LDKCResult_boolLightningErrorZ handle_channel_announcement_LDKRoutingMessageHand
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 76, (uint32_t)msg_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 76, (uint32_t)msg_ref, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
@@ -10195,7 +10195,7 @@ LDKCResult_boolLightningErrorZ handle_channel_update_LDKRoutingMessageHandler_jc
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 77, (uint32_t)msg_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 77, (uint32_t)msg_ref, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
@@ -10206,7 +10206,7 @@ LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ get_next_channel
        LDKRoutingMessageHandler_JCalls *j_calls = (LDKRoutingMessageHandler_JCalls*) this_arg;
        int64_t starting_point_conv = starting_point;
        int8_t batch_amount_conv = batch_amount;
-       uint32_tArray ret = (uint32_tArray)js_invoke_function_u_uu(j_calls->instance_ptr, 78, (uint32_t)starting_point_conv, (uint32_t)batch_amount_conv);
+       uint32_tArray ret = (uint32_tArray)js_invoke_function_buuuuu(j_calls->instance_ptr, 78, (uint32_t)starting_point_conv, (uint32_t)batch_amount_conv, 0, 0, 0, 0);
        LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
@@ -10230,7 +10230,7 @@ LDKCVec_NodeAnnouncementZ get_next_node_announcements_LDKRoutingMessageHandler_j
        int8_tArray starting_point_arr = init_int8_tArray(33, __LINE__);
        memcpy(starting_point_arr->elems, starting_point.compressed_form, 33);
        int8_t batch_amount_conv = batch_amount;
-       uint32_tArray ret = (uint32_tArray)js_invoke_function_u_uu(j_calls->instance_ptr, 79, (uint32_t)starting_point_arr, (uint32_t)batch_amount_conv);
+       uint32_tArray ret = (uint32_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 79, (uint32_t)starting_point_arr, (uint32_t)batch_amount_conv, 0, 0, 0, 0);
        LDKCVec_NodeAnnouncementZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
@@ -10263,7 +10263,7 @@ void peer_connected_LDKRoutingMessageHandler_jcall(const void* this_arg, LDKPubl
        if (init_var.is_owned) {
                init_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 80, (uint32_t)their_node_id_arr, (uint32_t)init_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 80, (uint32_t)their_node_id_arr, (uint32_t)init_ref, 0, 0, 0, 0);
 }
 LDKCResult_NoneLightningErrorZ handle_reply_channel_range_LDKRoutingMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, LDKReplyChannelRange msg) {
        LDKRoutingMessageHandler_JCalls *j_calls = (LDKRoutingMessageHandler_JCalls*) this_arg;
@@ -10278,7 +10278,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_channel_range_LDKRoutingMessageHandl
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 81, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 81, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
@@ -10298,7 +10298,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_short_channel_ids_end_LDKRoutingMess
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 82, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 82, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
@@ -10318,7 +10318,7 @@ LDKCResult_NoneLightningErrorZ handle_query_channel_range_LDKRoutingMessageHandl
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 83, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 83, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
@@ -10338,7 +10338,7 @@ LDKCResult_NoneLightningErrorZ handle_query_short_channel_ids_LDKRoutingMessageH
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 84, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 84, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
@@ -10424,7 +10424,7 @@ uint32_tArray  __attribute__((export_name("TS_RoutingMessageHandler_get_next_cha
        LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ ret_var = (this_arg_conv->get_next_channel_announcements)(this_arg_conv->this_arg, starting_point, batch_amount);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t h = 0; h < ret_var.datalen; h++) {
                LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* ret_conv_59_conv = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ), "LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ");
                *ret_conv_59_conv = ret_var.data[h];
@@ -10445,7 +10445,7 @@ uint32_tArray  __attribute__((export_name("TS_RoutingMessageHandler_get_next_nod
        LDKCVec_NodeAnnouncementZ ret_var = (this_arg_conv->get_next_node_announcements)(this_arg_conv->this_arg, starting_point_ref, batch_amount);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t s = 0; s < ret_var.datalen; s++) {
                LDKNodeAnnouncement ret_conv_18_var = ret_var.data[s];
                uint32_t ret_conv_18_ref = 0;
@@ -10561,7 +10561,7 @@ LDKCResult_COption_TypeZDecodeErrorZ read_LDKCustomMessageReader_jcall(const voi
        LDKu8slice buffer_var = buffer;
        int8_tArray buffer_arr = init_int8_tArray(buffer_var.datalen, __LINE__);
        memcpy(buffer_arr->elems, buffer_var.data, buffer_var.datalen);
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 85, (uint32_t)message_type_conv, (uint32_t)buffer_arr);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 85, (uint32_t)message_type_conv, (uint32_t)buffer_arr, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_COption_TypeZDecodeErrorZ ret_conv = *(LDKCResult_COption_TypeZDecodeErrorZ*)(ret_ptr);
@@ -10619,7 +10619,7 @@ LDKCResult_NoneLightningErrorZ handle_custom_message_LDKCustomMessageHandler_jca
        *msg_ret = msg;
        int8_tArray sender_node_id_arr = init_int8_tArray(33, __LINE__);
        memcpy(sender_node_id_arr->elems, sender_node_id.compressed_form, 33);
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 86, (uint32_t)(uint32_t)msg_ret, (uint32_t)sender_node_id_arr);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 86, (uint32_t)(uint32_t)msg_ret, (uint32_t)sender_node_id_arr, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
@@ -10628,7 +10628,7 @@ LDKCResult_NoneLightningErrorZ handle_custom_message_LDKCustomMessageHandler_jca
 }
 LDKCVec_C2Tuple_PublicKeyTypeZZ get_and_clear_pending_msg_LDKCustomMessageHandler_jcall(const void* this_arg) {
        LDKCustomMessageHandler_JCalls *j_calls = (LDKCustomMessageHandler_JCalls*) this_arg;
-       uint32_tArray ret = (uint32_tArray)js_invoke_function_u_(j_calls->instance_ptr, 87);
+       uint32_tArray ret = (uint32_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 87, 0, 0, 0, 0, 0, 0);
        LDKCVec_C2Tuple_PublicKeyTypeZZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
@@ -10698,7 +10698,7 @@ uint32_tArray  __attribute__((export_name("TS_CustomMessageHandler_get_and_clear
        LDKCVec_C2Tuple_PublicKeyTypeZZ ret_var = (this_arg_conv->get_and_clear_pending_msg)(this_arg_conv->this_arg);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t z = 0; z < ret_var.datalen; z++) {
                LDKC2Tuple_PublicKeyTypeZ* ret_conv_25_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyTypeZ), "LDKC2Tuple_PublicKeyTypeZ");
                *ret_conv_25_conv = ret_var.data[z];
@@ -10725,21 +10725,21 @@ uintptr_t send_data_LDKSocketDescriptor_jcall(void* this_arg, LDKu8slice data, b
        int8_tArray data_arr = init_int8_tArray(data_var.datalen, __LINE__);
        memcpy(data_arr->elems, data_var.data, data_var.datalen);
        jboolean resume_read_conv = resume_read;
-       return js_invoke_function_u_uu(j_calls->instance_ptr, 88, (uint32_t)data_arr, (uint32_t)resume_read_conv);
+       return js_invoke_function_uuuuuu(j_calls->instance_ptr, 88, (uint32_t)data_arr, (uint32_t)resume_read_conv, 0, 0, 0, 0);
 }
 void disconnect_socket_LDKSocketDescriptor_jcall(void* this_arg) {
        LDKSocketDescriptor_JCalls *j_calls = (LDKSocketDescriptor_JCalls*) this_arg;
-       js_invoke_function_u_(j_calls->instance_ptr, 89);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 89, 0, 0, 0, 0, 0, 0);
 }
 bool eq_LDKSocketDescriptor_jcall(const void* this_arg, const LDKSocketDescriptor * other_arg) {
        LDKSocketDescriptor_JCalls *j_calls = (LDKSocketDescriptor_JCalls*) this_arg;
        LDKSocketDescriptor *other_arg_clone = MALLOC(sizeof(LDKSocketDescriptor), "LDKSocketDescriptor");
        *other_arg_clone = SocketDescriptor_clone(other_arg);
-       return js_invoke_function_u_u(j_calls->instance_ptr, 90, (uint32_t)(uint32_t)other_arg_clone);
+       return js_invoke_function_uuuuuu(j_calls->instance_ptr, 90, (uint32_t)(uint32_t)other_arg_clone, 0, 0, 0, 0, 0);
 }
 uint64_t hash_LDKSocketDescriptor_jcall(const void* this_arg) {
        LDKSocketDescriptor_JCalls *j_calls = (LDKSocketDescriptor_JCalls*) this_arg;
-       return js_invoke_function_b_(j_calls->instance_ptr, 91);
+       return js_invoke_function_uuuuuu(j_calls->instance_ptr, 91, 0, 0, 0, 0, 0, 0);
 }
 static void LDKSocketDescriptor_JCalls_cloned(LDKSocketDescriptor* new_obj) {
        LDKSocketDescriptor_JCalls *j_calls = (LDKSocketDescriptor_JCalls*) new_obj->this_arg;
@@ -10840,7 +10840,7 @@ static void LDKLockableScore_JCalls_free(void* this_arg) {
 }
 LDKScore lock_LDKLockableScore_jcall(const void* this_arg) {
        LDKLockableScore_JCalls *j_calls = (LDKLockableScore_JCalls*) this_arg;
-       uint32_t ret = js_invoke_function_u_(j_calls->instance_ptr, 92);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 92, 0, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKScore ret_conv = *(LDKScore*)(ret_ptr);
@@ -10930,7 +10930,7 @@ static void LDKPayer_JCalls_free(void* this_arg) {
 }
 LDKPublicKey node_id_LDKPayer_jcall(const void* this_arg) {
        LDKPayer_JCalls *j_calls = (LDKPayer_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_u_(j_calls->instance_ptr, 93);
+       int8_tArray ret = (int8_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 93, 0, 0, 0, 0, 0, 0);
        LDKPublicKey ret_ref;
        CHECK(ret->arr_len == 33);
        memcpy(ret_ref.compressed_form, ret->elems, 33); FREE(ret);
@@ -10938,7 +10938,7 @@ LDKPublicKey node_id_LDKPayer_jcall(const void* this_arg) {
 }
 LDKCVec_ChannelDetailsZ first_hops_LDKPayer_jcall(const void* this_arg) {
        LDKPayer_JCalls *j_calls = (LDKPayer_JCalls*) this_arg;
-       uint32_tArray ret = (uint32_tArray)js_invoke_function_u_(j_calls->instance_ptr, 94);
+       uint32_tArray ret = (uint32_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 94, 0, 0, 0, 0, 0, 0);
        LDKCVec_ChannelDetailsZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
@@ -10973,7 +10973,7 @@ LDKCResult_PaymentIdPaymentSendFailureZ send_payment_LDKPayer_jcall(const void*
        memcpy(payment_hash_arr->elems, payment_hash.data, 32);
        int8_tArray payment_secret_arr = init_int8_tArray(32, __LINE__);
        memcpy(payment_secret_arr->elems, payment_secret.data, 32);
-       uint32_t ret = js_invoke_function_u_uuu(j_calls->instance_ptr, 95, (uint32_t)route_ref, (uint32_t)payment_hash_arr, (uint32_t)payment_secret_arr);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 95, (uint32_t)route_ref, (uint32_t)payment_hash_arr, (uint32_t)payment_secret_arr, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_PaymentIdPaymentSendFailureZ ret_conv = *(LDKCResult_PaymentIdPaymentSendFailureZ*)(ret_ptr);
@@ -10994,7 +10994,7 @@ LDKCResult_PaymentIdPaymentSendFailureZ send_spontaneous_payment_LDKPayer_jcall(
        }
        int8_tArray payment_preimage_arr = init_int8_tArray(32, __LINE__);
        memcpy(payment_preimage_arr->elems, payment_preimage.data, 32);
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 96, (uint32_t)route_ref, (uint32_t)payment_preimage_arr);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 96, (uint32_t)route_ref, (uint32_t)payment_preimage_arr, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_PaymentIdPaymentSendFailureZ ret_conv = *(LDKCResult_PaymentIdPaymentSendFailureZ*)(ret_ptr);
@@ -11015,7 +11015,7 @@ LDKCResult_NonePaymentSendFailureZ retry_payment_LDKPayer_jcall(const void* this
        }
        int8_tArray payment_id_arr = init_int8_tArray(32, __LINE__);
        memcpy(payment_id_arr->elems, payment_id.data, 32);
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 97, (uint32_t)route_ref, (uint32_t)payment_id_arr);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 97, (uint32_t)route_ref, (uint32_t)payment_id_arr, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NonePaymentSendFailureZ ret_conv = *(LDKCResult_NonePaymentSendFailureZ*)(ret_ptr);
@@ -11026,7 +11026,7 @@ void abandon_payment_LDKPayer_jcall(const void* this_arg, LDKThirtyTwoBytes paym
        LDKPayer_JCalls *j_calls = (LDKPayer_JCalls*) this_arg;
        int8_tArray payment_id_arr = init_int8_tArray(32, __LINE__);
        memcpy(payment_id_arr->elems, payment_id.data, 32);
-       js_invoke_function_u_u(j_calls->instance_ptr, 98, (uint32_t)payment_id_arr);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 98, (uint32_t)payment_id_arr, 0, 0, 0, 0, 0);
 }
 static void LDKPayer_JCalls_cloned(LDKPayer* new_obj) {
        LDKPayer_JCalls *j_calls = (LDKPayer_JCalls*) new_obj->this_arg;
@@ -11070,7 +11070,7 @@ uint32_tArray  __attribute__((export_name("TS_Payer_first_hops"))) TS_Payer_firs
        LDKCVec_ChannelDetailsZ ret_var = (this_arg_conv->first_hops)(this_arg_conv->this_arg);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t q = 0; q < ret_var.datalen; q++) {
                LDKChannelDetails ret_conv_16_var = ret_var.data[q];
                uint32_t ret_conv_16_ref = 0;
@@ -11180,7 +11180,7 @@ LDKCResult_RouteLightningErrorZ find_route_LDKRouter_jcall(const void* this_arg,
        if (first_hops != NULL) {
                LDKCVec_ChannelDetailsZ first_hops_var = *first_hops_var_ptr;
                first_hops_arr = init_uint32_tArray(first_hops_var.datalen, __LINE__);
-               uint32_t *first_hops_arr_ptr = (uint32_t*)(((uint8_t*)first_hops_arr) + 4);
+               uint32_t *first_hops_arr_ptr = (uint32_t*)(((uint8_t*)first_hops_arr) + 8);
                for (size_t q = 0; q < first_hops_var.datalen; q++) {
                        LDKChannelDetails first_hops_conv_16_var =      first_hops_var.data[q];
                        uint32_t first_hops_conv_16_ref = 0;
@@ -11197,7 +11197,7 @@ LDKCResult_RouteLightningErrorZ find_route_LDKRouter_jcall(const void* this_arg,
        }
        // WARNING: This object doesn't live past this scope, needs clone!
        uint32_t ret_scorer = ((uintptr_t)scorer) | 1;
-       uint32_t ret = js_invoke_function_u_uuuuu(j_calls->instance_ptr, 99, (uint32_t)payer_arr, (uint32_t)route_params_ref, (uint32_t)payment_hash_arr, (uint32_t)first_hops_arr, (uint32_t)ret_scorer);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 99, (uint32_t)payer_arr, (uint32_t)route_params_ref, (uint32_t)payment_hash_arr, (uint32_t)first_hops_arr, (uint32_t)ret_scorer, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_RouteLightningErrorZ ret_conv = *(LDKCResult_RouteLightningErrorZ*)(ret_ptr);
@@ -23451,7 +23451,7 @@ uint32_tArray  __attribute__((export_name("TS_ChainMonitor_get_claimable_balance
        LDKCVec_BalanceZ ret_var = ChainMonitor_get_claimable_balances(&this_arg_conv, ignored_channels_constr);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t j = 0; j < ret_var.datalen; j++) {
                LDKBalance *ret_conv_9_copy = MALLOC(sizeof(LDKBalance), "LDKBalance");
                *ret_conv_9_copy = ret_var.data[j];
@@ -23486,7 +23486,7 @@ uint32_tArray  __attribute__((export_name("TS_ChainMonitor_list_monitors"))) TS_
        LDKCVec_OutPointZ ret_var = ChainMonitor_list_monitors(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t k = 0; k < ret_var.datalen; k++) {
                LDKOutPoint ret_conv_10_var = ret_var.data[k];
                uint32_t ret_conv_10_ref = 0;
@@ -23989,7 +23989,7 @@ uint32_tArray  __attribute__((export_name("TS_ChannelMonitor_get_outputs_to_watc
        LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ ret_var = ChannelMonitor_get_outputs_to_watch(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t o = 0; o < ret_var.datalen; o++) {
                LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* ret_conv_40_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ");
                *ret_conv_40_conv = ret_var.data[o];
@@ -24019,7 +24019,7 @@ uint32_tArray  __attribute__((export_name("TS_ChannelMonitor_get_and_clear_pendi
        LDKCVec_MonitorEventZ ret_var = ChannelMonitor_get_and_clear_pending_monitor_events(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t o = 0; o < ret_var.datalen; o++) {
                LDKMonitorEvent *ret_conv_14_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
                *ret_conv_14_copy = ret_var.data[o];
@@ -24039,7 +24039,7 @@ uint32_tArray  __attribute__((export_name("TS_ChannelMonitor_get_and_clear_pendi
        LDKCVec_EventZ ret_var = ChannelMonitor_get_and_clear_pending_events(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t h = 0; h < ret_var.datalen; h++) {
                LDKEvent *ret_conv_7_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
                *ret_conv_7_copy = ret_var.data[h];
@@ -24072,7 +24072,7 @@ ptrArray  __attribute__((export_name("TS_ChannelMonitor_get_latest_holder_commit
        LDKCVec_TransactionZ ret_var = ChannelMonitor_get_latest_holder_commitment_txn(&this_arg_conv, logger_conv);
        ptrArray ret_arr = NULL;
        ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 4);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
        for (size_t m = 0; m < ret_var.datalen; m++) {
                LDKTransaction ret_conv_12_var = ret_var.data[m];
                int8_tArray ret_conv_12_arr = init_int8_tArray(ret_conv_12_var.datalen, __LINE__);
@@ -24134,7 +24134,7 @@ uint32_tArray  __attribute__((export_name("TS_ChannelMonitor_block_connected")))
        LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ ret_var = ChannelMonitor_block_connected(&this_arg_conv, header_ref, txdata_constr, height, broadcaster_conv, fee_estimator_conv, logger_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t n = 0; n < ret_var.datalen; n++) {
                LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* ret_conv_39_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ");
                *ret_conv_39_conv = ret_var.data[n];
@@ -24227,7 +24227,7 @@ uint32_tArray  __attribute__((export_name("TS_ChannelMonitor_transactions_confir
        LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ ret_var = ChannelMonitor_transactions_confirmed(&this_arg_conv, header_ref, txdata_constr, height, broadcaster_conv, fee_estimator_conv, logger_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t n = 0; n < ret_var.datalen; n++) {
                LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* ret_conv_39_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ");
                *ret_conv_39_conv = ret_var.data[n];
@@ -24304,7 +24304,7 @@ uint32_tArray  __attribute__((export_name("TS_ChannelMonitor_best_block_updated"
        LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ ret_var = ChannelMonitor_best_block_updated(&this_arg_conv, header_ref, height, broadcaster_conv, fee_estimator_conv, logger_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t n = 0; n < ret_var.datalen; n++) {
                LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* ret_conv_39_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ");
                *ret_conv_39_conv = ret_var.data[n];
@@ -24323,7 +24323,7 @@ ptrArray  __attribute__((export_name("TS_ChannelMonitor_get_relevant_txids"))) T
        LDKCVec_TxidZ ret_var = ChannelMonitor_get_relevant_txids(&this_arg_conv);
        ptrArray ret_arr = NULL;
        ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 4);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
        for (size_t m = 0; m < ret_var.datalen; m++) {
                int8_tArray ret_conv_12_arr = init_int8_tArray(32, __LINE__);
                memcpy(ret_conv_12_arr->elems, ret_var.data[m].data, 32);
@@ -24359,7 +24359,7 @@ uint32_tArray  __attribute__((export_name("TS_ChannelMonitor_get_claimable_balan
        LDKCVec_BalanceZ ret_var = ChannelMonitor_get_claimable_balances(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t j = 0; j < ret_var.datalen; j++) {
                LDKBalance *ret_conv_9_copy = MALLOC(sizeof(LDKBalance), "LDKBalance");
                *ret_conv_9_copy = ret_var.data[j];
@@ -24614,6 +24614,16 @@ void  __attribute__((export_name("TS_DelayedPaymentOutputDescriptor_set_to_self_
        DelayedPaymentOutputDescriptor_set_to_self_delay(&this_ptr_conv, val);
 }
 
+uint32_t  __attribute__((export_name("TS_DelayedPaymentOutputDescriptor_get_output"))) TS_DelayedPaymentOutputDescriptor_get_output(uint32_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = DelayedPaymentOutputDescriptor_get_output(&this_ptr_conv);
+       return (uint32_t)ret_ref;
+}
+
 void  __attribute__((export_name("TS_DelayedPaymentOutputDescriptor_set_output"))) TS_DelayedPaymentOutputDescriptor_set_output(uint32_t this_ptr, uint32_t val) {
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -24814,6 +24824,16 @@ void  __attribute__((export_name("TS_StaticPaymentOutputDescriptor_set_outpoint"
        StaticPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
 }
 
+uint32_t  __attribute__((export_name("TS_StaticPaymentOutputDescriptor_get_output"))) TS_StaticPaymentOutputDescriptor_get_output(uint32_t this_ptr) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = StaticPaymentOutputDescriptor_get_output(&this_ptr_conv);
+       return (uint32_t)ret_ref;
+}
+
 void  __attribute__((export_name("TS_StaticPaymentOutputDescriptor_set_output"))) TS_StaticPaymentOutputDescriptor_set_output(uint32_t this_ptr, uint32_t val) {
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -26914,7 +26934,7 @@ uint32_tArray  __attribute__((export_name("TS_PhantomRouteHints_get_channels")))
        LDKCVec_ChannelDetailsZ ret_var = PhantomRouteHints_get_channels(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t q = 0; q < ret_var.datalen; q++) {
                LDKChannelDetails ret_conv_16_var = ret_var.data[q];
                uint32_t ret_conv_16_ref = 0;
@@ -27167,7 +27187,7 @@ uint32_tArray  __attribute__((export_name("TS_ChannelManager_list_channels"))) T
        LDKCVec_ChannelDetailsZ ret_var = ChannelManager_list_channels(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t q = 0; q < ret_var.datalen; q++) {
                LDKChannelDetails ret_conv_16_var = ret_var.data[q];
                uint32_t ret_conv_16_ref = 0;
@@ -27193,7 +27213,7 @@ uint32_tArray  __attribute__((export_name("TS_ChannelManager_list_usable_channel
        LDKCVec_ChannelDetailsZ ret_var = ChannelManager_list_usable_channels(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t q = 0; q < ret_var.datalen; q++) {
                LDKChannelDetails ret_conv_16_var = ret_var.data[q];
                uint32_t ret_conv_16_ref = 0;
@@ -30692,6 +30712,25 @@ void  __attribute__((export_name("TS_CommitmentSigned_set_signature"))) TS_Commi
        CommitmentSigned_set_signature(&this_ptr_conv, val_ref);
 }
 
+ptrArray  __attribute__((export_name("TS_CommitmentSigned_get_htlc_signatures"))) TS_CommitmentSigned_get_htlc_signatures(uint32_t this_ptr) {
+       LDKCommitmentSigned this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_SignatureZ ret_var = CommitmentSigned_get_htlc_signatures(&this_ptr_conv);
+       ptrArray ret_arr = NULL;
+       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
+       for (size_t m = 0; m < ret_var.datalen; m++) {
+               int8_tArray ret_conv_12_arr = init_int8_tArray(64, __LINE__);
+               memcpy(ret_conv_12_arr->elems, ret_var.data[m].compact_form, 64);
+               ret_arr_ptr[m] = ret_conv_12_arr;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 void  __attribute__((export_name("TS_CommitmentSigned_set_htlc_signatures"))) TS_CommitmentSigned_set_htlc_signatures(uint32_t this_ptr, ptrArray val) {
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -31592,6 +31631,26 @@ void  __attribute__((export_name("TS_UnsignedNodeAnnouncement_set_alias"))) TS_U
        UnsignedNodeAnnouncement_set_alias(&this_ptr_conv, val_ref);
 }
 
+uint32_tArray  __attribute__((export_name("TS_UnsignedNodeAnnouncement_get_addresses"))) TS_UnsignedNodeAnnouncement_get_addresses(uint32_t this_ptr) {
+       LDKUnsignedNodeAnnouncement this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_NetAddressZ ret_var = UnsignedNodeAnnouncement_get_addresses(&this_ptr_conv);
+       uint32_tArray ret_arr = NULL;
+       ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t m = 0; m < ret_var.datalen; m++) {
+               LDKNetAddress *ret_conv_12_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
+               *ret_conv_12_copy = ret_var.data[m];
+               uint32_t ret_conv_12_ref = (uintptr_t)ret_conv_12_copy;
+               ret_arr_ptr[m] = ret_conv_12_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 void  __attribute__((export_name("TS_UnsignedNodeAnnouncement_set_addresses"))) TS_UnsignedNodeAnnouncement_set_addresses(uint32_t this_ptr, uint32_tArray val) {
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -32325,6 +32384,18 @@ void  __attribute__((export_name("TS_UnsignedChannelUpdate_set_fee_proportional_
        UnsignedChannelUpdate_set_fee_proportional_millionths(&this_ptr_conv, val);
 }
 
+int8_tArray  __attribute__((export_name("TS_UnsignedChannelUpdate_get_excess_data"))) TS_UnsignedChannelUpdate_get_excess_data(uint32_t this_ptr) {
+       LDKUnsignedChannelUpdate this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_u8Z ret_var = UnsignedChannelUpdate_get_excess_data(&this_ptr_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
 void  __attribute__((export_name("TS_UnsignedChannelUpdate_set_excess_data"))) TS_UnsignedChannelUpdate_set_excess_data(uint32_t this_ptr, int8_tArray val) {
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -32710,6 +32781,24 @@ void  __attribute__((export_name("TS_ReplyChannelRange_set_sync_complete"))) TS_
        ReplyChannelRange_set_sync_complete(&this_ptr_conv, val);
 }
 
+int64_tArray  __attribute__((export_name("TS_ReplyChannelRange_get_short_channel_ids"))) TS_ReplyChannelRange_get_short_channel_ids(uint32_t this_ptr) {
+       LDKReplyChannelRange this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_u64Z ret_var = ReplyChannelRange_get_short_channel_ids(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int64_t ret_conv_8_conv = ret_var.data[i];
+               ret_arr_ptr[i] = ret_conv_8_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 void  __attribute__((export_name("TS_ReplyChannelRange_set_short_channel_ids"))) TS_ReplyChannelRange_set_short_channel_ids(uint32_t this_ptr, int64_tArray val) {
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -32825,6 +32914,24 @@ void  __attribute__((export_name("TS_QueryShortChannelIds_set_chain_hash"))) TS_
        QueryShortChannelIds_set_chain_hash(&this_ptr_conv, val_ref);
 }
 
+int64_tArray  __attribute__((export_name("TS_QueryShortChannelIds_get_short_channel_ids"))) TS_QueryShortChannelIds_get_short_channel_ids(uint32_t this_ptr) {
+       LDKQueryShortChannelIds this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_u64Z ret_var = QueryShortChannelIds_get_short_channel_ids(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int64_t ret_conv_8_conv = ret_var.data[i];
+               ret_arr_ptr[i] = ret_conv_8_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 void  __attribute__((export_name("TS_QueryShortChannelIds_set_short_channel_ids"))) TS_QueryShortChannelIds_set_short_channel_ids(uint32_t this_ptr, int64_tArray val) {
        LDKQueryShortChannelIds this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -33339,7 +33446,7 @@ uint32_tArray  __attribute__((export_name("TS_CommitmentUpdate_get_update_add_ht
        LDKCVec_UpdateAddHTLCZ ret_var = CommitmentUpdate_get_update_add_htlcs(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t p = 0; p < ret_var.datalen; p++) {
                LDKUpdateAddHTLC ret_conv_15_var = ret_var.data[p];
                uint32_t ret_conv_15_ref = 0;
@@ -33390,7 +33497,7 @@ uint32_tArray  __attribute__((export_name("TS_CommitmentUpdate_get_update_fulfil
        LDKCVec_UpdateFulfillHTLCZ ret_var = CommitmentUpdate_get_update_fulfill_htlcs(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t t = 0; t < ret_var.datalen; t++) {
                LDKUpdateFulfillHTLC ret_conv_19_var = ret_var.data[t];
                uint32_t ret_conv_19_ref = 0;
@@ -33441,7 +33548,7 @@ uint32_tArray  __attribute__((export_name("TS_CommitmentUpdate_get_update_fail_h
        LDKCVec_UpdateFailHTLCZ ret_var = CommitmentUpdate_get_update_fail_htlcs(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t q = 0; q < ret_var.datalen; q++) {
                LDKUpdateFailHTLC ret_conv_16_var = ret_var.data[q];
                uint32_t ret_conv_16_ref = 0;
@@ -33492,7 +33599,7 @@ uint32_tArray  __attribute__((export_name("TS_CommitmentUpdate_get_update_fail_m
        LDKCVec_UpdateFailMalformedHTLCZ ret_var = CommitmentUpdate_get_update_fail_malformed_htlcs(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t z = 0; z < ret_var.datalen; z++) {
                LDKUpdateFailMalformedHTLC ret_conv_25_var = ret_var.data[z];
                uint32_t ret_conv_25_ref = 0;
@@ -34837,7 +34944,7 @@ ptrArray  __attribute__((export_name("TS_PeerManager_get_peer_node_ids"))) TS_Pe
        LDKCVec_PublicKeyZ ret_var = PeerManager_get_peer_node_ids(&this_arg_conv);
        ptrArray ret_arr = NULL;
        ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 4);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
        for (size_t m = 0; m < ret_var.datalen; m++) {
                int8_tArray ret_conv_12_arr = init_int8_tArray(33, __LINE__);
                memcpy(ret_conv_12_arr->elems, ret_var.data[m].compressed_form, 33);
@@ -36406,6 +36513,25 @@ void  __attribute__((export_name("TS_HolderCommitmentTransaction_set_counterpart
        HolderCommitmentTransaction_set_counterparty_sig(&this_ptr_conv, val_ref);
 }
 
+ptrArray  __attribute__((export_name("TS_HolderCommitmentTransaction_get_counterparty_htlc_sigs"))) TS_HolderCommitmentTransaction_get_counterparty_htlc_sigs(uint32_t this_ptr) {
+       LDKHolderCommitmentTransaction this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_SignatureZ ret_var = HolderCommitmentTransaction_get_counterparty_htlc_sigs(&this_ptr_conv);
+       ptrArray ret_arr = NULL;
+       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
+       for (size_t m = 0; m < ret_var.datalen; m++) {
+               int8_tArray ret_conv_12_arr = init_int8_tArray(64, __LINE__);
+               memcpy(ret_conv_12_arr->elems, ret_var.data[m].compact_form, 64);
+               ret_arr_ptr[m] = ret_conv_12_arr;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 void  __attribute__((export_name("TS_HolderCommitmentTransaction_set_counterparty_htlc_sigs"))) TS_HolderCommitmentTransaction_set_counterparty_htlc_sigs(uint32_t this_ptr, ptrArray val) {
        LDKHolderCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -40312,6 +40438,26 @@ void  __attribute__((export_name("TS_NodeAnnouncementInfo_set_alias"))) TS_NodeA
        NodeAnnouncementInfo_set_alias(&this_ptr_conv, val_conv);
 }
 
+uint32_tArray  __attribute__((export_name("TS_NodeAnnouncementInfo_get_addresses"))) TS_NodeAnnouncementInfo_get_addresses(uint32_t this_ptr) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_NetAddressZ ret_var = NodeAnnouncementInfo_get_addresses(&this_ptr_conv);
+       uint32_tArray ret_arr = NULL;
+       ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t m = 0; m < ret_var.datalen; m++) {
+               LDKNetAddress *ret_conv_12_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
+               *ret_conv_12_copy = ret_var.data[m];
+               uint32_t ret_conv_12_ref = (uintptr_t)ret_conv_12_copy;
+               ret_arr_ptr[m] = ret_conv_12_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 void  __attribute__((export_name("TS_NodeAnnouncementInfo_set_addresses"))) TS_NodeAnnouncementInfo_set_addresses(uint32_t this_ptr, uint32_tArray val) {
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -40587,6 +40733,24 @@ void  __attribute__((export_name("TS_NodeInfo_free"))) TS_NodeInfo_free(uint32_t
        NodeInfo_free(this_obj_conv);
 }
 
+int64_tArray  __attribute__((export_name("TS_NodeInfo_get_channels"))) TS_NodeInfo_get_channels(uint32_t this_ptr) {
+       LDKNodeInfo this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_u64Z ret_var = NodeInfo_get_channels(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int64_t ret_conv_8_conv = ret_var.data[i];
+               ret_arr_ptr[i] = ret_conv_8_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 void  __attribute__((export_name("TS_NodeInfo_set_channels"))) TS_NodeInfo_set_channels(uint32_t this_ptr, int64_tArray val) {
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -41027,6 +41191,24 @@ uint32_t  __attribute__((export_name("TS_ReadOnlyNetworkGraph_channel"))) TS_Rea
        return ret_ref;
 }
 
+int64_tArray  __attribute__((export_name("TS_ReadOnlyNetworkGraph_list_channels"))) TS_ReadOnlyNetworkGraph_list_channels(uint32_t this_arg) {
+       LDKReadOnlyNetworkGraph this_arg_conv;
+       this_arg_conv.inner = (void*)(this_arg & (~1));
+       this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       LDKCVec_u64Z ret_var = ReadOnlyNetworkGraph_list_channels(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int64_t ret_conv_8_conv = ret_var.data[i];
+               ret_arr_ptr[i] = ret_conv_8_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 uint32_t  __attribute__((export_name("TS_ReadOnlyNetworkGraph_node"))) TS_ReadOnlyNetworkGraph_node(uint32_t this_arg, uint32_t node_id) {
        LDKReadOnlyNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
@@ -41050,6 +41232,32 @@ uint32_t  __attribute__((export_name("TS_ReadOnlyNetworkGraph_node"))) TS_ReadOn
        return ret_ref;
 }
 
+uint32_tArray  __attribute__((export_name("TS_ReadOnlyNetworkGraph_list_nodes"))) TS_ReadOnlyNetworkGraph_list_nodes(uint32_t this_arg) {
+       LDKReadOnlyNetworkGraph this_arg_conv;
+       this_arg_conv.inner = (void*)(this_arg & (~1));
+       this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       LDKCVec_NodeIdZ ret_var = ReadOnlyNetworkGraph_list_nodes(&this_arg_conv);
+       uint32_tArray ret_arr = NULL;
+       ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               LDKNodeId ret_conv_8_var = ret_var.data[i];
+               uint32_t ret_conv_8_ref = 0;
+               CHECK((((uintptr_t)ret_conv_8_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+               CHECK((((uintptr_t)&ret_conv_8_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_8_var);
+               ret_conv_8_ref = (uintptr_t)ret_conv_8_var.inner;
+               if (ret_conv_8_var.is_owned) {
+                       ret_conv_8_ref |= 1;
+               }
+               ret_arr_ptr[i] = ret_conv_8_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 uint32_t  __attribute__((export_name("TS_ReadOnlyNetworkGraph_get_addresses"))) TS_ReadOnlyNetworkGraph_get_addresses(uint32_t this_arg, int8_tArray pubkey) {
        LDKReadOnlyNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
@@ -41328,12 +41536,12 @@ ptrArray  __attribute__((export_name("TS_Route_get_paths"))) TS_Route_get_paths(
        LDKCVec_CVec_RouteHopZZ ret_var = Route_get_paths(&this_ptr_conv);
        ptrArray ret_arr = NULL;
        ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       uint32_tArray *ret_arr_ptr = (uint32_tArray*)(((uint8_t*)ret_arr) + 4);
+       uint32_tArray *ret_arr_ptr = (uint32_tArray*)(((uint8_t*)ret_arr) + 8);
        for (size_t m = 0; m < ret_var.datalen; m++) {
                LDKCVec_RouteHopZ ret_conv_12_var = ret_var.data[m];
                uint32_tArray ret_conv_12_arr = NULL;
                ret_conv_12_arr = init_uint32_tArray(ret_conv_12_var.datalen, __LINE__);
-               uint32_t *ret_conv_12_arr_ptr = (uint32_t*)(((uint8_t*)ret_conv_12_arr) + 4);
+               uint32_t *ret_conv_12_arr_ptr = (uint32_t*)(((uint8_t*)ret_conv_12_arr) + 8);
                for (size_t k = 0; k < ret_conv_12_var.datalen; k++) {
                        LDKRouteHop ret_conv_12_conv_10_var = ret_conv_12_var.data[k];
                        uint32_t ret_conv_12_conv_10_ref = 0;
@@ -41790,7 +41998,7 @@ uint32_tArray  __attribute__((export_name("TS_PaymentParameters_get_route_hints"
        LDKCVec_RouteHintZ ret_var = PaymentParameters_get_route_hints(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t l = 0; l < ret_var.datalen; l++) {
                LDKRouteHint ret_conv_11_var = ret_var.data[l];
                uint32_t ret_conv_11_ref = 0;
@@ -41907,6 +42115,24 @@ void  __attribute__((export_name("TS_PaymentParameters_set_max_channel_saturatio
        PaymentParameters_set_max_channel_saturation_power_of_half(&this_ptr_conv, val);
 }
 
+int64_tArray  __attribute__((export_name("TS_PaymentParameters_get_previously_failed_channels"))) TS_PaymentParameters_get_previously_failed_channels(uint32_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_u64Z ret_var = PaymentParameters_get_previously_failed_channels(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int64_t ret_conv_8_conv = ret_var.data[i];
+               ret_arr_ptr[i] = ret_conv_8_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 void  __attribute__((export_name("TS_PaymentParameters_set_previously_failed_channels"))) TS_PaymentParameters_set_previously_failed_channels(uint32_t this_ptr, int64_tArray val) {
        LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -42111,7 +42337,7 @@ uint32_tArray  __attribute__((export_name("TS_RouteHint_get_a"))) TS_RouteHint_g
        LDKCVec_RouteHintHopZ ret_var = RouteHint_get_a(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t o = 0; o < ret_var.datalen; o++) {
                LDKRouteHintHop ret_conv_14_var = ret_var.data[o];
                uint32_t ret_conv_14_ref = 0;
@@ -44739,7 +44965,7 @@ uint32_tArray  __attribute__((export_name("TS_RawInvoice_private_routes"))) TS_R
        LDKCVec_PrivateRouteZ ret_var = RawInvoice_private_routes(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t o = 0; o < ret_var.datalen; o++) {
                LDKPrivateRoute ret_conv_14_var = ret_var.data[o];
                uint32_t ret_conv_14_ref = 0;
@@ -44949,7 +45175,7 @@ uint32_tArray  __attribute__((export_name("TS_Invoice_private_routes"))) TS_Invo
        LDKCVec_PrivateRouteZ ret_var = Invoice_private_routes(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t o = 0; o < ret_var.datalen; o++) {
                LDKPrivateRoute ret_conv_14_var = ret_var.data[o];
                uint32_t ret_conv_14_ref = 0;
@@ -44975,7 +45201,7 @@ uint32_tArray  __attribute__((export_name("TS_Invoice_route_hints"))) TS_Invoice
        LDKCVec_RouteHintZ ret_var = Invoice_route_hints(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t l = 0; l < ret_var.datalen; l++) {
                LDKRouteHint ret_conv_11_var = ret_var.data[l];
                uint32_t ret_conv_11_ref = 0;
index f481acb1348d17dbd394b8fc1ba88e151f3cfc42..55cb856415e6a2a53f65d8f006ad3be1889268e3 100644 (file)
@@ -37,12 +37,12 @@ _Static_assert(sizeof(void*) == 4, "Pointers mut be 32 bits");
 
 #define DECL_ARR_TYPE(ty, name) \
        struct name##array { \
-               uint32_t arr_len; \
+               uint64_t arr_len; /* uint32_t would suffice but we want to align uint64_ts as well */ \
                ty elems[]; \
        }; \
        typedef struct name##array * name##Array; \
        static inline name##Array init_##name##Array(size_t arr_len, int lineno) { \
-               name##Array arr = (name##Array)do_MALLOC(arr_len * sizeof(ty) + sizeof(uint32_t), #name" array init", lineno); \
+               name##Array arr = (name##Array)do_MALLOC(arr_len * sizeof(ty) + sizeof(uint64_t), #name" array init", lineno); \
                arr->arr_len = arr_len; \
                return arr; \
        }
@@ -898,7 +898,7 @@ ptrArray  __attribute__((export_name("TS_CResult_CVec_SignatureZNoneZ_get_ok")))
        LDKCVec_SignatureZ ret_var = CResult_CVec_SignatureZNoneZ_get_ok(owner_conv);
        ptrArray ret_arr = NULL;
        ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 4);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
        for (size_t m = 0; m < ret_var.datalen; m++) {
                int8_tArray ret_conv_12_arr = init_int8_tArray(64, __LINE__);
                memcpy(ret_conv_12_arr->elems, ret_var.data[m].compact_form, 64);
@@ -1775,7 +1775,7 @@ uint32_tArray __attribute__((export_name("TS_LDKEvent_PaymentPathSuccessful_get_
                        LDKCVec_RouteHopZ path_var = obj->payment_path_successful.path;
                        uint32_tArray path_arr = NULL;
                        path_arr = init_uint32_tArray(path_var.datalen, __LINE__);
-                       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 4);
+                       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 8);
                        for (size_t k = 0; k < path_var.datalen; k++) {
                                LDKRouteHop path_conv_10_var = path_var.data[k];
                                uint32_t path_conv_10_ref = 0;
@@ -1826,7 +1826,7 @@ uint32_tArray __attribute__((export_name("TS_LDKEvent_PaymentPathFailed_get_path
                        LDKCVec_RouteHopZ path_var = obj->payment_path_failed.path;
                        uint32_tArray path_arr = NULL;
                        path_arr = init_uint32_tArray(path_var.datalen, __LINE__);
-                       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 4);
+                       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 8);
                        for (size_t k = 0; k < path_var.datalen; k++) {
                                LDKRouteHop path_conv_10_var = path_var.data[k];
                                uint32_t path_conv_10_ref = 0;
@@ -1878,7 +1878,7 @@ uint32_tArray __attribute__((export_name("TS_LDKEvent_ProbeSuccessful_get_path")
                        LDKCVec_RouteHopZ path_var = obj->probe_successful.path;
                        uint32_tArray path_arr = NULL;
                        path_arr = init_uint32_tArray(path_var.datalen, __LINE__);
-                       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 4);
+                       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 8);
                        for (size_t k = 0; k < path_var.datalen; k++) {
                                LDKRouteHop path_conv_10_var = path_var.data[k];
                                uint32_t path_conv_10_ref = 0;
@@ -1911,7 +1911,7 @@ uint32_tArray __attribute__((export_name("TS_LDKEvent_ProbeFailed_get_path"))) T
                        LDKCVec_RouteHopZ path_var = obj->probe_failed.path;
                        uint32_tArray path_arr = NULL;
                        path_arr = init_uint32_tArray(path_var.datalen, __LINE__);
-                       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 4);
+                       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 8);
                        for (size_t k = 0; k < path_var.datalen; k++) {
                                LDKRouteHop path_conv_10_var = path_var.data[k];
                                uint32_t path_conv_10_ref = 0;
@@ -1942,7 +1942,7 @@ uint32_tArray __attribute__((export_name("TS_LDKEvent_SpendableOutputs_get_outpu
                        LDKCVec_SpendableOutputDescriptorZ outputs_var = obj->spendable_outputs.outputs;
                        uint32_tArray outputs_arr = NULL;
                        outputs_arr = init_uint32_tArray(outputs_var.datalen, __LINE__);
-                       uint32_t *outputs_arr_ptr = (uint32_t*)(((uint8_t*)outputs_arr) + 4);
+                       uint32_t *outputs_arr_ptr = (uint32_t*)(((uint8_t*)outputs_arr) + 8);
                        for (size_t b = 0; b < outputs_var.datalen; b++) {
                                uint32_t outputs_conv_27_ref = ((uintptr_t)&outputs_var.data[b]) | 1;
                                outputs_arr_ptr[b] = outputs_conv_27_ref;
@@ -2707,7 +2707,7 @@ uint32_tArray  __attribute__((export_name("TS_C3Tuple_OutPointCVec_MonitorEventZ
        LDKCVec_MonitorEventZ ret_var = C3Tuple_OutPointCVec_MonitorEventZPublicKeyZ_get_b(owner_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t o = 0; o < ret_var.datalen; o++) {
                LDKMonitorEvent *ret_conv_14_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
                *ret_conv_14_copy = ret_var.data[o];
@@ -2851,7 +2851,7 @@ void log_LDKLogger_jcall(const void* this_arg, const LDKRecord * record) {
        if (record_var.is_owned) {
                record_ref |= 1;
        }
-       js_invoke_function_u_u(j_calls->instance_ptr, 0, (uint32_t)record_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 0, (uint32_t)record_ref, 0, 0, 0, 0, 0);
 }
 static void LDKLogger_JCalls_cloned(LDKLogger* new_obj) {
        LDKLogger_JCalls *j_calls = (LDKLogger_JCalls*) new_obj->this_arg;
@@ -3168,7 +3168,7 @@ LDKCResult_TxOutAccessErrorZ get_utxo_LDKAccess_jcall(const void* this_arg, cons
        int8_tArray genesis_hash_arr = init_int8_tArray(32, __LINE__);
        memcpy(genesis_hash_arr->elems, *genesis_hash, 32);
        int64_t short_channel_id_conv = short_channel_id;
-       uint32_t ret = js_invoke_function_u_bb(j_calls->instance_ptr, 1, (uint32_t)genesis_hash_arr, (uint32_t)short_channel_id_conv);
+       uint32_t ret = js_invoke_function_ubuuuu(j_calls->instance_ptr, 1, (uint32_t)genesis_hash_arr, (uint32_t)short_channel_id_conv, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_TxOutAccessErrorZ ret_conv = *(LDKCResult_TxOutAccessErrorZ*)(ret_ptr);
@@ -3705,7 +3705,7 @@ uint32_tArray __attribute__((export_name("TS_LDKCOption_CVec_NetAddressZZ_Some_g
                        LDKCVec_NetAddressZ some_var = obj->some;
                        uint32_tArray some_arr = NULL;
                        some_arr = init_uint32_tArray(some_var.datalen, __LINE__);
-                       uint32_t *some_arr_ptr = (uint32_t*)(((uint8_t*)some_arr) + 4);
+                       uint32_t *some_arr_ptr = (uint32_t*)(((uint8_t*)some_arr) + 8);
                        for (size_t m = 0; m < some_var.datalen; m++) {
                                uint32_t some_conv_12_ref = ((uintptr_t)&some_var.data[m]) | 1;
                                some_arr_ptr[m] = some_conv_12_ref;
@@ -3840,7 +3840,7 @@ ptrArray  __attribute__((export_name("TS_C2Tuple_SignatureCVec_SignatureZZ_get_b
        LDKCVec_SignatureZ ret_var = C2Tuple_SignatureCVec_SignatureZZ_get_b(owner_conv);
        ptrArray ret_arr = NULL;
        ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 4);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
        for (size_t m = 0; m < ret_var.datalen; m++) {
                int8_tArray ret_conv_12_arr = init_int8_tArray(64, __LINE__);
                memcpy(ret_conv_12_arr->elems, ret_var.data[m].compact_form, 64);
@@ -3963,7 +3963,7 @@ static void LDKBaseSign_JCalls_free(void* this_arg) {
 LDKPublicKey get_per_commitment_point_LDKBaseSign_jcall(const void* this_arg, uint64_t idx) {
        LDKBaseSign_JCalls *j_calls = (LDKBaseSign_JCalls*) this_arg;
        int64_t idx_conv = idx;
-       int8_tArray ret = (int8_tArray)js_invoke_function_u_b(j_calls->instance_ptr, 2, (uint32_t)idx_conv);
+       int8_tArray ret = (int8_tArray)js_invoke_function_buuuuu(j_calls->instance_ptr, 2, (uint32_t)idx_conv, 0, 0, 0, 0, 0);
        LDKPublicKey ret_ref;
        CHECK(ret->arr_len == 33);
        memcpy(ret_ref.compressed_form, ret->elems, 33); FREE(ret);
@@ -3972,7 +3972,7 @@ LDKPublicKey get_per_commitment_point_LDKBaseSign_jcall(const void* this_arg, ui
 LDKThirtyTwoBytes release_commitment_secret_LDKBaseSign_jcall(const void* this_arg, uint64_t idx) {
        LDKBaseSign_JCalls *j_calls = (LDKBaseSign_JCalls*) this_arg;
        int64_t idx_conv = idx;
-       int8_tArray ret = (int8_tArray)js_invoke_function_u_b(j_calls->instance_ptr, 3, (uint32_t)idx_conv);
+       int8_tArray ret = (int8_tArray)js_invoke_function_buuuuu(j_calls->instance_ptr, 3, (uint32_t)idx_conv, 0, 0, 0, 0, 0);
        LDKThirtyTwoBytes ret_ref;
        CHECK(ret->arr_len == 32);
        memcpy(ret_ref.data, ret->elems, 32); FREE(ret);
@@ -3993,7 +3993,7 @@ LDKCResult_NoneNoneZ validate_holder_commitment_LDKBaseSign_jcall(const void* th
        LDKCVec_PaymentPreimageZ preimages_var = preimages;
        ptrArray preimages_arr = NULL;
        preimages_arr = init_ptrArray(preimages_var.datalen, __LINE__);
-       int8_tArray *preimages_arr_ptr = (int8_tArray*)(((uint8_t*)preimages_arr) + 4);
+       int8_tArray *preimages_arr_ptr = (int8_tArray*)(((uint8_t*)preimages_arr) + 8);
        for (size_t m = 0; m < preimages_var.datalen; m++) {
                int8_tArray preimages_conv_12_arr = init_int8_tArray(32, __LINE__);
                memcpy(preimages_conv_12_arr->elems, preimages_var.data[m].data, 32);
@@ -4001,7 +4001,7 @@ LDKCResult_NoneNoneZ validate_holder_commitment_LDKBaseSign_jcall(const void* th
        }
        
        FREE(preimages_var.data);
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 4, (uint32_t)holder_tx_ref, (uint32_t)preimages_arr);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 4, (uint32_t)holder_tx_ref, (uint32_t)preimages_arr, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneNoneZ ret_conv = *(LDKCResult_NoneNoneZ*)(ret_ptr);
@@ -4010,7 +4010,7 @@ LDKCResult_NoneNoneZ validate_holder_commitment_LDKBaseSign_jcall(const void* th
 }
 LDKThirtyTwoBytes channel_keys_id_LDKBaseSign_jcall(const void* this_arg) {
        LDKBaseSign_JCalls *j_calls = (LDKBaseSign_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_u_(j_calls->instance_ptr, 5);
+       int8_tArray ret = (int8_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 5, 0, 0, 0, 0, 0, 0);
        LDKThirtyTwoBytes ret_ref;
        CHECK(ret->arr_len == 32);
        memcpy(ret_ref.data, ret->elems, 32); FREE(ret);
@@ -4031,7 +4031,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_L
        LDKCVec_PaymentPreimageZ preimages_var = preimages;
        ptrArray preimages_arr = NULL;
        preimages_arr = init_ptrArray(preimages_var.datalen, __LINE__);
-       int8_tArray *preimages_arr_ptr = (int8_tArray*)(((uint8_t*)preimages_arr) + 4);
+       int8_tArray *preimages_arr_ptr = (int8_tArray*)(((uint8_t*)preimages_arr) + 8);
        for (size_t m = 0; m < preimages_var.datalen; m++) {
                int8_tArray preimages_conv_12_arr = init_int8_tArray(32, __LINE__);
                memcpy(preimages_conv_12_arr->elems, preimages_var.data[m].data, 32);
@@ -4039,7 +4039,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_L
        }
        
        FREE(preimages_var.data);
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 6, (uint32_t)commitment_tx_ref, (uint32_t)preimages_arr);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 6, (uint32_t)commitment_tx_ref, (uint32_t)preimages_arr, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(ret_ptr);
@@ -4051,7 +4051,7 @@ LDKCResult_NoneNoneZ validate_counterparty_revocation_LDKBaseSign_jcall(const vo
        int64_t idx_conv = idx;
        int8_tArray secret_arr = init_int8_tArray(32, __LINE__);
        memcpy(secret_arr->elems, *secret, 32);
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 7, (uint32_t)idx_conv, (uint32_t)secret_arr);
+       uint32_t ret = js_invoke_function_buuuuu(j_calls->instance_ptr, 7, (uint32_t)idx_conv, (uint32_t)secret_arr, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneNoneZ ret_conv = *(LDKCResult_NoneNoneZ*)(ret_ptr);
@@ -4070,7 +4070,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htl
        if (commitment_tx_var.is_owned) {
                commitment_tx_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 8, (uint32_t)commitment_tx_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 8, (uint32_t)commitment_tx_ref, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(ret_ptr);
@@ -4087,7 +4087,7 @@ LDKCResult_SignatureNoneZ sign_justice_revoked_output_LDKBaseSign_jcall(const vo
        int64_t amount_conv = amount;
        int8_tArray per_commitment_key_arr = init_int8_tArray(32, __LINE__);
        memcpy(per_commitment_key_arr->elems, *per_commitment_key, 32);
-       uint32_t ret = js_invoke_function_u_uuuu(j_calls->instance_ptr, 9, (uint32_t)justice_tx_arr, (uint32_t)input_conv, (uint32_t)amount_conv, (uint32_t)per_commitment_key_arr);
+       uint32_t ret = js_invoke_function_uubuuu(j_calls->instance_ptr, 9, (uint32_t)justice_tx_arr, (uint32_t)input_conv, (uint32_t)amount_conv, (uint32_t)per_commitment_key_arr, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
@@ -4114,7 +4114,7 @@ LDKCResult_SignatureNoneZ sign_justice_revoked_htlc_LDKBaseSign_jcall(const void
        if (htlc_var.is_owned) {
                htlc_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_uuuuu(j_calls->instance_ptr, 10, (uint32_t)justice_tx_arr, (uint32_t)input_conv, (uint32_t)amount_conv, (uint32_t)per_commitment_key_arr, (uint32_t)htlc_ref);
+       uint32_t ret = js_invoke_function_uubuuu(j_calls->instance_ptr, 10, (uint32_t)justice_tx_arr, (uint32_t)input_conv, (uint32_t)amount_conv, (uint32_t)per_commitment_key_arr, (uint32_t)htlc_ref, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
@@ -4141,7 +4141,7 @@ LDKCResult_SignatureNoneZ sign_counterparty_htlc_transaction_LDKBaseSign_jcall(c
        if (htlc_var.is_owned) {
                htlc_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_uuuuu(j_calls->instance_ptr, 11, (uint32_t)htlc_tx_arr, (uint32_t)input_conv, (uint32_t)amount_conv, (uint32_t)per_commitment_point_arr, (uint32_t)htlc_ref);
+       uint32_t ret = js_invoke_function_uubuuu(j_calls->instance_ptr, 11, (uint32_t)htlc_tx_arr, (uint32_t)input_conv, (uint32_t)amount_conv, (uint32_t)per_commitment_point_arr, (uint32_t)htlc_ref, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
@@ -4160,7 +4160,7 @@ LDKCResult_SignatureNoneZ sign_closing_transaction_LDKBaseSign_jcall(const void*
        if (closing_tx_var.is_owned) {
                closing_tx_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 12, (uint32_t)closing_tx_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 12, (uint32_t)closing_tx_ref, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
@@ -4179,7 +4179,7 @@ LDKCResult_C2Tuple_SignatureSignatureZNoneZ sign_channel_announcement_LDKBaseSig
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 13, (uint32_t)msg_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 13, (uint32_t)msg_ref, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_C2Tuple_SignatureSignatureZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureSignatureZNoneZ*)(ret_ptr);
@@ -4198,7 +4198,7 @@ void ready_channel_LDKBaseSign_jcall(void* this_arg, const LDKChannelTransaction
        if (channel_parameters_var.is_owned) {
                channel_parameters_ref |= 1;
        }
-       js_invoke_function_u_u(j_calls->instance_ptr, 14, (uint32_t)channel_parameters_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 14, (uint32_t)channel_parameters_ref, 0, 0, 0, 0, 0);
 }
 static void LDKBaseSign_JCalls_cloned(LDKBaseSign* new_obj) {
        LDKBaseSign_JCalls *j_calls = (LDKBaseSign_JCalls*) new_obj->this_arg;
@@ -4481,7 +4481,7 @@ static void LDKSign_JCalls_free(void* this_arg) {
 }
 LDKCVec_u8Z write_LDKSign_jcall(const void* this_arg) {
        LDKSign_JCalls *j_calls = (LDKSign_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_u_(j_calls->instance_ptr, 15);
+       int8_tArray ret = (int8_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 15, 0, 0, 0, 0, 0, 0);
        LDKCVec_u8Z ret_ref;
        ret_ref.datalen = ret->arr_len;
        ret_ref.data = MALLOC(ret_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -4594,7 +4594,7 @@ ptrArray  __attribute__((export_name("TS_CResult_CVec_CVec_u8ZZNoneZ_get_ok")))
        LDKCVec_CVec_u8ZZ ret_var = CResult_CVec_CVec_u8ZZNoneZ_get_ok(owner_conv);
        ptrArray ret_arr = NULL;
        ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 4);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
        for (size_t m = 0; m < ret_var.datalen; m++) {
                LDKCVec_u8Z ret_conv_12_var = ret_var.data[m];
                int8_tArray ret_conv_12_arr = init_int8_tArray(ret_conv_12_var.datalen, __LINE__);
@@ -4831,7 +4831,7 @@ uint32_tArray __attribute__((export_name("TS_LDKPaymentSendFailure_PathParameter
                        LDKCVec_CResult_NoneAPIErrorZZ path_parameter_error_var = obj->path_parameter_error;
                        uint32_tArray path_parameter_error_arr = NULL;
                        path_parameter_error_arr = init_uint32_tArray(path_parameter_error_var.datalen, __LINE__);
-                       uint32_t *path_parameter_error_arr_ptr = (uint32_t*)(((uint8_t*)path_parameter_error_arr) + 4);
+                       uint32_t *path_parameter_error_arr_ptr = (uint32_t*)(((uint8_t*)path_parameter_error_arr) + 8);
                        for (size_t w = 0; w < path_parameter_error_var.datalen; w++) {
                                LDKCResult_NoneAPIErrorZ* path_parameter_error_conv_22_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
                                *path_parameter_error_conv_22_conv = path_parameter_error_var.data[w];
@@ -4847,7 +4847,7 @@ uint32_tArray __attribute__((export_name("TS_LDKPaymentSendFailure_AllFailedRetr
                        LDKCVec_APIErrorZ all_failed_retry_safe_var = obj->all_failed_retry_safe;
                        uint32_tArray all_failed_retry_safe_arr = NULL;
                        all_failed_retry_safe_arr = init_uint32_tArray(all_failed_retry_safe_var.datalen, __LINE__);
-                       uint32_t *all_failed_retry_safe_arr_ptr = (uint32_t*)(((uint8_t*)all_failed_retry_safe_arr) + 4);
+                       uint32_t *all_failed_retry_safe_arr_ptr = (uint32_t*)(((uint8_t*)all_failed_retry_safe_arr) + 8);
                        for (size_t k = 0; k < all_failed_retry_safe_var.datalen; k++) {
                                uint32_t all_failed_retry_safe_conv_10_ref = ((uintptr_t)&all_failed_retry_safe_var.data[k]) | 1;
                                all_failed_retry_safe_arr_ptr[k] = all_failed_retry_safe_conv_10_ref;
@@ -4861,7 +4861,7 @@ uint32_tArray __attribute__((export_name("TS_LDKPaymentSendFailure_PartialFailur
                        LDKCVec_CResult_NoneAPIErrorZZ results_var = obj->partial_failure.results;
                        uint32_tArray results_arr = NULL;
                        results_arr = init_uint32_tArray(results_var.datalen, __LINE__);
-                       uint32_t *results_arr_ptr = (uint32_t*)(((uint8_t*)results_arr) + 4);
+                       uint32_t *results_arr_ptr = (uint32_t*)(((uint8_t*)results_arr) + 8);
                        for (size_t w = 0; w < results_var.datalen; w++) {
                                LDKCResult_NoneAPIErrorZ* results_conv_22_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
                                *results_conv_22_conv = results_var.data[w];
@@ -5295,7 +5295,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ watch_channel_LDKWatch_jcall(const void*
        if (monitor_var.is_owned) {
                monitor_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 16, (uint32_t)funding_txo_ref, (uint32_t)monitor_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 16, (uint32_t)funding_txo_ref, (uint32_t)monitor_ref, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
@@ -5322,7 +5322,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_channel_LDKWatch_jcall(const void
        if (update_var.is_owned) {
                update_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 17, (uint32_t)funding_txo_ref, (uint32_t)update_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 17, (uint32_t)funding_txo_ref, (uint32_t)update_ref, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
@@ -5331,7 +5331,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_channel_LDKWatch_jcall(const void
 }
 LDKCVec_C3Tuple_OutPointCVec_MonitorEventZPublicKeyZZ release_pending_monitor_events_LDKWatch_jcall(const void* this_arg) {
        LDKWatch_JCalls *j_calls = (LDKWatch_JCalls*) this_arg;
-       uint32_tArray ret = (uint32_tArray)js_invoke_function_u_(j_calls->instance_ptr, 18);
+       uint32_tArray ret = (uint32_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 18, 0, 0, 0, 0, 0, 0);
        LDKCVec_C3Tuple_OutPointCVec_MonitorEventZPublicKeyZZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
@@ -5418,7 +5418,7 @@ uint32_tArray  __attribute__((export_name("TS_Watch_release_pending_monitor_even
        LDKCVec_C3Tuple_OutPointCVec_MonitorEventZPublicKeyZZ ret_var = (this_arg_conv->release_pending_monitor_events)(this_arg_conv->this_arg);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t x = 0; x < ret_var.datalen; x++) {
                LDKC3Tuple_OutPointCVec_MonitorEventZPublicKeyZ* ret_conv_49_conv = MALLOC(sizeof(LDKC3Tuple_OutPointCVec_MonitorEventZPublicKeyZ), "LDKC3Tuple_OutPointCVec_MonitorEventZPublicKeyZ");
                *ret_conv_49_conv = ret_var.data[x];
@@ -5445,7 +5445,7 @@ void broadcast_transaction_LDKBroadcasterInterface_jcall(const void* this_arg, L
        int8_tArray tx_arr = init_int8_tArray(tx_var.datalen, __LINE__);
        memcpy(tx_arr->elems, tx_var.data, tx_var.datalen);
        Transaction_free(tx_var);
-       js_invoke_function_u_u(j_calls->instance_ptr, 19, (uint32_t)tx_arr);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 19, (uint32_t)tx_arr, 0, 0, 0, 0, 0);
 }
 static void LDKBroadcasterInterface_JCalls_cloned(LDKBroadcasterInterface* new_obj) {
        LDKBroadcasterInterface_JCalls *j_calls = (LDKBroadcasterInterface_JCalls*) new_obj->this_arg;
@@ -5493,7 +5493,7 @@ static void LDKKeysInterface_JCalls_free(void* this_arg) {
 LDKCResult_SecretKeyNoneZ get_node_secret_LDKKeysInterface_jcall(const void* this_arg, LDKRecipient recipient) {
        LDKKeysInterface_JCalls *j_calls = (LDKKeysInterface_JCalls*) this_arg;
        uint32_t recipient_conv = LDKRecipient_to_js(recipient);
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 20, (uint32_t)recipient_conv);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 20, (uint32_t)recipient_conv, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SecretKeyNoneZ ret_conv = *(LDKCResult_SecretKeyNoneZ*)(ret_ptr);
@@ -5502,7 +5502,7 @@ LDKCResult_SecretKeyNoneZ get_node_secret_LDKKeysInterface_jcall(const void* thi
 }
 LDKCVec_u8Z get_destination_script_LDKKeysInterface_jcall(const void* this_arg) {
        LDKKeysInterface_JCalls *j_calls = (LDKKeysInterface_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_u_(j_calls->instance_ptr, 21);
+       int8_tArray ret = (int8_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 21, 0, 0, 0, 0, 0, 0);
        LDKCVec_u8Z ret_ref;
        ret_ref.datalen = ret->arr_len;
        ret_ref.data = MALLOC(ret_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -5511,7 +5511,7 @@ LDKCVec_u8Z get_destination_script_LDKKeysInterface_jcall(const void* this_arg)
 }
 LDKShutdownScript get_shutdown_scriptpubkey_LDKKeysInterface_jcall(const void* this_arg) {
        LDKKeysInterface_JCalls *j_calls = (LDKKeysInterface_JCalls*) this_arg;
-       uint32_t ret = js_invoke_function_u_(j_calls->instance_ptr, 22);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 22, 0, 0, 0, 0, 0, 0);
        LDKShutdownScript ret_conv;
        ret_conv.inner = (void*)(ret & (~1));
        ret_conv.is_owned = (ret & 1) || (ret == 0);
@@ -5522,7 +5522,7 @@ LDKSign get_channel_signer_LDKKeysInterface_jcall(const void* this_arg, bool inb
        LDKKeysInterface_JCalls *j_calls = (LDKKeysInterface_JCalls*) this_arg;
        jboolean inbound_conv = inbound;
        int64_t channel_value_satoshis_conv = channel_value_satoshis;
-       uint32_t ret = js_invoke_function_u_bb(j_calls->instance_ptr, 23, (uint32_t)inbound_conv, (uint32_t)channel_value_satoshis_conv);
+       uint32_t ret = js_invoke_function_ubuuuu(j_calls->instance_ptr, 23, (uint32_t)inbound_conv, (uint32_t)channel_value_satoshis_conv, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKSign ret_conv = *(LDKSign*)(ret_ptr);
@@ -5531,7 +5531,7 @@ LDKSign get_channel_signer_LDKKeysInterface_jcall(const void* this_arg, bool inb
 }
 LDKThirtyTwoBytes get_secure_random_bytes_LDKKeysInterface_jcall(const void* this_arg) {
        LDKKeysInterface_JCalls *j_calls = (LDKKeysInterface_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_u_(j_calls->instance_ptr, 24);
+       int8_tArray ret = (int8_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 24, 0, 0, 0, 0, 0, 0);
        LDKThirtyTwoBytes ret_ref;
        CHECK(ret->arr_len == 32);
        memcpy(ret_ref.data, ret->elems, 32); FREE(ret);
@@ -5542,7 +5542,7 @@ LDKCResult_SignDecodeErrorZ read_chan_signer_LDKKeysInterface_jcall(const void*
        LDKu8slice reader_var = reader;
        int8_tArray reader_arr = init_int8_tArray(reader_var.datalen, __LINE__);
        memcpy(reader_arr->elems, reader_var.data, reader_var.datalen);
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 25, (uint32_t)reader_arr);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 25, (uint32_t)reader_arr, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignDecodeErrorZ ret_conv = *(LDKCResult_SignDecodeErrorZ*)(ret_ptr);
@@ -5557,7 +5557,7 @@ LDKCResult_RecoverableSignatureNoneZ sign_invoice_LDKKeysInterface_jcall(const v
        LDKCVec_u5Z invoice_data_var = invoice_data;
        ptrArray invoice_data_arr = NULL;
        invoice_data_arr = init_ptrArray(invoice_data_var.datalen, __LINE__);
-       int8_t *invoice_data_arr_ptr = (int8_t*)(((uint8_t*)invoice_data_arr) + 4);
+       int8_t *invoice_data_arr_ptr = (int8_t*)(((uint8_t*)invoice_data_arr) + 8);
        for (size_t h = 0; h < invoice_data_var.datalen; h++) {
                uint8_t invoice_data_conv_7_val = invoice_data_var.data[h]._0;
                invoice_data_arr_ptr[h] = invoice_data_conv_7_val;
@@ -5565,7 +5565,7 @@ LDKCResult_RecoverableSignatureNoneZ sign_invoice_LDKKeysInterface_jcall(const v
        
        FREE(invoice_data_var.data);
        uint32_t receipient_conv = LDKRecipient_to_js(receipient);
-       uint32_t ret = js_invoke_function_u_uuu(j_calls->instance_ptr, 26, (uint32_t)hrp_bytes_arr, (uint32_t)invoice_data_arr, (uint32_t)receipient_conv);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 26, (uint32_t)hrp_bytes_arr, (uint32_t)invoice_data_arr, (uint32_t)receipient_conv, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_RecoverableSignatureNoneZ ret_conv = *(LDKCResult_RecoverableSignatureNoneZ*)(ret_ptr);
@@ -5574,7 +5574,7 @@ LDKCResult_RecoverableSignatureNoneZ sign_invoice_LDKKeysInterface_jcall(const v
 }
 LDKThirtyTwoBytes get_inbound_payment_key_material_LDKKeysInterface_jcall(const void* this_arg) {
        LDKKeysInterface_JCalls *j_calls = (LDKKeysInterface_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_u_(j_calls->instance_ptr, 27);
+       int8_tArray ret = (int8_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 27, 0, 0, 0, 0, 0, 0);
        LDKThirtyTwoBytes ret_ref;
        CHECK(ret->arr_len == 32);
        memcpy(ret_ref.data, ret->elems, 32); FREE(ret);
@@ -5725,7 +5725,7 @@ static void LDKFeeEstimator_JCalls_free(void* this_arg) {
 uint32_t get_est_sat_per_1000_weight_LDKFeeEstimator_jcall(const void* this_arg, LDKConfirmationTarget confirmation_target) {
        LDKFeeEstimator_JCalls *j_calls = (LDKFeeEstimator_JCalls*) this_arg;
        uint32_t confirmation_target_conv = LDKConfirmationTarget_to_js(confirmation_target);
-       return js_invoke_function_u_u(j_calls->instance_ptr, 28, (uint32_t)confirmation_target_conv);
+       return js_invoke_function_uuuuuu(j_calls->instance_ptr, 28, (uint32_t)confirmation_target_conv, 0, 0, 0, 0, 0);
 }
 static void LDKFeeEstimator_JCalls_cloned(LDKFeeEstimator* new_obj) {
        LDKFeeEstimator_JCalls *j_calls = (LDKFeeEstimator_JCalls*) new_obj->this_arg;
@@ -5893,17 +5893,17 @@ static void LDKType_JCalls_free(void* this_arg) {
 }
 uint16_t type_id_LDKType_jcall(const void* this_arg) {
        LDKType_JCalls *j_calls = (LDKType_JCalls*) this_arg;
-       return js_invoke_function_u_(j_calls->instance_ptr, 29);
+       return js_invoke_function_uuuuuu(j_calls->instance_ptr, 29, 0, 0, 0, 0, 0, 0);
 }
 LDKStr debug_str_LDKType_jcall(const void* this_arg) {
        LDKType_JCalls *j_calls = (LDKType_JCalls*) this_arg;
-       jstring ret = (jstring)js_invoke_function_u_(j_calls->instance_ptr, 30);
+       jstring ret = (jstring)js_invoke_function_uuuuuu(j_calls->instance_ptr, 30, 0, 0, 0, 0, 0, 0);
        LDKStr ret_conv = str_ref_to_owned_c(ret);
        return ret_conv;
 }
 LDKCVec_u8Z write_LDKType_jcall(const void* this_arg) {
        LDKType_JCalls *j_calls = (LDKType_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_u_(j_calls->instance_ptr, 31);
+       int8_tArray ret = (int8_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 31, 0, 0, 0, 0, 0, 0);
        LDKCVec_u8Z ret_ref;
        ret_ref.datalen = ret->arr_len;
        ret_ref.data = MALLOC(ret_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -6643,7 +6643,7 @@ uint32_tArray  __attribute__((export_name("TS_C2Tuple_TxidCVec_C2Tuple_u32Script
        LDKCVec_C2Tuple_u32ScriptZZ ret_var = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_b(owner_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t v = 0; v < ret_var.datalen; v++) {
                LDKC2Tuple_u32ScriptZ* ret_conv_21_conv = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ), "LDKC2Tuple_u32ScriptZ");
                *ret_conv_21_conv = ret_var.data[v];
@@ -6712,7 +6712,7 @@ uint32_tArray  __attribute__((export_name("TS_C2Tuple_TxidCVec_C2Tuple_u32TxOutZ
        LDKCVec_C2Tuple_u32TxOutZZ ret_var = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_b(owner_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t u = 0; u < ret_var.datalen; u++) {
                LDKC2Tuple_u32TxOutZ* ret_conv_20_conv = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ), "LDKC2Tuple_u32TxOutZ");
                *ret_conv_20_conv = ret_var.data[u];
@@ -8298,7 +8298,7 @@ void register_tx_LDKFilter_jcall(const void* this_arg, const uint8_t (* txid)[32
        LDKu8slice script_pubkey_var = script_pubkey;
        int8_tArray script_pubkey_arr = init_int8_tArray(script_pubkey_var.datalen, __LINE__);
        memcpy(script_pubkey_arr->elems, script_pubkey_var.data, script_pubkey_var.datalen);
-       js_invoke_function_u_uu(j_calls->instance_ptr, 32, (uint32_t)txid_arr, (uint32_t)script_pubkey_arr);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 32, (uint32_t)txid_arr, (uint32_t)script_pubkey_arr, 0, 0, 0, 0);
 }
 LDKCOption_C2Tuple_usizeTransactionZZ register_output_LDKFilter_jcall(const void* this_arg, LDKWatchedOutput output) {
        LDKFilter_JCalls *j_calls = (LDKFilter_JCalls*) this_arg;
@@ -8311,7 +8311,7 @@ LDKCOption_C2Tuple_usizeTransactionZZ register_output_LDKFilter_jcall(const void
        if (output_var.is_owned) {
                output_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 33, (uint32_t)output_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 33, (uint32_t)output_ref, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCOption_C2Tuple_usizeTransactionZZ ret_conv = *(LDKCOption_C2Tuple_usizeTransactionZZ*)(ret_ptr);
@@ -8433,7 +8433,7 @@ static void LDKMessageSendEventsProvider_JCalls_free(void* this_arg) {
 }
 LDKCVec_MessageSendEventZ get_and_clear_pending_msg_events_LDKMessageSendEventsProvider_jcall(const void* this_arg) {
        LDKMessageSendEventsProvider_JCalls *j_calls = (LDKMessageSendEventsProvider_JCalls*) this_arg;
-       uint32_tArray ret = (uint32_tArray)js_invoke_function_u_(j_calls->instance_ptr, 34);
+       uint32_tArray ret = (uint32_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 34, 0, 0, 0, 0, 0, 0);
        LDKCVec_MessageSendEventZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
@@ -8480,7 +8480,7 @@ uint32_tArray  __attribute__((export_name("TS_MessageSendEventsProvider_get_and_
        LDKCVec_MessageSendEventZ ret_var = (this_arg_conv->get_and_clear_pending_msg_events)(this_arg_conv->this_arg);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t s = 0; s < ret_var.datalen; s++) {
                LDKMessageSendEvent *ret_conv_18_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
                *ret_conv_18_copy = ret_var.data[s];
@@ -8506,7 +8506,7 @@ void handle_event_LDKEventHandler_jcall(const void* this_arg, const LDKEvent * e
        LDKEventHandler_JCalls *j_calls = (LDKEventHandler_JCalls*) this_arg;
        LDKEvent *ret_event = MALLOC(sizeof(LDKEvent), "LDKEvent ret conversion");
        *ret_event = Event_clone(event);
-       js_invoke_function_u_u(j_calls->instance_ptr, 35, (uint32_t)(uint32_t)ret_event);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 35, (uint32_t)(uint32_t)ret_event, 0, 0, 0, 0, 0);
 }
 static void LDKEventHandler_JCalls_cloned(LDKEventHandler* new_obj) {
        LDKEventHandler_JCalls *j_calls = (LDKEventHandler_JCalls*) new_obj->this_arg;
@@ -8551,7 +8551,7 @@ void process_pending_events_LDKEventsProvider_jcall(const void* this_arg, LDKEve
        LDKEventsProvider_JCalls *j_calls = (LDKEventsProvider_JCalls*) this_arg;
        LDKEventHandler* handler_ret = MALLOC(sizeof(LDKEventHandler), "LDKEventHandler");
        *handler_ret = handler;
-       js_invoke_function_u_u(j_calls->instance_ptr, 36, (uint32_t)(uint32_t)handler_ret);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 36, (uint32_t)(uint32_t)handler_ret, 0, 0, 0, 0, 0);
 }
 static void LDKEventsProvider_JCalls_cloned(LDKEventsProvider* new_obj) {
        LDKEventsProvider_JCalls *j_calls = (LDKEventsProvider_JCalls*) new_obj->this_arg;
@@ -8630,14 +8630,14 @@ uint64_t channel_penalty_msat_LDKScore_jcall(const void* this_arg, uint64_t shor
        if (usage_var.is_owned) {
                usage_ref |= 1;
        }
-       return js_invoke_function_b_uuuu(j_calls->instance_ptr, 37, (uint32_t)short_channel_id_conv, (uint32_t)source_ref, (uint32_t)target_ref, (uint32_t)usage_ref);
+       return js_invoke_function_buuuuu(j_calls->instance_ptr, 37, (uint32_t)short_channel_id_conv, (uint32_t)source_ref, (uint32_t)target_ref, (uint32_t)usage_ref, 0, 0);
 }
 void payment_path_failed_LDKScore_jcall(void* this_arg, LDKCVec_RouteHopZ path, uint64_t short_channel_id) {
        LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
        LDKCVec_RouteHopZ path_var = path;
        uint32_tArray path_arr = NULL;
        path_arr = init_uint32_tArray(path_var.datalen, __LINE__);
-       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 4);
+       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 8);
        for (size_t k = 0; k < path_var.datalen; k++) {
                LDKRouteHop path_conv_10_var = path_var.data[k];
                uint32_t path_conv_10_ref = 0;
@@ -8653,14 +8653,14 @@ void payment_path_failed_LDKScore_jcall(void* this_arg, LDKCVec_RouteHopZ path,
        
        FREE(path_var.data);
        int64_t short_channel_id_conv = short_channel_id;
-       js_invoke_function_u_bb(j_calls->instance_ptr, 38, (uint32_t)path_arr, (uint32_t)short_channel_id_conv);
+       js_invoke_function_ubuuuu(j_calls->instance_ptr, 38, (uint32_t)path_arr, (uint32_t)short_channel_id_conv, 0, 0, 0, 0);
 }
 void payment_path_successful_LDKScore_jcall(void* this_arg, LDKCVec_RouteHopZ path) {
        LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
        LDKCVec_RouteHopZ path_var = path;
        uint32_tArray path_arr = NULL;
        path_arr = init_uint32_tArray(path_var.datalen, __LINE__);
-       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 4);
+       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 8);
        for (size_t k = 0; k < path_var.datalen; k++) {
                LDKRouteHop path_conv_10_var = path_var.data[k];
                uint32_t path_conv_10_ref = 0;
@@ -8675,14 +8675,14 @@ void payment_path_successful_LDKScore_jcall(void* this_arg, LDKCVec_RouteHopZ pa
        }
        
        FREE(path_var.data);
-       js_invoke_function_u_u(j_calls->instance_ptr, 39, (uint32_t)path_arr);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 39, (uint32_t)path_arr, 0, 0, 0, 0, 0);
 }
 void probe_failed_LDKScore_jcall(void* this_arg, LDKCVec_RouteHopZ path, uint64_t short_channel_id) {
        LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
        LDKCVec_RouteHopZ path_var = path;
        uint32_tArray path_arr = NULL;
        path_arr = init_uint32_tArray(path_var.datalen, __LINE__);
-       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 4);
+       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 8);
        for (size_t k = 0; k < path_var.datalen; k++) {
                LDKRouteHop path_conv_10_var = path_var.data[k];
                uint32_t path_conv_10_ref = 0;
@@ -8698,14 +8698,14 @@ void probe_failed_LDKScore_jcall(void* this_arg, LDKCVec_RouteHopZ path, uint64_
        
        FREE(path_var.data);
        int64_t short_channel_id_conv = short_channel_id;
-       js_invoke_function_u_bb(j_calls->instance_ptr, 40, (uint32_t)path_arr, (uint32_t)short_channel_id_conv);
+       js_invoke_function_ubuuuu(j_calls->instance_ptr, 40, (uint32_t)path_arr, (uint32_t)short_channel_id_conv, 0, 0, 0, 0);
 }
 void probe_successful_LDKScore_jcall(void* this_arg, LDKCVec_RouteHopZ path) {
        LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
        LDKCVec_RouteHopZ path_var = path;
        uint32_tArray path_arr = NULL;
        path_arr = init_uint32_tArray(path_var.datalen, __LINE__);
-       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 4);
+       uint32_t *path_arr_ptr = (uint32_t*)(((uint8_t*)path_arr) + 8);
        for (size_t k = 0; k < path_var.datalen; k++) {
                LDKRouteHop path_conv_10_var = path_var.data[k];
                uint32_t path_conv_10_ref = 0;
@@ -8720,11 +8720,11 @@ void probe_successful_LDKScore_jcall(void* this_arg, LDKCVec_RouteHopZ path) {
        }
        
        FREE(path_var.data);
-       js_invoke_function_u_u(j_calls->instance_ptr, 41, (uint32_t)path_arr);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 41, (uint32_t)path_arr, 0, 0, 0, 0, 0);
 }
 LDKCVec_u8Z write_LDKScore_jcall(const void* this_arg) {
        LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_u_(j_calls->instance_ptr, 42);
+       int8_tArray ret = (int8_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 42, 0, 0, 0, 0, 0, 0);
        LDKCVec_u8Z ret_ref;
        ret_ref.datalen = ret->arr_len;
        ret_ref.data = MALLOC(ret_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -8907,7 +8907,7 @@ LDKCResult_NoneErrorZ persist_manager_LDKPersister_jcall(const void* this_arg, c
        if (channel_manager_var.is_owned) {
                channel_manager_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 43, (uint32_t)channel_manager_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 43, (uint32_t)channel_manager_ref, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneErrorZ ret_conv = *(LDKCResult_NoneErrorZ*)(ret_ptr);
@@ -8926,7 +8926,7 @@ LDKCResult_NoneErrorZ persist_graph_LDKPersister_jcall(const void* this_arg, con
        if (network_graph_var.is_owned) {
                network_graph_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 44, (uint32_t)network_graph_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 44, (uint32_t)network_graph_ref, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneErrorZ ret_conv = *(LDKCResult_NoneErrorZ*)(ret_ptr);
@@ -8945,7 +8945,7 @@ LDKCResult_NoneErrorZ persist_scorer_LDKPersister_jcall(const void* this_arg, co
        if (scorer_var.is_owned) {
                scorer_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 45, (uint32_t)scorer_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 45, (uint32_t)scorer_ref, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneErrorZ ret_conv = *(LDKCResult_NoneErrorZ*)(ret_ptr);
@@ -9031,7 +9031,7 @@ void filtered_block_connected_LDKListen_jcall(const void* this_arg, const uint8_
        LDKCVec_C2Tuple_usizeTransactionZZ txdata_var = txdata;
        uint32_tArray txdata_arr = NULL;
        txdata_arr = init_uint32_tArray(txdata_var.datalen, __LINE__);
-       uint32_t *txdata_arr_ptr = (uint32_t*)(((uint8_t*)txdata_arr) + 4);
+       uint32_t *txdata_arr_ptr = (uint32_t*)(((uint8_t*)txdata_arr) + 8);
        for (size_t c = 0; c < txdata_var.datalen; c++) {
                LDKC2Tuple_usizeTransactionZ* txdata_conv_28_conv = MALLOC(sizeof(LDKC2Tuple_usizeTransactionZ), "LDKC2Tuple_usizeTransactionZ");
                *txdata_conv_28_conv = txdata_var.data[c];
@@ -9040,7 +9040,7 @@ void filtered_block_connected_LDKListen_jcall(const void* this_arg, const uint8_
        
        FREE(txdata_var.data);
        int32_t height_conv = height;
-       js_invoke_function_u_uuu(j_calls->instance_ptr, 46, (uint32_t)header_arr, (uint32_t)txdata_arr, (uint32_t)height_conv);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 46, (uint32_t)header_arr, (uint32_t)txdata_arr, (uint32_t)height_conv, 0, 0, 0);
 }
 void block_connected_LDKListen_jcall(const void* this_arg, LDKu8slice block, uint32_t height) {
        LDKListen_JCalls *j_calls = (LDKListen_JCalls*) this_arg;
@@ -9048,14 +9048,14 @@ void block_connected_LDKListen_jcall(const void* this_arg, LDKu8slice block, uin
        int8_tArray block_arr = init_int8_tArray(block_var.datalen, __LINE__);
        memcpy(block_arr->elems, block_var.data, block_var.datalen);
        int32_t height_conv = height;
-       js_invoke_function_u_uu(j_calls->instance_ptr, 47, (uint32_t)block_arr, (uint32_t)height_conv);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 47, (uint32_t)block_arr, (uint32_t)height_conv, 0, 0, 0, 0);
 }
 void block_disconnected_LDKListen_jcall(const void* this_arg, const uint8_t (* header)[80], uint32_t height) {
        LDKListen_JCalls *j_calls = (LDKListen_JCalls*) this_arg;
        int8_tArray header_arr = init_int8_tArray(80, __LINE__);
        memcpy(header_arr->elems, *header, 80);
        int32_t height_conv = height;
-       js_invoke_function_u_uu(j_calls->instance_ptr, 48, (uint32_t)header_arr, (uint32_t)height_conv);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 48, (uint32_t)header_arr, (uint32_t)height_conv, 0, 0, 0, 0);
 }
 static void LDKListen_JCalls_cloned(LDKListen* new_obj) {
        LDKListen_JCalls *j_calls = (LDKListen_JCalls*) new_obj->this_arg;
@@ -9146,7 +9146,7 @@ void transactions_confirmed_LDKConfirm_jcall(const void* this_arg, const uint8_t
        LDKCVec_C2Tuple_usizeTransactionZZ txdata_var = txdata;
        uint32_tArray txdata_arr = NULL;
        txdata_arr = init_uint32_tArray(txdata_var.datalen, __LINE__);
-       uint32_t *txdata_arr_ptr = (uint32_t*)(((uint8_t*)txdata_arr) + 4);
+       uint32_t *txdata_arr_ptr = (uint32_t*)(((uint8_t*)txdata_arr) + 8);
        for (size_t c = 0; c < txdata_var.datalen; c++) {
                LDKC2Tuple_usizeTransactionZ* txdata_conv_28_conv = MALLOC(sizeof(LDKC2Tuple_usizeTransactionZ), "LDKC2Tuple_usizeTransactionZ");
                *txdata_conv_28_conv = txdata_var.data[c];
@@ -9155,24 +9155,24 @@ void transactions_confirmed_LDKConfirm_jcall(const void* this_arg, const uint8_t
        
        FREE(txdata_var.data);
        int32_t height_conv = height;
-       js_invoke_function_u_uuu(j_calls->instance_ptr, 49, (uint32_t)header_arr, (uint32_t)txdata_arr, (uint32_t)height_conv);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 49, (uint32_t)header_arr, (uint32_t)txdata_arr, (uint32_t)height_conv, 0, 0, 0);
 }
 void transaction_unconfirmed_LDKConfirm_jcall(const void* this_arg, const uint8_t (* txid)[32]) {
        LDKConfirm_JCalls *j_calls = (LDKConfirm_JCalls*) this_arg;
        int8_tArray txid_arr = init_int8_tArray(32, __LINE__);
        memcpy(txid_arr->elems, *txid, 32);
-       js_invoke_function_u_u(j_calls->instance_ptr, 50, (uint32_t)txid_arr);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 50, (uint32_t)txid_arr, 0, 0, 0, 0, 0);
 }
 void best_block_updated_LDKConfirm_jcall(const void* this_arg, const uint8_t (* header)[80], uint32_t height) {
        LDKConfirm_JCalls *j_calls = (LDKConfirm_JCalls*) this_arg;
        int8_tArray header_arr = init_int8_tArray(80, __LINE__);
        memcpy(header_arr->elems, *header, 80);
        int32_t height_conv = height;
-       js_invoke_function_u_uu(j_calls->instance_ptr, 51, (uint32_t)header_arr, (uint32_t)height_conv);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 51, (uint32_t)header_arr, (uint32_t)height_conv, 0, 0, 0, 0);
 }
 LDKCVec_TxidZ get_relevant_txids_LDKConfirm_jcall(const void* this_arg) {
        LDKConfirm_JCalls *j_calls = (LDKConfirm_JCalls*) this_arg;
-       ptrArray ret = (ptrArray)js_invoke_function_u_(j_calls->instance_ptr, 52);
+       ptrArray ret = (ptrArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 52, 0, 0, 0, 0, 0, 0);
        LDKCVec_TxidZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
@@ -9270,7 +9270,7 @@ ptrArray  __attribute__((export_name("TS_Confirm_get_relevant_txids"))) TS_Confi
        LDKCVec_TxidZ ret_var = (this_arg_conv->get_relevant_txids)(this_arg_conv->this_arg);
        ptrArray ret_arr = NULL;
        ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 4);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
        for (size_t m = 0; m < ret_var.datalen; m++) {
                int8_tArray ret_conv_12_arr = init_int8_tArray(32, __LINE__);
                memcpy(ret_conv_12_arr->elems, ret_var.data[m].data, 32);
@@ -9321,7 +9321,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ persist_new_channel_LDKPersist_jcall(con
        if (update_id_var.is_owned) {
                update_id_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_uuu(j_calls->instance_ptr, 53, (uint32_t)channel_id_ref, (uint32_t)data_ref, (uint32_t)update_id_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 53, (uint32_t)channel_id_ref, (uint32_t)data_ref, (uint32_t)update_id_ref, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
@@ -9370,7 +9370,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcal
        if (update_id_var.is_owned) {
                update_id_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_uuuu(j_calls->instance_ptr, 54, (uint32_t)channel_id_ref, (uint32_t)update_ref, (uint32_t)data_ref, (uint32_t)update_id_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 54, (uint32_t)channel_id_ref, (uint32_t)update_ref, (uint32_t)data_ref, (uint32_t)update_id_ref, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
@@ -9483,7 +9483,7 @@ void handle_open_channel_LDKChannelMessageHandler_jcall(const void* this_arg, LD
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uuu(j_calls->instance_ptr, 55, (uint32_t)their_node_id_arr, (uint32_t)their_features_ref, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 55, (uint32_t)their_node_id_arr, (uint32_t)their_features_ref, (uint32_t)msg_ref, 0, 0, 0);
 }
 void handle_accept_channel_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, LDKInitFeatures their_features, const LDKAcceptChannel * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9508,7 +9508,7 @@ void handle_accept_channel_LDKChannelMessageHandler_jcall(const void* this_arg,
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uuu(j_calls->instance_ptr, 56, (uint32_t)their_node_id_arr, (uint32_t)their_features_ref, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 56, (uint32_t)their_node_id_arr, (uint32_t)their_features_ref, (uint32_t)msg_ref, 0, 0, 0);
 }
 void handle_funding_created_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKFundingCreated * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9524,7 +9524,7 @@ void handle_funding_created_LDKChannelMessageHandler_jcall(const void* this_arg,
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 57, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 57, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_funding_signed_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKFundingSigned * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9540,7 +9540,7 @@ void handle_funding_signed_LDKChannelMessageHandler_jcall(const void* this_arg,
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 58, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 58, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_channel_ready_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKChannelReady * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9556,7 +9556,7 @@ void handle_channel_ready_LDKChannelMessageHandler_jcall(const void* this_arg, L
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 59, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 59, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_shutdown_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKInitFeatures * their_features, const LDKShutdown * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9582,7 +9582,7 @@ void handle_shutdown_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPub
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uuu(j_calls->instance_ptr, 60, (uint32_t)their_node_id_arr, (uint32_t)their_features_ref, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 60, (uint32_t)their_node_id_arr, (uint32_t)their_features_ref, (uint32_t)msg_ref, 0, 0, 0);
 }
 void handle_closing_signed_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKClosingSigned * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9598,7 +9598,7 @@ void handle_closing_signed_LDKChannelMessageHandler_jcall(const void* this_arg,
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 61, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 61, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_update_add_htlc_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKUpdateAddHTLC * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9614,7 +9614,7 @@ void handle_update_add_htlc_LDKChannelMessageHandler_jcall(const void* this_arg,
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 62, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 62, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_update_fulfill_htlc_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKUpdateFulfillHTLC * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9630,7 +9630,7 @@ void handle_update_fulfill_htlc_LDKChannelMessageHandler_jcall(const void* this_
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 63, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 63, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_update_fail_htlc_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKUpdateFailHTLC * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9646,7 +9646,7 @@ void handle_update_fail_htlc_LDKChannelMessageHandler_jcall(const void* this_arg
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 64, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 64, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_update_fail_malformed_htlc_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKUpdateFailMalformedHTLC * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9662,7 +9662,7 @@ void handle_update_fail_malformed_htlc_LDKChannelMessageHandler_jcall(const void
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 65, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 65, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_commitment_signed_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKCommitmentSigned * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9678,7 +9678,7 @@ void handle_commitment_signed_LDKChannelMessageHandler_jcall(const void* this_ar
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 66, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 66, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_revoke_and_ack_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKRevokeAndACK * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9694,7 +9694,7 @@ void handle_revoke_and_ack_LDKChannelMessageHandler_jcall(const void* this_arg,
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 67, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 67, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_update_fee_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKUpdateFee * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9710,7 +9710,7 @@ void handle_update_fee_LDKChannelMessageHandler_jcall(const void* this_arg, LDKP
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 68, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 68, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_announcement_signatures_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKAnnouncementSignatures * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9726,14 +9726,14 @@ void handle_announcement_signatures_LDKChannelMessageHandler_jcall(const void* t
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 69, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 69, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void peer_disconnected_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, bool no_connection_possible) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
        int8_tArray their_node_id_arr = init_int8_tArray(33, __LINE__);
        memcpy(their_node_id_arr->elems, their_node_id.compressed_form, 33);
        jboolean no_connection_possible_conv = no_connection_possible;
-       js_invoke_function_u_uu(j_calls->instance_ptr, 70, (uint32_t)their_node_id_arr, (uint32_t)no_connection_possible_conv);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 70, (uint32_t)their_node_id_arr, (uint32_t)no_connection_possible_conv, 0, 0, 0, 0);
 }
 void peer_connected_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKInit * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9749,7 +9749,7 @@ void peer_connected_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPubl
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 71, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 71, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_channel_reestablish_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKChannelReestablish * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9765,7 +9765,7 @@ void handle_channel_reestablish_LDKChannelMessageHandler_jcall(const void* this_
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 72, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 72, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_channel_update_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKChannelUpdate * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9781,7 +9781,7 @@ void handle_channel_update_LDKChannelMessageHandler_jcall(const void* this_arg,
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 73, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 73, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 void handle_error_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKErrorMessage * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -9797,7 +9797,7 @@ void handle_error_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublic
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 74, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 74, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
 }
 static void LDKChannelMessageHandler_JCalls_cloned(LDKChannelMessageHandler* new_obj) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) new_obj->this_arg;
@@ -10155,7 +10155,7 @@ LDKCResult_boolLightningErrorZ handle_node_announcement_LDKRoutingMessageHandler
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 75, (uint32_t)msg_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 75, (uint32_t)msg_ref, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
@@ -10174,7 +10174,7 @@ LDKCResult_boolLightningErrorZ handle_channel_announcement_LDKRoutingMessageHand
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 76, (uint32_t)msg_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 76, (uint32_t)msg_ref, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
@@ -10193,7 +10193,7 @@ LDKCResult_boolLightningErrorZ handle_channel_update_LDKRoutingMessageHandler_jc
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_u(j_calls->instance_ptr, 77, (uint32_t)msg_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 77, (uint32_t)msg_ref, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
@@ -10204,7 +10204,7 @@ LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ get_next_channel
        LDKRoutingMessageHandler_JCalls *j_calls = (LDKRoutingMessageHandler_JCalls*) this_arg;
        int64_t starting_point_conv = starting_point;
        int8_t batch_amount_conv = batch_amount;
-       uint32_tArray ret = (uint32_tArray)js_invoke_function_u_uu(j_calls->instance_ptr, 78, (uint32_t)starting_point_conv, (uint32_t)batch_amount_conv);
+       uint32_tArray ret = (uint32_tArray)js_invoke_function_buuuuu(j_calls->instance_ptr, 78, (uint32_t)starting_point_conv, (uint32_t)batch_amount_conv, 0, 0, 0, 0);
        LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
@@ -10228,7 +10228,7 @@ LDKCVec_NodeAnnouncementZ get_next_node_announcements_LDKRoutingMessageHandler_j
        int8_tArray starting_point_arr = init_int8_tArray(33, __LINE__);
        memcpy(starting_point_arr->elems, starting_point.compressed_form, 33);
        int8_t batch_amount_conv = batch_amount;
-       uint32_tArray ret = (uint32_tArray)js_invoke_function_u_uu(j_calls->instance_ptr, 79, (uint32_t)starting_point_arr, (uint32_t)batch_amount_conv);
+       uint32_tArray ret = (uint32_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 79, (uint32_t)starting_point_arr, (uint32_t)batch_amount_conv, 0, 0, 0, 0);
        LDKCVec_NodeAnnouncementZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
@@ -10261,7 +10261,7 @@ void peer_connected_LDKRoutingMessageHandler_jcall(const void* this_arg, LDKPubl
        if (init_var.is_owned) {
                init_ref |= 1;
        }
-       js_invoke_function_u_uu(j_calls->instance_ptr, 80, (uint32_t)their_node_id_arr, (uint32_t)init_ref);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 80, (uint32_t)their_node_id_arr, (uint32_t)init_ref, 0, 0, 0, 0);
 }
 LDKCResult_NoneLightningErrorZ handle_reply_channel_range_LDKRoutingMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, LDKReplyChannelRange msg) {
        LDKRoutingMessageHandler_JCalls *j_calls = (LDKRoutingMessageHandler_JCalls*) this_arg;
@@ -10276,7 +10276,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_channel_range_LDKRoutingMessageHandl
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 81, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 81, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
@@ -10296,7 +10296,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_short_channel_ids_end_LDKRoutingMess
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 82, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 82, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
@@ -10316,7 +10316,7 @@ LDKCResult_NoneLightningErrorZ handle_query_channel_range_LDKRoutingMessageHandl
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 83, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 83, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
@@ -10336,7 +10336,7 @@ LDKCResult_NoneLightningErrorZ handle_query_short_channel_ids_LDKRoutingMessageH
        if (msg_var.is_owned) {
                msg_ref |= 1;
        }
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 84, (uint32_t)their_node_id_arr, (uint32_t)msg_ref);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 84, (uint32_t)their_node_id_arr, (uint32_t)msg_ref, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
@@ -10422,7 +10422,7 @@ uint32_tArray  __attribute__((export_name("TS_RoutingMessageHandler_get_next_cha
        LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ ret_var = (this_arg_conv->get_next_channel_announcements)(this_arg_conv->this_arg, starting_point, batch_amount);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t h = 0; h < ret_var.datalen; h++) {
                LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* ret_conv_59_conv = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ), "LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ");
                *ret_conv_59_conv = ret_var.data[h];
@@ -10443,7 +10443,7 @@ uint32_tArray  __attribute__((export_name("TS_RoutingMessageHandler_get_next_nod
        LDKCVec_NodeAnnouncementZ ret_var = (this_arg_conv->get_next_node_announcements)(this_arg_conv->this_arg, starting_point_ref, batch_amount);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t s = 0; s < ret_var.datalen; s++) {
                LDKNodeAnnouncement ret_conv_18_var = ret_var.data[s];
                uint32_t ret_conv_18_ref = 0;
@@ -10559,7 +10559,7 @@ LDKCResult_COption_TypeZDecodeErrorZ read_LDKCustomMessageReader_jcall(const voi
        LDKu8slice buffer_var = buffer;
        int8_tArray buffer_arr = init_int8_tArray(buffer_var.datalen, __LINE__);
        memcpy(buffer_arr->elems, buffer_var.data, buffer_var.datalen);
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 85, (uint32_t)message_type_conv, (uint32_t)buffer_arr);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 85, (uint32_t)message_type_conv, (uint32_t)buffer_arr, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_COption_TypeZDecodeErrorZ ret_conv = *(LDKCResult_COption_TypeZDecodeErrorZ*)(ret_ptr);
@@ -10617,7 +10617,7 @@ LDKCResult_NoneLightningErrorZ handle_custom_message_LDKCustomMessageHandler_jca
        *msg_ret = msg;
        int8_tArray sender_node_id_arr = init_int8_tArray(33, __LINE__);
        memcpy(sender_node_id_arr->elems, sender_node_id.compressed_form, 33);
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 86, (uint32_t)(uint32_t)msg_ret, (uint32_t)sender_node_id_arr);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 86, (uint32_t)(uint32_t)msg_ret, (uint32_t)sender_node_id_arr, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
@@ -10626,7 +10626,7 @@ LDKCResult_NoneLightningErrorZ handle_custom_message_LDKCustomMessageHandler_jca
 }
 LDKCVec_C2Tuple_PublicKeyTypeZZ get_and_clear_pending_msg_LDKCustomMessageHandler_jcall(const void* this_arg) {
        LDKCustomMessageHandler_JCalls *j_calls = (LDKCustomMessageHandler_JCalls*) this_arg;
-       uint32_tArray ret = (uint32_tArray)js_invoke_function_u_(j_calls->instance_ptr, 87);
+       uint32_tArray ret = (uint32_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 87, 0, 0, 0, 0, 0, 0);
        LDKCVec_C2Tuple_PublicKeyTypeZZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
@@ -10696,7 +10696,7 @@ uint32_tArray  __attribute__((export_name("TS_CustomMessageHandler_get_and_clear
        LDKCVec_C2Tuple_PublicKeyTypeZZ ret_var = (this_arg_conv->get_and_clear_pending_msg)(this_arg_conv->this_arg);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t z = 0; z < ret_var.datalen; z++) {
                LDKC2Tuple_PublicKeyTypeZ* ret_conv_25_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyTypeZ), "LDKC2Tuple_PublicKeyTypeZ");
                *ret_conv_25_conv = ret_var.data[z];
@@ -10723,21 +10723,21 @@ uintptr_t send_data_LDKSocketDescriptor_jcall(void* this_arg, LDKu8slice data, b
        int8_tArray data_arr = init_int8_tArray(data_var.datalen, __LINE__);
        memcpy(data_arr->elems, data_var.data, data_var.datalen);
        jboolean resume_read_conv = resume_read;
-       return js_invoke_function_u_uu(j_calls->instance_ptr, 88, (uint32_t)data_arr, (uint32_t)resume_read_conv);
+       return js_invoke_function_uuuuuu(j_calls->instance_ptr, 88, (uint32_t)data_arr, (uint32_t)resume_read_conv, 0, 0, 0, 0);
 }
 void disconnect_socket_LDKSocketDescriptor_jcall(void* this_arg) {
        LDKSocketDescriptor_JCalls *j_calls = (LDKSocketDescriptor_JCalls*) this_arg;
-       js_invoke_function_u_(j_calls->instance_ptr, 89);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 89, 0, 0, 0, 0, 0, 0);
 }
 bool eq_LDKSocketDescriptor_jcall(const void* this_arg, const LDKSocketDescriptor * other_arg) {
        LDKSocketDescriptor_JCalls *j_calls = (LDKSocketDescriptor_JCalls*) this_arg;
        LDKSocketDescriptor *other_arg_clone = MALLOC(sizeof(LDKSocketDescriptor), "LDKSocketDescriptor");
        *other_arg_clone = SocketDescriptor_clone(other_arg);
-       return js_invoke_function_u_u(j_calls->instance_ptr, 90, (uint32_t)(uint32_t)other_arg_clone);
+       return js_invoke_function_uuuuuu(j_calls->instance_ptr, 90, (uint32_t)(uint32_t)other_arg_clone, 0, 0, 0, 0, 0);
 }
 uint64_t hash_LDKSocketDescriptor_jcall(const void* this_arg) {
        LDKSocketDescriptor_JCalls *j_calls = (LDKSocketDescriptor_JCalls*) this_arg;
-       return js_invoke_function_b_(j_calls->instance_ptr, 91);
+       return js_invoke_function_uuuuuu(j_calls->instance_ptr, 91, 0, 0, 0, 0, 0, 0);
 }
 static void LDKSocketDescriptor_JCalls_cloned(LDKSocketDescriptor* new_obj) {
        LDKSocketDescriptor_JCalls *j_calls = (LDKSocketDescriptor_JCalls*) new_obj->this_arg;
@@ -10838,7 +10838,7 @@ static void LDKLockableScore_JCalls_free(void* this_arg) {
 }
 LDKScore lock_LDKLockableScore_jcall(const void* this_arg) {
        LDKLockableScore_JCalls *j_calls = (LDKLockableScore_JCalls*) this_arg;
-       uint32_t ret = js_invoke_function_u_(j_calls->instance_ptr, 92);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 92, 0, 0, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKScore ret_conv = *(LDKScore*)(ret_ptr);
@@ -10928,7 +10928,7 @@ static void LDKPayer_JCalls_free(void* this_arg) {
 }
 LDKPublicKey node_id_LDKPayer_jcall(const void* this_arg) {
        LDKPayer_JCalls *j_calls = (LDKPayer_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_u_(j_calls->instance_ptr, 93);
+       int8_tArray ret = (int8_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 93, 0, 0, 0, 0, 0, 0);
        LDKPublicKey ret_ref;
        CHECK(ret->arr_len == 33);
        memcpy(ret_ref.compressed_form, ret->elems, 33); FREE(ret);
@@ -10936,7 +10936,7 @@ LDKPublicKey node_id_LDKPayer_jcall(const void* this_arg) {
 }
 LDKCVec_ChannelDetailsZ first_hops_LDKPayer_jcall(const void* this_arg) {
        LDKPayer_JCalls *j_calls = (LDKPayer_JCalls*) this_arg;
-       uint32_tArray ret = (uint32_tArray)js_invoke_function_u_(j_calls->instance_ptr, 94);
+       uint32_tArray ret = (uint32_tArray)js_invoke_function_uuuuuu(j_calls->instance_ptr, 94, 0, 0, 0, 0, 0, 0);
        LDKCVec_ChannelDetailsZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
@@ -10971,7 +10971,7 @@ LDKCResult_PaymentIdPaymentSendFailureZ send_payment_LDKPayer_jcall(const void*
        memcpy(payment_hash_arr->elems, payment_hash.data, 32);
        int8_tArray payment_secret_arr = init_int8_tArray(32, __LINE__);
        memcpy(payment_secret_arr->elems, payment_secret.data, 32);
-       uint32_t ret = js_invoke_function_u_uuu(j_calls->instance_ptr, 95, (uint32_t)route_ref, (uint32_t)payment_hash_arr, (uint32_t)payment_secret_arr);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 95, (uint32_t)route_ref, (uint32_t)payment_hash_arr, (uint32_t)payment_secret_arr, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_PaymentIdPaymentSendFailureZ ret_conv = *(LDKCResult_PaymentIdPaymentSendFailureZ*)(ret_ptr);
@@ -10992,7 +10992,7 @@ LDKCResult_PaymentIdPaymentSendFailureZ send_spontaneous_payment_LDKPayer_jcall(
        }
        int8_tArray payment_preimage_arr = init_int8_tArray(32, __LINE__);
        memcpy(payment_preimage_arr->elems, payment_preimage.data, 32);
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 96, (uint32_t)route_ref, (uint32_t)payment_preimage_arr);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 96, (uint32_t)route_ref, (uint32_t)payment_preimage_arr, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_PaymentIdPaymentSendFailureZ ret_conv = *(LDKCResult_PaymentIdPaymentSendFailureZ*)(ret_ptr);
@@ -11013,7 +11013,7 @@ LDKCResult_NonePaymentSendFailureZ retry_payment_LDKPayer_jcall(const void* this
        }
        int8_tArray payment_id_arr = init_int8_tArray(32, __LINE__);
        memcpy(payment_id_arr->elems, payment_id.data, 32);
-       uint32_t ret = js_invoke_function_u_uu(j_calls->instance_ptr, 97, (uint32_t)route_ref, (uint32_t)payment_id_arr);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 97, (uint32_t)route_ref, (uint32_t)payment_id_arr, 0, 0, 0, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NonePaymentSendFailureZ ret_conv = *(LDKCResult_NonePaymentSendFailureZ*)(ret_ptr);
@@ -11024,7 +11024,7 @@ void abandon_payment_LDKPayer_jcall(const void* this_arg, LDKThirtyTwoBytes paym
        LDKPayer_JCalls *j_calls = (LDKPayer_JCalls*) this_arg;
        int8_tArray payment_id_arr = init_int8_tArray(32, __LINE__);
        memcpy(payment_id_arr->elems, payment_id.data, 32);
-       js_invoke_function_u_u(j_calls->instance_ptr, 98, (uint32_t)payment_id_arr);
+       js_invoke_function_uuuuuu(j_calls->instance_ptr, 98, (uint32_t)payment_id_arr, 0, 0, 0, 0, 0);
 }
 static void LDKPayer_JCalls_cloned(LDKPayer* new_obj) {
        LDKPayer_JCalls *j_calls = (LDKPayer_JCalls*) new_obj->this_arg;
@@ -11068,7 +11068,7 @@ uint32_tArray  __attribute__((export_name("TS_Payer_first_hops"))) TS_Payer_firs
        LDKCVec_ChannelDetailsZ ret_var = (this_arg_conv->first_hops)(this_arg_conv->this_arg);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t q = 0; q < ret_var.datalen; q++) {
                LDKChannelDetails ret_conv_16_var = ret_var.data[q];
                uint32_t ret_conv_16_ref = 0;
@@ -11178,7 +11178,7 @@ LDKCResult_RouteLightningErrorZ find_route_LDKRouter_jcall(const void* this_arg,
        if (first_hops != NULL) {
                LDKCVec_ChannelDetailsZ first_hops_var = *first_hops_var_ptr;
                first_hops_arr = init_uint32_tArray(first_hops_var.datalen, __LINE__);
-               uint32_t *first_hops_arr_ptr = (uint32_t*)(((uint8_t*)first_hops_arr) + 4);
+               uint32_t *first_hops_arr_ptr = (uint32_t*)(((uint8_t*)first_hops_arr) + 8);
                for (size_t q = 0; q < first_hops_var.datalen; q++) {
                        LDKChannelDetails first_hops_conv_16_var =      first_hops_var.data[q];
                        uint32_t first_hops_conv_16_ref = 0;
@@ -11195,7 +11195,7 @@ LDKCResult_RouteLightningErrorZ find_route_LDKRouter_jcall(const void* this_arg,
        }
        // WARNING: This object doesn't live past this scope, needs clone!
        uint32_t ret_scorer = ((uintptr_t)scorer) | 1;
-       uint32_t ret = js_invoke_function_u_uuuuu(j_calls->instance_ptr, 99, (uint32_t)payer_arr, (uint32_t)route_params_ref, (uint32_t)payment_hash_arr, (uint32_t)first_hops_arr, (uint32_t)ret_scorer);
+       uint32_t ret = js_invoke_function_uuuuuu(j_calls->instance_ptr, 99, (uint32_t)payer_arr, (uint32_t)route_params_ref, (uint32_t)payment_hash_arr, (uint32_t)first_hops_arr, (uint32_t)ret_scorer, 0);
        void* ret_ptr = (void*)(((uintptr_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_RouteLightningErrorZ ret_conv = *(LDKCResult_RouteLightningErrorZ*)(ret_ptr);
@@ -23449,7 +23449,7 @@ uint32_tArray  __attribute__((export_name("TS_ChainMonitor_get_claimable_balance
        LDKCVec_BalanceZ ret_var = ChainMonitor_get_claimable_balances(&this_arg_conv, ignored_channels_constr);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t j = 0; j < ret_var.datalen; j++) {
                LDKBalance *ret_conv_9_copy = MALLOC(sizeof(LDKBalance), "LDKBalance");
                *ret_conv_9_copy = ret_var.data[j];
@@ -23484,7 +23484,7 @@ uint32_tArray  __attribute__((export_name("TS_ChainMonitor_list_monitors"))) TS_
        LDKCVec_OutPointZ ret_var = ChainMonitor_list_monitors(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t k = 0; k < ret_var.datalen; k++) {
                LDKOutPoint ret_conv_10_var = ret_var.data[k];
                uint32_t ret_conv_10_ref = 0;
@@ -23987,7 +23987,7 @@ uint32_tArray  __attribute__((export_name("TS_ChannelMonitor_get_outputs_to_watc
        LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ ret_var = ChannelMonitor_get_outputs_to_watch(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t o = 0; o < ret_var.datalen; o++) {
                LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* ret_conv_40_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ");
                *ret_conv_40_conv = ret_var.data[o];
@@ -24017,7 +24017,7 @@ uint32_tArray  __attribute__((export_name("TS_ChannelMonitor_get_and_clear_pendi
        LDKCVec_MonitorEventZ ret_var = ChannelMonitor_get_and_clear_pending_monitor_events(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t o = 0; o < ret_var.datalen; o++) {
                LDKMonitorEvent *ret_conv_14_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
                *ret_conv_14_copy = ret_var.data[o];
@@ -24037,7 +24037,7 @@ uint32_tArray  __attribute__((export_name("TS_ChannelMonitor_get_and_clear_pendi
        LDKCVec_EventZ ret_var = ChannelMonitor_get_and_clear_pending_events(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t h = 0; h < ret_var.datalen; h++) {
                LDKEvent *ret_conv_7_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
                *ret_conv_7_copy = ret_var.data[h];
@@ -24070,7 +24070,7 @@ ptrArray  __attribute__((export_name("TS_ChannelMonitor_get_latest_holder_commit
        LDKCVec_TransactionZ ret_var = ChannelMonitor_get_latest_holder_commitment_txn(&this_arg_conv, logger_conv);
        ptrArray ret_arr = NULL;
        ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 4);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
        for (size_t m = 0; m < ret_var.datalen; m++) {
                LDKTransaction ret_conv_12_var = ret_var.data[m];
                int8_tArray ret_conv_12_arr = init_int8_tArray(ret_conv_12_var.datalen, __LINE__);
@@ -24132,7 +24132,7 @@ uint32_tArray  __attribute__((export_name("TS_ChannelMonitor_block_connected")))
        LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ ret_var = ChannelMonitor_block_connected(&this_arg_conv, header_ref, txdata_constr, height, broadcaster_conv, fee_estimator_conv, logger_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t n = 0; n < ret_var.datalen; n++) {
                LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* ret_conv_39_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ");
                *ret_conv_39_conv = ret_var.data[n];
@@ -24225,7 +24225,7 @@ uint32_tArray  __attribute__((export_name("TS_ChannelMonitor_transactions_confir
        LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ ret_var = ChannelMonitor_transactions_confirmed(&this_arg_conv, header_ref, txdata_constr, height, broadcaster_conv, fee_estimator_conv, logger_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t n = 0; n < ret_var.datalen; n++) {
                LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* ret_conv_39_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ");
                *ret_conv_39_conv = ret_var.data[n];
@@ -24302,7 +24302,7 @@ uint32_tArray  __attribute__((export_name("TS_ChannelMonitor_best_block_updated"
        LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ ret_var = ChannelMonitor_best_block_updated(&this_arg_conv, header_ref, height, broadcaster_conv, fee_estimator_conv, logger_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t n = 0; n < ret_var.datalen; n++) {
                LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* ret_conv_39_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ");
                *ret_conv_39_conv = ret_var.data[n];
@@ -24321,7 +24321,7 @@ ptrArray  __attribute__((export_name("TS_ChannelMonitor_get_relevant_txids"))) T
        LDKCVec_TxidZ ret_var = ChannelMonitor_get_relevant_txids(&this_arg_conv);
        ptrArray ret_arr = NULL;
        ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 4);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
        for (size_t m = 0; m < ret_var.datalen; m++) {
                int8_tArray ret_conv_12_arr = init_int8_tArray(32, __LINE__);
                memcpy(ret_conv_12_arr->elems, ret_var.data[m].data, 32);
@@ -24357,7 +24357,7 @@ uint32_tArray  __attribute__((export_name("TS_ChannelMonitor_get_claimable_balan
        LDKCVec_BalanceZ ret_var = ChannelMonitor_get_claimable_balances(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t j = 0; j < ret_var.datalen; j++) {
                LDKBalance *ret_conv_9_copy = MALLOC(sizeof(LDKBalance), "LDKBalance");
                *ret_conv_9_copy = ret_var.data[j];
@@ -24612,6 +24612,16 @@ void  __attribute__((export_name("TS_DelayedPaymentOutputDescriptor_set_to_self_
        DelayedPaymentOutputDescriptor_set_to_self_delay(&this_ptr_conv, val);
 }
 
+uint32_t  __attribute__((export_name("TS_DelayedPaymentOutputDescriptor_get_output"))) TS_DelayedPaymentOutputDescriptor_get_output(uint32_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = DelayedPaymentOutputDescriptor_get_output(&this_ptr_conv);
+       return (uint32_t)ret_ref;
+}
+
 void  __attribute__((export_name("TS_DelayedPaymentOutputDescriptor_set_output"))) TS_DelayedPaymentOutputDescriptor_set_output(uint32_t this_ptr, uint32_t val) {
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -24812,6 +24822,16 @@ void  __attribute__((export_name("TS_StaticPaymentOutputDescriptor_set_outpoint"
        StaticPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
 }
 
+uint32_t  __attribute__((export_name("TS_StaticPaymentOutputDescriptor_get_output"))) TS_StaticPaymentOutputDescriptor_get_output(uint32_t this_ptr) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = StaticPaymentOutputDescriptor_get_output(&this_ptr_conv);
+       return (uint32_t)ret_ref;
+}
+
 void  __attribute__((export_name("TS_StaticPaymentOutputDescriptor_set_output"))) TS_StaticPaymentOutputDescriptor_set_output(uint32_t this_ptr, uint32_t val) {
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -26912,7 +26932,7 @@ uint32_tArray  __attribute__((export_name("TS_PhantomRouteHints_get_channels")))
        LDKCVec_ChannelDetailsZ ret_var = PhantomRouteHints_get_channels(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t q = 0; q < ret_var.datalen; q++) {
                LDKChannelDetails ret_conv_16_var = ret_var.data[q];
                uint32_t ret_conv_16_ref = 0;
@@ -27165,7 +27185,7 @@ uint32_tArray  __attribute__((export_name("TS_ChannelManager_list_channels"))) T
        LDKCVec_ChannelDetailsZ ret_var = ChannelManager_list_channels(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t q = 0; q < ret_var.datalen; q++) {
                LDKChannelDetails ret_conv_16_var = ret_var.data[q];
                uint32_t ret_conv_16_ref = 0;
@@ -27191,7 +27211,7 @@ uint32_tArray  __attribute__((export_name("TS_ChannelManager_list_usable_channel
        LDKCVec_ChannelDetailsZ ret_var = ChannelManager_list_usable_channels(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t q = 0; q < ret_var.datalen; q++) {
                LDKChannelDetails ret_conv_16_var = ret_var.data[q];
                uint32_t ret_conv_16_ref = 0;
@@ -30690,6 +30710,25 @@ void  __attribute__((export_name("TS_CommitmentSigned_set_signature"))) TS_Commi
        CommitmentSigned_set_signature(&this_ptr_conv, val_ref);
 }
 
+ptrArray  __attribute__((export_name("TS_CommitmentSigned_get_htlc_signatures"))) TS_CommitmentSigned_get_htlc_signatures(uint32_t this_ptr) {
+       LDKCommitmentSigned this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_SignatureZ ret_var = CommitmentSigned_get_htlc_signatures(&this_ptr_conv);
+       ptrArray ret_arr = NULL;
+       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
+       for (size_t m = 0; m < ret_var.datalen; m++) {
+               int8_tArray ret_conv_12_arr = init_int8_tArray(64, __LINE__);
+               memcpy(ret_conv_12_arr->elems, ret_var.data[m].compact_form, 64);
+               ret_arr_ptr[m] = ret_conv_12_arr;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 void  __attribute__((export_name("TS_CommitmentSigned_set_htlc_signatures"))) TS_CommitmentSigned_set_htlc_signatures(uint32_t this_ptr, ptrArray val) {
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -31590,6 +31629,26 @@ void  __attribute__((export_name("TS_UnsignedNodeAnnouncement_set_alias"))) TS_U
        UnsignedNodeAnnouncement_set_alias(&this_ptr_conv, val_ref);
 }
 
+uint32_tArray  __attribute__((export_name("TS_UnsignedNodeAnnouncement_get_addresses"))) TS_UnsignedNodeAnnouncement_get_addresses(uint32_t this_ptr) {
+       LDKUnsignedNodeAnnouncement this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_NetAddressZ ret_var = UnsignedNodeAnnouncement_get_addresses(&this_ptr_conv);
+       uint32_tArray ret_arr = NULL;
+       ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t m = 0; m < ret_var.datalen; m++) {
+               LDKNetAddress *ret_conv_12_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
+               *ret_conv_12_copy = ret_var.data[m];
+               uint32_t ret_conv_12_ref = (uintptr_t)ret_conv_12_copy;
+               ret_arr_ptr[m] = ret_conv_12_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 void  __attribute__((export_name("TS_UnsignedNodeAnnouncement_set_addresses"))) TS_UnsignedNodeAnnouncement_set_addresses(uint32_t this_ptr, uint32_tArray val) {
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -32323,6 +32382,18 @@ void  __attribute__((export_name("TS_UnsignedChannelUpdate_set_fee_proportional_
        UnsignedChannelUpdate_set_fee_proportional_millionths(&this_ptr_conv, val);
 }
 
+int8_tArray  __attribute__((export_name("TS_UnsignedChannelUpdate_get_excess_data"))) TS_UnsignedChannelUpdate_get_excess_data(uint32_t this_ptr) {
+       LDKUnsignedChannelUpdate this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_u8Z ret_var = UnsignedChannelUpdate_get_excess_data(&this_ptr_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
 void  __attribute__((export_name("TS_UnsignedChannelUpdate_set_excess_data"))) TS_UnsignedChannelUpdate_set_excess_data(uint32_t this_ptr, int8_tArray val) {
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -32708,6 +32779,24 @@ void  __attribute__((export_name("TS_ReplyChannelRange_set_sync_complete"))) TS_
        ReplyChannelRange_set_sync_complete(&this_ptr_conv, val);
 }
 
+int64_tArray  __attribute__((export_name("TS_ReplyChannelRange_get_short_channel_ids"))) TS_ReplyChannelRange_get_short_channel_ids(uint32_t this_ptr) {
+       LDKReplyChannelRange this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_u64Z ret_var = ReplyChannelRange_get_short_channel_ids(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int64_t ret_conv_8_conv = ret_var.data[i];
+               ret_arr_ptr[i] = ret_conv_8_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 void  __attribute__((export_name("TS_ReplyChannelRange_set_short_channel_ids"))) TS_ReplyChannelRange_set_short_channel_ids(uint32_t this_ptr, int64_tArray val) {
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -32823,6 +32912,24 @@ void  __attribute__((export_name("TS_QueryShortChannelIds_set_chain_hash"))) TS_
        QueryShortChannelIds_set_chain_hash(&this_ptr_conv, val_ref);
 }
 
+int64_tArray  __attribute__((export_name("TS_QueryShortChannelIds_get_short_channel_ids"))) TS_QueryShortChannelIds_get_short_channel_ids(uint32_t this_ptr) {
+       LDKQueryShortChannelIds this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_u64Z ret_var = QueryShortChannelIds_get_short_channel_ids(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int64_t ret_conv_8_conv = ret_var.data[i];
+               ret_arr_ptr[i] = ret_conv_8_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 void  __attribute__((export_name("TS_QueryShortChannelIds_set_short_channel_ids"))) TS_QueryShortChannelIds_set_short_channel_ids(uint32_t this_ptr, int64_tArray val) {
        LDKQueryShortChannelIds this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -33337,7 +33444,7 @@ uint32_tArray  __attribute__((export_name("TS_CommitmentUpdate_get_update_add_ht
        LDKCVec_UpdateAddHTLCZ ret_var = CommitmentUpdate_get_update_add_htlcs(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t p = 0; p < ret_var.datalen; p++) {
                LDKUpdateAddHTLC ret_conv_15_var = ret_var.data[p];
                uint32_t ret_conv_15_ref = 0;
@@ -33388,7 +33495,7 @@ uint32_tArray  __attribute__((export_name("TS_CommitmentUpdate_get_update_fulfil
        LDKCVec_UpdateFulfillHTLCZ ret_var = CommitmentUpdate_get_update_fulfill_htlcs(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t t = 0; t < ret_var.datalen; t++) {
                LDKUpdateFulfillHTLC ret_conv_19_var = ret_var.data[t];
                uint32_t ret_conv_19_ref = 0;
@@ -33439,7 +33546,7 @@ uint32_tArray  __attribute__((export_name("TS_CommitmentUpdate_get_update_fail_h
        LDKCVec_UpdateFailHTLCZ ret_var = CommitmentUpdate_get_update_fail_htlcs(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t q = 0; q < ret_var.datalen; q++) {
                LDKUpdateFailHTLC ret_conv_16_var = ret_var.data[q];
                uint32_t ret_conv_16_ref = 0;
@@ -33490,7 +33597,7 @@ uint32_tArray  __attribute__((export_name("TS_CommitmentUpdate_get_update_fail_m
        LDKCVec_UpdateFailMalformedHTLCZ ret_var = CommitmentUpdate_get_update_fail_malformed_htlcs(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t z = 0; z < ret_var.datalen; z++) {
                LDKUpdateFailMalformedHTLC ret_conv_25_var = ret_var.data[z];
                uint32_t ret_conv_25_ref = 0;
@@ -34835,7 +34942,7 @@ ptrArray  __attribute__((export_name("TS_PeerManager_get_peer_node_ids"))) TS_Pe
        LDKCVec_PublicKeyZ ret_var = PeerManager_get_peer_node_ids(&this_arg_conv);
        ptrArray ret_arr = NULL;
        ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 4);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
        for (size_t m = 0; m < ret_var.datalen; m++) {
                int8_tArray ret_conv_12_arr = init_int8_tArray(33, __LINE__);
                memcpy(ret_conv_12_arr->elems, ret_var.data[m].compressed_form, 33);
@@ -36404,6 +36511,25 @@ void  __attribute__((export_name("TS_HolderCommitmentTransaction_set_counterpart
        HolderCommitmentTransaction_set_counterparty_sig(&this_ptr_conv, val_ref);
 }
 
+ptrArray  __attribute__((export_name("TS_HolderCommitmentTransaction_get_counterparty_htlc_sigs"))) TS_HolderCommitmentTransaction_get_counterparty_htlc_sigs(uint32_t this_ptr) {
+       LDKHolderCommitmentTransaction this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_SignatureZ ret_var = HolderCommitmentTransaction_get_counterparty_htlc_sigs(&this_ptr_conv);
+       ptrArray ret_arr = NULL;
+       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
+       for (size_t m = 0; m < ret_var.datalen; m++) {
+               int8_tArray ret_conv_12_arr = init_int8_tArray(64, __LINE__);
+               memcpy(ret_conv_12_arr->elems, ret_var.data[m].compact_form, 64);
+               ret_arr_ptr[m] = ret_conv_12_arr;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 void  __attribute__((export_name("TS_HolderCommitmentTransaction_set_counterparty_htlc_sigs"))) TS_HolderCommitmentTransaction_set_counterparty_htlc_sigs(uint32_t this_ptr, ptrArray val) {
        LDKHolderCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -40310,6 +40436,26 @@ void  __attribute__((export_name("TS_NodeAnnouncementInfo_set_alias"))) TS_NodeA
        NodeAnnouncementInfo_set_alias(&this_ptr_conv, val_conv);
 }
 
+uint32_tArray  __attribute__((export_name("TS_NodeAnnouncementInfo_get_addresses"))) TS_NodeAnnouncementInfo_get_addresses(uint32_t this_ptr) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_NetAddressZ ret_var = NodeAnnouncementInfo_get_addresses(&this_ptr_conv);
+       uint32_tArray ret_arr = NULL;
+       ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t m = 0; m < ret_var.datalen; m++) {
+               LDKNetAddress *ret_conv_12_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
+               *ret_conv_12_copy = ret_var.data[m];
+               uint32_t ret_conv_12_ref = (uintptr_t)ret_conv_12_copy;
+               ret_arr_ptr[m] = ret_conv_12_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 void  __attribute__((export_name("TS_NodeAnnouncementInfo_set_addresses"))) TS_NodeAnnouncementInfo_set_addresses(uint32_t this_ptr, uint32_tArray val) {
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -40585,6 +40731,24 @@ void  __attribute__((export_name("TS_NodeInfo_free"))) TS_NodeInfo_free(uint32_t
        NodeInfo_free(this_obj_conv);
 }
 
+int64_tArray  __attribute__((export_name("TS_NodeInfo_get_channels"))) TS_NodeInfo_get_channels(uint32_t this_ptr) {
+       LDKNodeInfo this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_u64Z ret_var = NodeInfo_get_channels(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int64_t ret_conv_8_conv = ret_var.data[i];
+               ret_arr_ptr[i] = ret_conv_8_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 void  __attribute__((export_name("TS_NodeInfo_set_channels"))) TS_NodeInfo_set_channels(uint32_t this_ptr, int64_tArray val) {
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -41025,6 +41189,24 @@ uint32_t  __attribute__((export_name("TS_ReadOnlyNetworkGraph_channel"))) TS_Rea
        return ret_ref;
 }
 
+int64_tArray  __attribute__((export_name("TS_ReadOnlyNetworkGraph_list_channels"))) TS_ReadOnlyNetworkGraph_list_channels(uint32_t this_arg) {
+       LDKReadOnlyNetworkGraph this_arg_conv;
+       this_arg_conv.inner = (void*)(this_arg & (~1));
+       this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       LDKCVec_u64Z ret_var = ReadOnlyNetworkGraph_list_channels(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int64_t ret_conv_8_conv = ret_var.data[i];
+               ret_arr_ptr[i] = ret_conv_8_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 uint32_t  __attribute__((export_name("TS_ReadOnlyNetworkGraph_node"))) TS_ReadOnlyNetworkGraph_node(uint32_t this_arg, uint32_t node_id) {
        LDKReadOnlyNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
@@ -41048,6 +41230,32 @@ uint32_t  __attribute__((export_name("TS_ReadOnlyNetworkGraph_node"))) TS_ReadOn
        return ret_ref;
 }
 
+uint32_tArray  __attribute__((export_name("TS_ReadOnlyNetworkGraph_list_nodes"))) TS_ReadOnlyNetworkGraph_list_nodes(uint32_t this_arg) {
+       LDKReadOnlyNetworkGraph this_arg_conv;
+       this_arg_conv.inner = (void*)(this_arg & (~1));
+       this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       LDKCVec_NodeIdZ ret_var = ReadOnlyNetworkGraph_list_nodes(&this_arg_conv);
+       uint32_tArray ret_arr = NULL;
+       ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               LDKNodeId ret_conv_8_var = ret_var.data[i];
+               uint32_t ret_conv_8_ref = 0;
+               CHECK((((uintptr_t)ret_conv_8_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+               CHECK((((uintptr_t)&ret_conv_8_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_8_var);
+               ret_conv_8_ref = (uintptr_t)ret_conv_8_var.inner;
+               if (ret_conv_8_var.is_owned) {
+                       ret_conv_8_ref |= 1;
+               }
+               ret_arr_ptr[i] = ret_conv_8_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 uint32_t  __attribute__((export_name("TS_ReadOnlyNetworkGraph_get_addresses"))) TS_ReadOnlyNetworkGraph_get_addresses(uint32_t this_arg, int8_tArray pubkey) {
        LDKReadOnlyNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
@@ -41326,12 +41534,12 @@ ptrArray  __attribute__((export_name("TS_Route_get_paths"))) TS_Route_get_paths(
        LDKCVec_CVec_RouteHopZZ ret_var = Route_get_paths(&this_ptr_conv);
        ptrArray ret_arr = NULL;
        ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       uint32_tArray *ret_arr_ptr = (uint32_tArray*)(((uint8_t*)ret_arr) + 4);
+       uint32_tArray *ret_arr_ptr = (uint32_tArray*)(((uint8_t*)ret_arr) + 8);
        for (size_t m = 0; m < ret_var.datalen; m++) {
                LDKCVec_RouteHopZ ret_conv_12_var = ret_var.data[m];
                uint32_tArray ret_conv_12_arr = NULL;
                ret_conv_12_arr = init_uint32_tArray(ret_conv_12_var.datalen, __LINE__);
-               uint32_t *ret_conv_12_arr_ptr = (uint32_t*)(((uint8_t*)ret_conv_12_arr) + 4);
+               uint32_t *ret_conv_12_arr_ptr = (uint32_t*)(((uint8_t*)ret_conv_12_arr) + 8);
                for (size_t k = 0; k < ret_conv_12_var.datalen; k++) {
                        LDKRouteHop ret_conv_12_conv_10_var = ret_conv_12_var.data[k];
                        uint32_t ret_conv_12_conv_10_ref = 0;
@@ -41788,7 +41996,7 @@ uint32_tArray  __attribute__((export_name("TS_PaymentParameters_get_route_hints"
        LDKCVec_RouteHintZ ret_var = PaymentParameters_get_route_hints(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t l = 0; l < ret_var.datalen; l++) {
                LDKRouteHint ret_conv_11_var = ret_var.data[l];
                uint32_t ret_conv_11_ref = 0;
@@ -41905,6 +42113,24 @@ void  __attribute__((export_name("TS_PaymentParameters_set_max_channel_saturatio
        PaymentParameters_set_max_channel_saturation_power_of_half(&this_ptr_conv, val);
 }
 
+int64_tArray  __attribute__((export_name("TS_PaymentParameters_get_previously_failed_channels"))) TS_PaymentParameters_get_previously_failed_channels(uint32_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKCVec_u64Z ret_var = PaymentParameters_get_previously_failed_channels(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int64_t ret_conv_8_conv = ret_var.data[i];
+               ret_arr_ptr[i] = ret_conv_8_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 void  __attribute__((export_name("TS_PaymentParameters_set_previously_failed_channels"))) TS_PaymentParameters_set_previously_failed_channels(uint32_t this_ptr, int64_tArray val) {
        LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
@@ -42109,7 +42335,7 @@ uint32_tArray  __attribute__((export_name("TS_RouteHint_get_a"))) TS_RouteHint_g
        LDKCVec_RouteHintHopZ ret_var = RouteHint_get_a(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t o = 0; o < ret_var.datalen; o++) {
                LDKRouteHintHop ret_conv_14_var = ret_var.data[o];
                uint32_t ret_conv_14_ref = 0;
@@ -44737,7 +44963,7 @@ uint32_tArray  __attribute__((export_name("TS_RawInvoice_private_routes"))) TS_R
        LDKCVec_PrivateRouteZ ret_var = RawInvoice_private_routes(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t o = 0; o < ret_var.datalen; o++) {
                LDKPrivateRoute ret_conv_14_var = ret_var.data[o];
                uint32_t ret_conv_14_ref = 0;
@@ -44947,7 +45173,7 @@ uint32_tArray  __attribute__((export_name("TS_Invoice_private_routes"))) TS_Invo
        LDKCVec_PrivateRouteZ ret_var = Invoice_private_routes(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t o = 0; o < ret_var.datalen; o++) {
                LDKPrivateRoute ret_conv_14_var = ret_var.data[o];
                uint32_t ret_conv_14_ref = 0;
@@ -44973,7 +45199,7 @@ uint32_tArray  __attribute__((export_name("TS_Invoice_route_hints"))) TS_Invoice
        LDKCVec_RouteHintZ ret_var = Invoice_route_hints(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_uint32_tArray(ret_var.datalen, __LINE__);
-       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 4);
+       uint32_t *ret_arr_ptr = (uint32_t*)(((uint8_t*)ret_arr) + 8);
        for (size_t l = 0; l < ret_var.datalen; l++) {
                LDKRouteHint ret_conv_11_var = ret_var.data[l];
                uint32_t ret_conv_11_ref = 0;
index 8f4cf6126b55cf9547de1f74c2454236a3e34e0c..0c831201da0d1136559448e8f123d71020caa127 100644 (file)
@@ -10,14 +10,17 @@ var js_invoke: Function;
 var getRandomValues: Function;
 
 imports.wasi_snapshot_preview1 = {
-       "fd_write": (fd: number, iovec_array_ptr: number, iovec_array_len: number) => {
+       "fd_write": (fd: number, iovec_array_ptr: number, iovec_array_len: number, bytes_written_ptr: number) => {
                // This should generally only be used to print panic messages
-               console.log("FD_WRITE to " + fd + " in " + iovec_array_len + " chunks.");
                const ptr_len_view = new Uint32Array(wasm.memory.buffer, iovec_array_ptr, iovec_array_len * 2);
+               var bytes_written = 0;
                for (var i = 0; i < iovec_array_len; i++) {
                        const bytes_view = new Uint8Array(wasm.memory.buffer, ptr_len_view[i*2], ptr_len_view[i*2+1]);
-                       console.log(String.fromCharCode(...bytes_view));
+                       console.log("[fd " + fd + "]: " + String.fromCharCode(...bytes_view));
+                       bytes_written += ptr_len_view[i*2+1];
                }
+               const written_view = new Uint32Array(wasm.memory.buffer, bytes_written_ptr, 1);
+               written_view[0] = bytes_written;
                return 0;
        },
        "fd_close": (_fd: number) => {
@@ -37,7 +40,6 @@ imports.wasi_snapshot_preview1 = {
        },
        "environ_sizes_get": (environ_var_count_ptr: number, environ_len_ptr: number) => {
                // This is called before fd_write to format + print panic messages
-               console.log("wasi_snapshot_preview1:environ_sizes_get");
                const out_count_view = new Uint32Array(wasm.memory.buffer, environ_var_count_ptr, 1);
                out_count_view[0] = 0;
                const out_len_view = new Uint32Array(wasm.memory.buffer, environ_len_ptr, 1);
@@ -45,7 +47,8 @@ imports.wasi_snapshot_preview1 = {
                return 0;
        },
        "environ_get": (environ_ptr: number, environ_buf_ptr: number) => {
-               // This is called before fd_write to format + print panic messages
+               // This is called before fd_write to format + print panic messages,
+               // but only if we have variables in environ_sizes_get, so shouldn't ever actually happen!
                console.log("wasi_snapshot_preview1:environ_get");
                return 58; // Note supported - we said there were 0 environment entries!
        },
@@ -86,19 +89,19 @@ async function finishInitializeWasm(wasmInstance: WebAssembly.Instance) {
        isWasmInitialized = true;
 }
 
+const fn_list = ["uuuuuu", "buuuuu", "bbbbbb", "ubuuuu", "uubuuu"];
+
 /* @internal */
 export async function initializeWasmFromUint8Array(wasmBinary: Uint8Array) {
-       imports.env["js_invoke_function_u"] = js_invoke;
-       imports.env["js_invoke_function_b"] = js_invoke;
+       for (const fn of fn_list) { imports.env["js_invoke_function_" + fn] = js_invoke; }
        const { instance: wasmInstance } = await WebAssembly.instantiate(wasmBinary, imports);
        await finishInitializeWasm(wasmInstance);
 }
 
 /* @internal */
 export async function initializeWasmFetch(uri: string) {
+       for (const fn of fn_list) { imports.env["js_invoke_function_" + fn] = js_invoke; }
        const stream = fetch(uri);
-       imports.env["js_invoke_function_u"] = js_invoke;
-       imports.env["js_invoke_function_b"] = js_invoke;
        const { instance: wasmInstance } = await WebAssembly.instantiateStreaming(stream, imports);
        await finishInitializeWasm(wasmInstance);
 }
@@ -126,28 +129,28 @@ export function WitnessVersionArrToBytes(inputArray: Array<WitnessVersion>): Uin
 
 /* @internal */
 export function encodeUint8Array (inputArray: Uint8Array): number {
-       const cArrayPointer = wasm.TS_malloc(inputArray.length + 4);
-       const arrayLengthView = new Uint32Array(wasm.memory.buffer, cArrayPointer, 1);
-       arrayLengthView[0] = inputArray.length;
-       const arrayMemoryView = new Uint8Array(wasm.memory.buffer, cArrayPointer + 4, inputArray.length);
+       const cArrayPointer = wasm.TS_malloc(inputArray.length + 8);
+       const arrayLengthView = new BigUint64Array(wasm.memory.buffer, cArrayPointer, 1);
+       arrayLengthView[0] = BigInt(inputArray.length);
+       const arrayMemoryView = new Uint8Array(wasm.memory.buffer, cArrayPointer + 8, inputArray.length);
        arrayMemoryView.set(inputArray);
        return cArrayPointer;
 }
 /* @internal */
 export function encodeUint32Array (inputArray: Uint32Array|Array<number>): number {
-       const cArrayPointer = wasm.TS_malloc((inputArray.length + 1) * 4);
-       const arrayMemoryView = new Uint32Array(wasm.memory.buffer, cArrayPointer, inputArray.length);
-       arrayMemoryView.set(inputArray, 1);
-       arrayMemoryView[0] = inputArray.length;
+       const cArrayPointer = wasm.TS_malloc((inputArray.length + 2) * 4);
+       const arrayLengthView = new BigUint64Array(wasm.memory.buffer, cArrayPointer, 1);
+       arrayLengthView[0] = BigInt(inputArray.length);
+       const arrayMemoryView = new Uint32Array(wasm.memory.buffer, cArrayPointer + 8, inputArray.length);
+       arrayMemoryView.set(inputArray);
        return cArrayPointer;
 }
 /* @internal */
 export function encodeUint64Array (inputArray: BigUint64Array|Array<bigint>): number {
-       const cArrayPointer = wasm.TS_malloc(inputArray.length * 8 + 1);
-       const arrayLengthView = new Uint32Array(wasm.memory.buffer, cArrayPointer, 1);
-       arrayLengthView[0] = inputArray.length;
-       const arrayMemoryView = new BigUint64Array(wasm.memory.buffer, cArrayPointer + 4, inputArray.length);
-       arrayMemoryView.set(inputArray);
+       const cArrayPointer = wasm.TS_malloc((inputArray.length + 1) * 8);
+       const arrayMemoryView = new BigUint64Array(wasm.memory.buffer, cArrayPointer, 1);
+       arrayMemoryView.set(inputArray, 1);
+       arrayMemoryView[0] = BigInt(inputArray.length);
        return cArrayPointer;
 }
 
@@ -159,13 +162,15 @@ export function check_arr_len(arr: Uint8Array, len: number): Uint8Array {
 
 /* @internal */
 export function getArrayLength(arrayPointer: number): number {
-       const arraySizeViewer = new Uint32Array(wasm.memory.buffer, arrayPointer, 1);
-       return arraySizeViewer[0];
+       const arraySizeViewer = new BigUint64Array(wasm.memory.buffer, arrayPointer, 1);
+       const len = arraySizeViewer[0];
+       if (len >= (2n ** 32n)) throw new Error("Bogus Array Size");
+       return Number(len % (2n ** 32n));
 }
 /* @internal */
 export function decodeUint8Array (arrayPointer: number, free = true): Uint8Array {
        const arraySize = getArrayLength(arrayPointer);
-       const actualArrayViewer = new Uint8Array(wasm.memory.buffer, arrayPointer + 4, arraySize);
+       const actualArrayViewer = new Uint8Array(wasm.memory.buffer, arrayPointer + 8, arraySize);
        // Clone the contents, TODO: In the future we should wrap the Viewer in a class that
        // will free the underlying memory when it becomes unreachable instead of copying here.
        // Note that doing so may have edge-case interactions with memory resizing (invalidating the buffer).
@@ -179,7 +184,7 @@ const decodeUint32Array = (arrayPointer: number, free = true) => {
        const arraySize = getArrayLength(arrayPointer);
        const actualArrayViewer = new Uint32Array(
                wasm.memory.buffer, // value
-               arrayPointer + 4, // offset (ignoring length bytes)
+               arrayPointer + 8, // offset (ignoring length bytes)
                arraySize // uint32 count
        );
        // Clone the contents, TODO: In the future we should wrap the Viewer in a class that
@@ -190,19 +195,35 @@ const decodeUint32Array = (arrayPointer: number, free = true) => {
        }
        return actualArray;
 }
-
+/* @internal */
+export function decodeUint64Array (arrayPointer: number, free = true): bigint[] {
+       const arraySize = getArrayLength(arrayPointer);
+       const actualArrayViewer = new BigUint64Array(
+               wasm.memory.buffer, // value
+               arrayPointer + 8, // offset (ignoring length bytes)
+               arraySize // uint32 count
+       );
+       // Clone the contents, TODO: In the future we should wrap the Viewer in a class that
+       // will free the underlying memory when it becomes unreachable instead of copying here.
+       const actualArray = new Array(arraySize);
+       for (var i = 0; i < arraySize; i++) actualArray[i] = actualArrayViewer[i];
+       if (free) {
+               wasm.TS_free(arrayPointer);
+       }
+       return actualArray;
+}
 
 export function freeWasmMemory(pointer: number) { wasm.TS_free(pointer); }
 
 /* @internal */
 export function getU32ArrayElem(arrayPointer: number, idx: number): number {
-       const actualArrayViewer = new Uint32Array(wasm.memory.buffer, arrayPointer + 4, idx + 1);
+       const actualArrayViewer = new Uint32Array(wasm.memory.buffer, arrayPointer + 8, idx + 1);
        return actualArrayViewer[idx];
 }
 
 /* @internal */
 export function getU8ArrayElem(arrayPointer: number, idx: number): number {
-       const actualArrayViewer = new Uint8Array(wasm.memory.buffer, arrayPointer + 4, idx + 1);
+       const actualArrayViewer = new Uint8Array(wasm.memory.buffer, arrayPointer + 8, idx + 1);
        return actualArrayViewer[idx];
 }
 
@@ -216,7 +237,7 @@ export function encodeString(str: string): number {
 /* @internal */
 export function decodeString(stringPointer: number, free = true): string {
        const arraySize = getArrayLength(stringPointer);
-       const memoryView = new Uint8Array(wasm.memory.buffer, stringPointer + 4, arraySize);
+       const memoryView = new Uint8Array(wasm.memory.buffer, stringPointer + 8, arraySize);
        const result = new TextDecoder("utf-8").decode(memoryView);
 
        if (free) {
@@ -18479,6 +18500,15 @@ export function DelayedPaymentOutputDescriptor_set_to_self_delay(this_ptr: numbe
        }
        const nativeResponseValue = wasm.TS_DelayedPaymentOutputDescriptor_set_to_self_delay(this_ptr, val);
        // debug statements here
+}
+       // struct LDKTxOut DelayedPaymentOutputDescriptor_get_output(const struct LDKDelayedPaymentOutputDescriptor *NONNULL_PTR this_ptr);
+/* @internal */
+export function DelayedPaymentOutputDescriptor_get_output(this_ptr: number): number {
+       if(!isWasmInitialized) {
+               throw new Error("initializeWasm() must be awaited first!");
+       }
+       const nativeResponseValue = wasm.TS_DelayedPaymentOutputDescriptor_get_output(this_ptr);
+       return nativeResponseValue;
 }
        // void DelayedPaymentOutputDescriptor_set_output(struct LDKDelayedPaymentOutputDescriptor *NONNULL_PTR this_ptr, struct LDKTxOut val);
 /* @internal */
@@ -18614,6 +18644,15 @@ export function StaticPaymentOutputDescriptor_set_outpoint(this_ptr: number, val
        }
        const nativeResponseValue = wasm.TS_StaticPaymentOutputDescriptor_set_outpoint(this_ptr, val);
        // debug statements here
+}
+       // struct LDKTxOut StaticPaymentOutputDescriptor_get_output(const struct LDKStaticPaymentOutputDescriptor *NONNULL_PTR this_ptr);
+/* @internal */
+export function StaticPaymentOutputDescriptor_get_output(this_ptr: number): number {
+       if(!isWasmInitialized) {
+               throw new Error("initializeWasm() must be awaited first!");
+       }
+       const nativeResponseValue = wasm.TS_StaticPaymentOutputDescriptor_get_output(this_ptr);
+       return nativeResponseValue;
 }
        // void StaticPaymentOutputDescriptor_set_output(struct LDKStaticPaymentOutputDescriptor *NONNULL_PTR this_ptr, struct LDKTxOut val);
 /* @internal */
@@ -22700,6 +22739,15 @@ export function CommitmentSigned_set_signature(this_ptr: number, val: number): v
        }
        const nativeResponseValue = wasm.TS_CommitmentSigned_set_signature(this_ptr, val);
        // debug statements here
+}
+       // struct LDKCVec_SignatureZ CommitmentSigned_get_htlc_signatures(const struct LDKCommitmentSigned *NONNULL_PTR this_ptr);
+/* @internal */
+export function CommitmentSigned_get_htlc_signatures(this_ptr: number): number {
+       if(!isWasmInitialized) {
+               throw new Error("initializeWasm() must be awaited first!");
+       }
+       const nativeResponseValue = wasm.TS_CommitmentSigned_get_htlc_signatures(this_ptr);
+       return nativeResponseValue;
 }
        // void CommitmentSigned_set_htlc_signatures(struct LDKCommitmentSigned *NONNULL_PTR this_ptr, struct LDKCVec_SignatureZ val);
 /* @internal */
@@ -23348,6 +23396,15 @@ export function UnsignedNodeAnnouncement_set_alias(this_ptr: number, val: number
        }
        const nativeResponseValue = wasm.TS_UnsignedNodeAnnouncement_set_alias(this_ptr, val);
        // debug statements here
+}
+       // struct LDKCVec_NetAddressZ UnsignedNodeAnnouncement_get_addresses(const struct LDKUnsignedNodeAnnouncement *NONNULL_PTR this_ptr);
+/* @internal */
+export function UnsignedNodeAnnouncement_get_addresses(this_ptr: number): number {
+       if(!isWasmInitialized) {
+               throw new Error("initializeWasm() must be awaited first!");
+       }
+       const nativeResponseValue = wasm.TS_UnsignedNodeAnnouncement_get_addresses(this_ptr);
+       return nativeResponseValue;
 }
        // void UnsignedNodeAnnouncement_set_addresses(struct LDKUnsignedNodeAnnouncement *NONNULL_PTR this_ptr, struct LDKCVec_NetAddressZ val);
 /* @internal */
@@ -23897,6 +23954,15 @@ export function UnsignedChannelUpdate_set_fee_proportional_millionths(this_ptr:
        }
        const nativeResponseValue = wasm.TS_UnsignedChannelUpdate_set_fee_proportional_millionths(this_ptr, val);
        // debug statements here
+}
+       // struct LDKCVec_u8Z UnsignedChannelUpdate_get_excess_data(const struct LDKUnsignedChannelUpdate *NONNULL_PTR this_ptr);
+/* @internal */
+export function UnsignedChannelUpdate_get_excess_data(this_ptr: number): number {
+       if(!isWasmInitialized) {
+               throw new Error("initializeWasm() must be awaited first!");
+       }
+       const nativeResponseValue = wasm.TS_UnsignedChannelUpdate_get_excess_data(this_ptr);
+       return nativeResponseValue;
 }
        // void UnsignedChannelUpdate_set_excess_data(struct LDKUnsignedChannelUpdate *NONNULL_PTR this_ptr, struct LDKCVec_u8Z val);
 /* @internal */
@@ -24176,6 +24242,15 @@ export function ReplyChannelRange_set_sync_complete(this_ptr: number, val: boole
        }
        const nativeResponseValue = wasm.TS_ReplyChannelRange_set_sync_complete(this_ptr, val);
        // debug statements here
+}
+       // struct LDKCVec_u64Z ReplyChannelRange_get_short_channel_ids(const struct LDKReplyChannelRange *NONNULL_PTR this_ptr);
+/* @internal */
+export function ReplyChannelRange_get_short_channel_ids(this_ptr: number): number {
+       if(!isWasmInitialized) {
+               throw new Error("initializeWasm() must be awaited first!");
+       }
+       const nativeResponseValue = wasm.TS_ReplyChannelRange_get_short_channel_ids(this_ptr);
+       return nativeResponseValue;
 }
        // void ReplyChannelRange_set_short_channel_ids(struct LDKReplyChannelRange *NONNULL_PTR this_ptr, struct LDKCVec_u64Z val);
 /* @internal */
@@ -24239,6 +24314,15 @@ export function QueryShortChannelIds_set_chain_hash(this_ptr: number, val: numbe
        }
        const nativeResponseValue = wasm.TS_QueryShortChannelIds_set_chain_hash(this_ptr, val);
        // debug statements here
+}
+       // struct LDKCVec_u64Z QueryShortChannelIds_get_short_channel_ids(const struct LDKQueryShortChannelIds *NONNULL_PTR this_ptr);
+/* @internal */
+export function QueryShortChannelIds_get_short_channel_ids(this_ptr: number): number {
+       if(!isWasmInitialized) {
+               throw new Error("initializeWasm() must be awaited first!");
+       }
+       const nativeResponseValue = wasm.TS_QueryShortChannelIds_get_short_channel_ids(this_ptr);
+       return nativeResponseValue;
 }
        // void QueryShortChannelIds_set_short_channel_ids(struct LDKQueryShortChannelIds *NONNULL_PTR this_ptr, struct LDKCVec_u64Z val);
 /* @internal */
@@ -26714,6 +26798,15 @@ export function HolderCommitmentTransaction_set_counterparty_sig(this_ptr: numbe
        }
        const nativeResponseValue = wasm.TS_HolderCommitmentTransaction_set_counterparty_sig(this_ptr, val);
        // debug statements here
+}
+       // struct LDKCVec_SignatureZ HolderCommitmentTransaction_get_counterparty_htlc_sigs(const struct LDKHolderCommitmentTransaction *NONNULL_PTR this_ptr);
+/* @internal */
+export function HolderCommitmentTransaction_get_counterparty_htlc_sigs(this_ptr: number): number {
+       if(!isWasmInitialized) {
+               throw new Error("initializeWasm() must be awaited first!");
+       }
+       const nativeResponseValue = wasm.TS_HolderCommitmentTransaction_get_counterparty_htlc_sigs(this_ptr);
+       return nativeResponseValue;
 }
        // void HolderCommitmentTransaction_set_counterparty_htlc_sigs(struct LDKHolderCommitmentTransaction *NONNULL_PTR this_ptr, struct LDKCVec_SignatureZ val);
 /* @internal */
@@ -29819,6 +29912,15 @@ export function NodeAnnouncementInfo_set_alias(this_ptr: number, val: number): v
        }
        const nativeResponseValue = wasm.TS_NodeAnnouncementInfo_set_alias(this_ptr, val);
        // debug statements here
+}
+       // struct LDKCVec_NetAddressZ NodeAnnouncementInfo_get_addresses(const struct LDKNodeAnnouncementInfo *NONNULL_PTR this_ptr);
+/* @internal */
+export function NodeAnnouncementInfo_get_addresses(this_ptr: number): number {
+       if(!isWasmInitialized) {
+               throw new Error("initializeWasm() must be awaited first!");
+       }
+       const nativeResponseValue = wasm.TS_NodeAnnouncementInfo_get_addresses(this_ptr);
+       return nativeResponseValue;
 }
        // void NodeAnnouncementInfo_set_addresses(struct LDKNodeAnnouncementInfo *NONNULL_PTR this_ptr, struct LDKCVec_NetAddressZ val);
 /* @internal */
@@ -29972,6 +30074,15 @@ export function NodeInfo_free(this_obj: number): void {
        }
        const nativeResponseValue = wasm.TS_NodeInfo_free(this_obj);
        // debug statements here
+}
+       // struct LDKCVec_u64Z NodeInfo_get_channels(const struct LDKNodeInfo *NONNULL_PTR this_ptr);
+/* @internal */
+export function NodeInfo_get_channels(this_ptr: number): number {
+       if(!isWasmInitialized) {
+               throw new Error("initializeWasm() must be awaited first!");
+       }
+       const nativeResponseValue = wasm.TS_NodeInfo_get_channels(this_ptr);
+       return nativeResponseValue;
 }
        // void NodeInfo_set_channels(struct LDKNodeInfo *NONNULL_PTR this_ptr, struct LDKCVec_u64Z val);
 /* @internal */
@@ -30215,6 +30326,15 @@ export function ReadOnlyNetworkGraph_channel(this_arg: number, short_channel_id:
        }
        const nativeResponseValue = wasm.TS_ReadOnlyNetworkGraph_channel(this_arg, short_channel_id);
        return nativeResponseValue;
+}
+       // MUST_USE_RES struct LDKCVec_u64Z ReadOnlyNetworkGraph_list_channels(const struct LDKReadOnlyNetworkGraph *NONNULL_PTR this_arg);
+/* @internal */
+export function ReadOnlyNetworkGraph_list_channels(this_arg: number): number {
+       if(!isWasmInitialized) {
+               throw new Error("initializeWasm() must be awaited first!");
+       }
+       const nativeResponseValue = wasm.TS_ReadOnlyNetworkGraph_list_channels(this_arg);
+       return nativeResponseValue;
 }
        // MUST_USE_RES struct LDKNodeInfo ReadOnlyNetworkGraph_node(const struct LDKReadOnlyNetworkGraph *NONNULL_PTR this_arg, const struct LDKNodeId *NONNULL_PTR node_id);
 /* @internal */
@@ -30224,6 +30344,15 @@ export function ReadOnlyNetworkGraph_node(this_arg: number, node_id: number): nu
        }
        const nativeResponseValue = wasm.TS_ReadOnlyNetworkGraph_node(this_arg, node_id);
        return nativeResponseValue;
+}
+       // MUST_USE_RES struct LDKCVec_NodeIdZ ReadOnlyNetworkGraph_list_nodes(const struct LDKReadOnlyNetworkGraph *NONNULL_PTR this_arg);
+/* @internal */
+export function ReadOnlyNetworkGraph_list_nodes(this_arg: number): number {
+       if(!isWasmInitialized) {
+               throw new Error("initializeWasm() must be awaited first!");
+       }
+       const nativeResponseValue = wasm.TS_ReadOnlyNetworkGraph_list_nodes(this_arg);
+       return nativeResponseValue;
 }
        // MUST_USE_RES struct LDKCOption_CVec_NetAddressZZ ReadOnlyNetworkGraph_get_addresses(const struct LDKReadOnlyNetworkGraph *NONNULL_PTR this_arg, struct LDKPublicKey pubkey);
 /* @internal */
@@ -30782,6 +30911,15 @@ export function PaymentParameters_set_max_channel_saturation_power_of_half(this_
        }
        const nativeResponseValue = wasm.TS_PaymentParameters_set_max_channel_saturation_power_of_half(this_ptr, val);
        // debug statements here
+}
+       // struct LDKCVec_u64Z PaymentParameters_get_previously_failed_channels(const struct LDKPaymentParameters *NONNULL_PTR this_ptr);
+/* @internal */
+export function PaymentParameters_get_previously_failed_channels(this_ptr: number): number {
+       if(!isWasmInitialized) {
+               throw new Error("initializeWasm() must be awaited first!");
+       }
+       const nativeResponseValue = wasm.TS_PaymentParameters_get_previously_failed_channels(this_ptr);
+       return nativeResponseValue;
 }
        // void PaymentParameters_set_previously_failed_channels(struct LDKPaymentParameters *NONNULL_PTR this_ptr, struct LDKCVec_u64Z val);
 /* @internal */
index 94466cf4562cb5ae9cd7cdeacec178991cea238c..41db531d29c206e26fc242176c74e644c51e6713 100644 (file)
@@ -10,40 +10,37 @@ extern size_t strlen(const char *s);
 // to use proper types.
 
 typedef uint32_t JSValue;
-extern uint64_t js_invoke_function_u(JSValue,JSValue,JSValue,JSValue,JSValue,JSValue,JSValue,JSValue,JSValue,JSValue,JSValue,JSValue) __attribute__((import_name("js_invoke_function_u")));
-extern uint64_t js_invoke_function_b(JSValue,JSValue,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t) __attribute__((import_name("js_invoke_function_b")));
-
-static inline JSValue js_invoke_function_u_(JSValue obj, JSValue fn){
-  return js_invoke_function_u(obj,fn,0,0,0,0,0,0,0,0,0,0);
-}
-static inline JSValue js_invoke_function_u_u(JSValue obj, JSValue fn, JSValue a){
-  return js_invoke_function_u(obj,fn,a,0,0,0,0,0,0,0,0,0);
-}
-static inline JSValue js_invoke_function_u_uu(JSValue obj, JSValue fn, JSValue a, JSValue b){
-  return js_invoke_function_u(obj,fn,a,b,0,0,0,0,0,0,0,0);
-}
-static inline JSValue js_invoke_function_u_uuu(JSValue obj, JSValue fn, JSValue a, JSValue b, JSValue c){
-  return js_invoke_function_u(obj,fn,a,b,c,0,0,0,0,0,0,0);
-}
-static inline JSValue js_invoke_function_u_uuuu(JSValue obj, JSValue fn, JSValue a, JSValue b, JSValue c, JSValue d){
-  return js_invoke_function_u(obj,fn,a,b,c,d,0,0,0,0,0,0);
-}
-static inline JSValue js_invoke_function_u_uuuuu(JSValue obj, JSValue fn, JSValue a, JSValue b, JSValue c, JSValue d, JSValue e){
-  return js_invoke_function_u(obj,fn,a,b,c,d,e,0,0,0,0,0);
-}
-
-static inline uint64_t js_invoke_function_b_(JSValue obj, JSValue fn){
-  return js_invoke_function_u(obj,fn,0,0,0,0,0,0,0,0,0,0);
-}
-
-static inline uint64_t js_invoke_function_b_uuuu(JSValue obj, JSValue fn, JSValue a, JSValue b, JSValue c, JSValue d){
-  return js_invoke_function_u(obj,fn,a,b,c,d,0,0,0,0,0,0);
-}
-static inline JSValue js_invoke_function_u_b(JSValue obj, JSValue fn, uint64_t a){
-  return js_invoke_function_b(obj,fn,a,0,0,0,0,0,0,0,0,0);
-}
-static inline JSValue js_invoke_function_u_bb(JSValue obj, JSValue fn, uint64_t a, uint64_t b){
-  return js_invoke_function_b(obj,fn,a,b,0,0,0,0,0,0,0,0);
-}
+
+#define N_TYPE_u uint32_t
+#define N_TYPE_b uint64_t
+
+#define TOK(a) a
+#define R_CAT2(a, b) a ## b
+#define CAT2(a, b) R_CAT2(a, b)
+#define R_CAT3(a, b, c) a ## b ## c
+#define CAT3(a, b, c) R_CAT3(a, b, c)
+#define R_CAT4(a, b, c, d) a ## b ## c ## d
+#define CAT4(a, b, c, d) R_CAT4(a, b, c, d)
+#define R_CAT5(a, b, c, d, e) a ## b ## c ## d ## e
+#define CAT5(a, b, c, d, e) R_CAT5(a, b, c, d, e)
+#define R_CAT6(a, b, c, d, e, f) a ## b ## c ## d ## e ## f
+#define CAT6(a, b, c, d, e, f) R_CAT6(a, b, c, d, e, f)
+
+#define _GET_CONCAT(_1, _2, _3, _4, _5, _6, CONC, ...) CONC
+#define CAT(...) _GET_CONCAT(__VA_ARGS__, CAT6, CAT5, CAT4, CAT3, CAT2, TOK)(__VA_ARGS__)
+
+#define DO_STRING(a) #a
+#define STRINGIZE(a) DO_STRING(a)
+
+#define DECL_IMPORT(A1, A2, A3, A4, A5, A6) \
+       extern uint64_t CAT(js_invoke_function_, CAT(A1, A2, A3, A4, A5, A6)) \
+       (JSValue obj, JSValue fn, N_TYPE_##A1, N_TYPE_##A2, N_TYPE_##A3, N_TYPE_##A4, N_TYPE_##A5, N_TYPE_##A6) \
+       __attribute__((import_name(STRINGIZE(CAT(js_invoke_function_, CAT(A1, A2, A3, A4, A5, A6))))));
+
+DECL_IMPORT(u, u, u, u, u, u)
+DECL_IMPORT(b, u, u, u, u, u)
+DECL_IMPORT(b, b, b, b, b, b)
+DECL_IMPORT(u, b, u, u, u, u)
+DECL_IMPORT(u, u, b, u, u, u)
 
 #endif
index d0928ea4dde17392ff7dd90b972109bd5ed12964..00707165f1b39bf86499dce34a2698ec540d7c91 100644 (file)
@@ -397,6 +397,24 @@ export class CommitmentSigned extends CommonBase {
                bindings.CommitmentSigned_set_signature(this.ptr, bindings.encodeUint8Array(bindings.check_arr_len(val, 64)));
        }
 
+       /**
+        * Signatures on the HTLC transactions
+        * 
+        * Returns a copy of the field.
+        */
+       public get_htlc_signatures(): Uint8Array[] {
+               const ret: number = bindings.CommitmentSigned_get_htlc_signatures(this.ptr);
+               const ret_conv_12_len: number = bindings.getArrayLength(ret);
+               const ret_conv_12_arr: Uint8Array[] = new Array(ret_conv_12_len).fill(null);
+               for (var m = 0; m < ret_conv_12_len; m++) {
+                       const ret_conv_12: number = bindings.getU32ArrayElem(ret, m);
+                       const ret_conv_12_conv: Uint8Array = bindings.decodeUint8Array(ret_conv_12);
+                       ret_conv_12_arr[m] = ret_conv_12_conv;
+               }
+               bindings.freeWasmMemory(ret)
+               return ret_conv_12_arr;
+       }
+
        /**
         * Signatures on the HTLC transactions
         */
index a7586b038f849eb3c6a2030b9fe0f4e12c1d009d..75630f913c2b09a5449767fbae2ccd8c745af4e2 100644 (file)
@@ -367,7 +367,7 @@ export class CommonBase {
        protected constructor(ptr: number, free_fn: (ptr: number) => void) {
                this.ptr = ptr;
                if (Number.isFinite(ptr) && ptr != 0){
-                       finalizer.register(this, get_freeer(ptr, free_fn));
+                       finalizer.register(this, get_freeer(ptr, free_fn), this);
                }
        }
        // In Java, protected means "any subclass can access fields on any other subclass'"
@@ -381,7 +381,10 @@ export class CommonBase {
        }
        protected static set_null_skip_free(o: CommonBase) {
                o.ptr = 0;
-               finalizer.unregister(o);
+               // @ts-ignore TypeScript is wrong about the returnvalue of unregister here!
+               const did_unregister: boolean = finalizer.unregister(o);
+               if (!did_unregister)
+                       throw new Error("FinalizationRegistry unregister should always unregister unless you double-free'd");
        }
 }
 
index 90c475f5fdba0cd0403720a2ecaaaa5eff4dde2f..f5f1768cf4583867bc8ddfa760ae3d39385d2f1e 100644 (file)
@@ -416,6 +416,17 @@ export class DelayedPaymentOutputDescriptor extends CommonBase {
                bindings.DelayedPaymentOutputDescriptor_set_to_self_delay(this.ptr, val);
        }
 
+       /**
+        * The output which is referenced by the given outpoint
+        * 
+        * Returns a copy of the field.
+        */
+       public get_output(): TxOut {
+               const ret: number = bindings.DelayedPaymentOutputDescriptor_get_output(this.ptr);
+               const ret_conv: TxOut = new TxOut(null, ret);
+               return ret_conv;
+       }
+
        /**
         * The output which is referenced by the given outpoint
         */
index 4a86d570d0d8c573bf8e3468dfbcb7e06f1c42db..c34ffcd72464c01fa0a90367ae989c975d10663f 100644 (file)
@@ -383,6 +383,24 @@ export class HolderCommitmentTransaction extends CommonBase {
                bindings.HolderCommitmentTransaction_set_counterparty_sig(this.ptr, bindings.encodeUint8Array(bindings.check_arr_len(val, 64)));
        }
 
+       /**
+        * All non-dust counterparty HTLC signatures, in the order they appear in the transaction
+        * 
+        * Returns a copy of the field.
+        */
+       public get_counterparty_htlc_sigs(): Uint8Array[] {
+               const ret: number = bindings.HolderCommitmentTransaction_get_counterparty_htlc_sigs(this.ptr);
+               const ret_conv_12_len: number = bindings.getArrayLength(ret);
+               const ret_conv_12_arr: Uint8Array[] = new Array(ret_conv_12_len).fill(null);
+               for (var m = 0; m < ret_conv_12_len; m++) {
+                       const ret_conv_12: number = bindings.getU32ArrayElem(ret, m);
+                       const ret_conv_12_conv: Uint8Array = bindings.decodeUint8Array(ret_conv_12);
+                       ret_conv_12_arr[m] = ret_conv_12_conv;
+               }
+               bindings.freeWasmMemory(ret)
+               return ret_conv_12_arr;
+       }
+
        /**
         * All non-dust counterparty HTLC signatures, in the order they appear in the transaction
         */
index 3f179903fed5be8aab15cbd0de41d1e0b88f81dd..ff4d5bdd14baf0cfd77c05385785372ff0f8adc3 100644 (file)
@@ -355,8 +355,9 @@ import { DefaultRouter } from '../structs/DefaultRouter.mjs';
 import { CommonBase, UInt5, WitnessVersion, UnqualifiedError } from './CommonBase.mjs';
 import * as bindings from '../bindings.mjs'
 
-/** XXX: DO NOT USE THIS - it remains locked until the GC runs (if that ever happens */
+
 /**
+ * This type represents a lock and MUST BE MANUALLY FREE'd!
  * A read-only reference to a current ChannelMonitor.
  * 
  * Note that this holds a mutex in [`ChainMonitor`] and may block other events until it is
@@ -365,7 +366,12 @@ import * as bindings from '../bindings.mjs'
 export class LockedChannelMonitor extends CommonBase {
        /* @internal */
        public constructor(_dummy: object, ptr: number) {
-               super(ptr, bindings.LockedChannelMonitor_free);
+               super(ptr, () => { throw new Error("Locks must be manually freed with free()"); });
+       }
+       /** Releases this lock */
+       public free() {
+               bindings.LockedChannelMonitor_free(this.ptr);
+               CommonBase.set_null_skip_free(this);
        }
 
 }
index 65e911d7ce8587851518cb9774c4b9e1c9dc76e1..216a2db9ece952715817852d7440ff4e6c61d125 100644 (file)
@@ -436,6 +436,25 @@ export class NodeAnnouncementInfo extends CommonBase {
                bindings.NodeAnnouncementInfo_set_alias(this.ptr, val == null ? 0 : CommonBase.get_ptr_of(val) & ~1);
        }
 
+       /**
+        * Internet-level addresses via which one can connect to the node
+        * 
+        * Returns a copy of the field.
+        */
+       public get_addresses(): NetAddress[] {
+               const ret: number = bindings.NodeAnnouncementInfo_get_addresses(this.ptr);
+               const ret_conv_12_len: number = bindings.getArrayLength(ret);
+               const ret_conv_12_arr: NetAddress[] = new Array(ret_conv_12_len).fill(null);
+               for (var m = 0; m < ret_conv_12_len; m++) {
+                       const ret_conv_12: number = bindings.getU32ArrayElem(ret, m);
+                       const ret_conv_12_hu_conv: NetAddress = NetAddress.constr_from_ptr(ret_conv_12);
+                       CommonBase.add_ref_from(ret_conv_12_hu_conv, this);
+                       ret_conv_12_arr[m] = ret_conv_12_hu_conv;
+               }
+               bindings.freeWasmMemory(ret)
+               return ret_conv_12_arr;
+       }
+
        /**
         * Internet-level addresses via which one can connect to the node
         */
index bd0600fff29e9524ae4e21631ee2fae920a0adbf..0fa45212acd000e582f236ce1d004c11d70c3905 100644 (file)
@@ -365,6 +365,17 @@ export class NodeInfo extends CommonBase {
                super(ptr, bindings.NodeInfo_free);
        }
 
+       /**
+        * All valid channels a node has announced
+        * 
+        * Returns a copy of the field.
+        */
+       public get_channels(): bigint[] {
+               const ret: number = bindings.NodeInfo_get_channels(this.ptr);
+               const ret_conv: bigint[] = bindings.decodeUint64Array(ret);
+               return ret_conv;
+       }
+
        /**
         * All valid channels a node has announced
         */
index 510946030724d0d1b9836f013ea9271c0223dff3..a71ce7ded4c0439df40332828ba5303fea830bf4 100644 (file)
@@ -526,6 +526,19 @@ export class PaymentParameters extends CommonBase {
                bindings.PaymentParameters_set_max_channel_saturation_power_of_half(this.ptr, val);
        }
 
+       /**
+        * A list of SCIDs which this payment was previously attempted over and which caused the
+        * payment to fail. Future attempts for the same payment shouldn't be relayed through any of
+        * these SCIDs.
+        * 
+        * Returns a copy of the field.
+        */
+       public get_previously_failed_channels(): bigint[] {
+               const ret: number = bindings.PaymentParameters_get_previously_failed_channels(this.ptr);
+               const ret_conv: bigint[] = bindings.decodeUint64Array(ret);
+               return ret_conv;
+       }
+
        /**
         * A list of SCIDs which this payment was previously attempted over and which caused the
         * payment to fail. Future attempts for the same payment shouldn't be relayed through any of
index b45901305f168eb26e614338f4a16f86bd08613f..f84b4b253c973c23a9ed30a925b60a1ae5f7a42c 100644 (file)
@@ -388,6 +388,17 @@ export class QueryShortChannelIds extends CommonBase {
                bindings.QueryShortChannelIds_set_chain_hash(this.ptr, bindings.encodeUint8Array(bindings.check_arr_len(val, 32)));
        }
 
+       /**
+        * The short_channel_ids that are being queried
+        * 
+        * Returns a copy of the field.
+        */
+       public get_short_channel_ids(): bigint[] {
+               const ret: number = bindings.QueryShortChannelIds_get_short_channel_ids(this.ptr);
+               const ret_conv: bigint[] = bindings.decodeUint64Array(ret);
+               return ret_conv;
+       }
+
        /**
         * The short_channel_ids that are being queried
         */
index 6f30af555e8118cfc02b96839e47218c67c9448c..87ddf1ff333d5b9768723ebbdbae0c45d1bd2419 100644 (file)
@@ -355,14 +355,20 @@ import { DefaultRouter } from '../structs/DefaultRouter.mjs';
 import { CommonBase, UInt5, WitnessVersion, UnqualifiedError } from './CommonBase.mjs';
 import * as bindings from '../bindings.mjs'
 
-/** XXX: DO NOT USE THIS - it remains locked until the GC runs (if that ever happens */
+
 /**
+ * This type represents a lock and MUST BE MANUALLY FREE'd!
  * A read-only view of [`NetworkGraph`].
  */
 export class ReadOnlyNetworkGraph extends CommonBase {
        /* @internal */
        public constructor(_dummy: object, ptr: number) {
-               super(ptr, bindings.ReadOnlyNetworkGraph_free);
+               super(ptr, () => { throw new Error("Locks must be manually freed with free()"); });
+       }
+       /** Releases this lock */
+       public free() {
+               bindings.ReadOnlyNetworkGraph_free(this.ptr);
+               CommonBase.set_null_skip_free(this);
        }
 
        /**
@@ -377,6 +383,15 @@ export class ReadOnlyNetworkGraph extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Returns the list of channels in the graph
+        */
+       public list_channels(): bigint[] {
+               const ret: number = bindings.ReadOnlyNetworkGraph_list_channels(this.ptr);
+               const ret_conv: bigint[] = bindings.decodeUint64Array(ret);
+               return ret_conv;
+       }
+
        /**
         * Returns information on a node with the given id.
         * 
@@ -390,6 +405,23 @@ export class ReadOnlyNetworkGraph extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Returns the list of nodes in the graph
+        */
+       public list_nodes(): NodeId[] {
+               const ret: number = bindings.ReadOnlyNetworkGraph_list_nodes(this.ptr);
+               const ret_conv_8_len: number = bindings.getArrayLength(ret);
+               const ret_conv_8_arr: NodeId[] = new Array(ret_conv_8_len).fill(null);
+               for (var i = 0; i < ret_conv_8_len; i++) {
+                       const ret_conv_8: number = bindings.getU32ArrayElem(ret, i);
+                       const ret_conv_8_hu_conv: NodeId = new NodeId(null, ret_conv_8);
+                       CommonBase.add_ref_from(ret_conv_8_hu_conv, this);
+                       ret_conv_8_arr[i] = ret_conv_8_hu_conv;
+               }
+               bindings.freeWasmMemory(ret)
+               return ret_conv_8_arr;
+       }
+
        /**
         * Get network addresses by node id.
         * Returns None if the requested node is completely unknown,
index 158f56ee7b4f5b47f3fc97007cf0c151de0a8ca4..54ca9911125d454c5449899b54af3b6f9b554dc4 100644 (file)
@@ -432,6 +432,17 @@ export class ReplyChannelRange extends CommonBase {
                bindings.ReplyChannelRange_set_sync_complete(this.ptr, val);
        }
 
+       /**
+        * The short_channel_ids in the channel range
+        * 
+        * Returns a copy of the field.
+        */
+       public get_short_channel_ids(): bigint[] {
+               const ret: number = bindings.ReplyChannelRange_get_short_channel_ids(this.ptr);
+               const ret_conv: bigint[] = bindings.decodeUint64Array(ret);
+               return ret_conv;
+       }
+
        /**
         * The short_channel_ids in the channel range
         */
index e45f97f3ff5821b8f31cbad537b3f6cf666140ee..a546cbb0266385710ede6fac59098b62bba376f2 100644 (file)
@@ -383,6 +383,17 @@ export class StaticPaymentOutputDescriptor extends CommonBase {
                bindings.StaticPaymentOutputDescriptor_set_outpoint(this.ptr, val == null ? 0 : CommonBase.get_ptr_of(val) & ~1);
        }
 
+       /**
+        * The output which is referenced by the given outpoint
+        * 
+        * Returns a copy of the field.
+        */
+       public get_output(): TxOut {
+               const ret: number = bindings.StaticPaymentOutputDescriptor_get_output(this.ptr);
+               const ret_conv: TxOut = new TxOut(null, ret);
+               return ret_conv;
+       }
+
        /**
         * The output which is referenced by the given outpoint
         */
index 723504c4bee68a205b4a4a10c0b1f15d61aaef79..55c7b272022ac532643474a9e252569318b9b550 100644 (file)
@@ -367,7 +367,7 @@ export class TxOut extends CommonBase {
                this.script_pubkey = bindings.decodeUint8Array(bindings.TxOut_get_script_pubkey(ptr));
                this.value = bindings.TxOut_get_value(ptr);
        }
-       public constructor_new(value: bigint, script_pubkey: Uint8Array): TxOut {
+       public static constructor_new(value: bigint, script_pubkey: Uint8Array): TxOut {
                return new TxOut(null, bindings.TxOut_new(bindings.encodeUint8Array(script_pubkey), value));
        }
 }
\ No newline at end of file
index 116e1bf6c803ffb3b8dce2aae985f09e7cad9f66..180a95a298c25f2470bb976991ada3755613c919 100644 (file)
@@ -515,6 +515,19 @@ export class UnsignedChannelUpdate extends CommonBase {
                bindings.UnsignedChannelUpdate_set_fee_proportional_millionths(this.ptr, val);
        }
 
+       /**
+        * Excess data which was signed as a part of the message which we do not (yet) understand how
+        * to decode. This is stored to ensure forward-compatibility as new fields are added to the
+        * lightning gossip
+        * 
+        * Returns a copy of the field.
+        */
+       public get_excess_data(): Uint8Array {
+               const ret: number = bindings.UnsignedChannelUpdate_get_excess_data(this.ptr);
+               const ret_conv: Uint8Array = bindings.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
        /**
         * Excess data which was signed as a part of the message which we do not (yet) understand how
         * to decode. This is stored to ensure forward-compatibility as new fields are added to the
index aac942c10805390b0cde86d3593804d300946b96..ad5e47307ae837e1e6a62eb9908feff6ab834a63 100644 (file)
@@ -449,6 +449,25 @@ export class UnsignedNodeAnnouncement extends CommonBase {
                bindings.UnsignedNodeAnnouncement_set_alias(this.ptr, bindings.encodeUint8Array(bindings.check_arr_len(val, 32)));
        }
 
+       /**
+        * List of addresses on which this node is reachable
+        * 
+        * Returns a copy of the field.
+        */
+       public get_addresses(): NetAddress[] {
+               const ret: number = bindings.UnsignedNodeAnnouncement_get_addresses(this.ptr);
+               const ret_conv_12_len: number = bindings.getArrayLength(ret);
+               const ret_conv_12_arr: NetAddress[] = new Array(ret_conv_12_len).fill(null);
+               for (var m = 0; m < ret_conv_12_len; m++) {
+                       const ret_conv_12: number = bindings.getU32ArrayElem(ret, m);
+                       const ret_conv_12_hu_conv: NetAddress = NetAddress.constr_from_ptr(ret_conv_12);
+                       CommonBase.add_ref_from(ret_conv_12_hu_conv, this);
+                       ret_conv_12_arr[m] = ret_conv_12_hu_conv;
+               }
+               bindings.freeWasmMemory(ret)
+               return ret_conv_12_arr;
+       }
+
        /**
         * List of addresses on which this node is reachable
         */
index 7df10c7dd588790854cb30d424ec2ac5fbf0768c..a8edeaccc4f0592494bf3ef258634c67da2a4c22 100644 (file)
@@ -275,6 +275,24 @@ tests.push(async () => {
        return true;
 });
 
+tests.push(async () => {
+       // Test that we can do basic locking of a NetworkGraph
+       const genesis_hash = new Uint8Array([0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xd6, 0x68, 0x9c, 0x08, 0x5a, 0xe1, 0x65, 0x83, 0x1e, 0x93, 0x4f, 0xf7, 0x63, 0xae, 0x46, 0xa2, 0xa6, 0xc1, 0x72, 0xb3, 0xf1, 0xb6, 0x0a, 0x8c, 0xe2, 0x6f]);
+       const logger = ldk.Logger.new_impl({
+               log(record: ldk.Record): void {
+                       if (record.get_level() != ldk.Level.LDKLevel_Gossip)
+                               console.log(record.get_module_path() + ": " + record.get_args());
+               }
+       } as ldk.LoggerInterface);
+       const network_graph = ldk.NetworkGraph.constructor_new(genesis_hash, logger);
+       const graph_lock_1 = network_graph.read_only();
+       graph_lock_1.free();
+       const graph_lock_2 = network_graph.read_only();
+       graph_lock_2.free();
+
+       return true;
+});
+
 async function run_tests(check_leaks: boolean) {
        var test_runs = [];
        for (const test of tests) {
index 0d3036429dda8d81db04f3c7c5b8535c0cabb614..765a93cda50c1247350c1ce6fc959629c8cc088e 100644 (file)
@@ -46,14 +46,17 @@ var js_invoke: Function;
 var getRandomValues: Function;
 
 imports.wasi_snapshot_preview1 = {
-       "fd_write": (fd: number, iovec_array_ptr: number, iovec_array_len: number) => {
+       "fd_write": (fd: number, iovec_array_ptr: number, iovec_array_len: number, bytes_written_ptr: number) => {
                // This should generally only be used to print panic messages
-               console.log("FD_WRITE to " + fd + " in " + iovec_array_len + " chunks.");
                const ptr_len_view = new Uint32Array(wasm.memory.buffer, iovec_array_ptr, iovec_array_len * 2);
+               var bytes_written = 0;
                for (var i = 0; i < iovec_array_len; i++) {
                        const bytes_view = new Uint8Array(wasm.memory.buffer, ptr_len_view[i*2], ptr_len_view[i*2+1]);
-                       console.log(String.fromCharCode(...bytes_view));
+                       console.log("[fd " + fd + "]: " + String.fromCharCode(...bytes_view));
+                       bytes_written += ptr_len_view[i*2+1];
                }
+               const written_view = new Uint32Array(wasm.memory.buffer, bytes_written_ptr, 1);
+               written_view[0] = bytes_written;
                return 0;
        },
        "fd_close": (_fd: number) => {
@@ -73,7 +76,6 @@ imports.wasi_snapshot_preview1 = {
        },
        "environ_sizes_get": (environ_var_count_ptr: number, environ_len_ptr: number) => {
                // This is called before fd_write to format + print panic messages
-               console.log("wasi_snapshot_preview1:environ_sizes_get");
                const out_count_view = new Uint32Array(wasm.memory.buffer, environ_var_count_ptr, 1);
                out_count_view[0] = 0;
                const out_len_view = new Uint32Array(wasm.memory.buffer, environ_len_ptr, 1);
@@ -81,7 +83,8 @@ imports.wasi_snapshot_preview1 = {
                return 0;
        },
        "environ_get": (environ_ptr: number, environ_buf_ptr: number) => {
-               // This is called before fd_write to format + print panic messages
+               // This is called before fd_write to format + print panic messages,
+               // but only if we have variables in environ_sizes_get, so shouldn't ever actually happen!
                console.log("wasi_snapshot_preview1:environ_get");
                return 58; // Note supported - we said there were 0 environment entries!
        },
@@ -122,19 +125,19 @@ async function finishInitializeWasm(wasmInstance: WebAssembly.Instance) {
        isWasmInitialized = true;
 }
 
+const fn_list = ["uuuuuu", "buuuuu", "bbbbbb", "ubuuuu", "uubuuu"];
+
 /* @internal */
 export async function initializeWasmFromUint8Array(wasmBinary: Uint8Array) {
-       imports.env["js_invoke_function_u"] = js_invoke;
-       imports.env["js_invoke_function_b"] = js_invoke;
+       for (const fn of fn_list) { imports.env["js_invoke_function_" + fn] = js_invoke; }
        const { instance: wasmInstance } = await WebAssembly.instantiate(wasmBinary, imports);
        await finishInitializeWasm(wasmInstance);
 }
 
 /* @internal */
 export async function initializeWasmFetch(uri: string) {
+       for (const fn of fn_list) { imports.env["js_invoke_function_" + fn] = js_invoke; }
        const stream = fetch(uri);
-       imports.env["js_invoke_function_u"] = js_invoke;
-       imports.env["js_invoke_function_b"] = js_invoke;
        const { instance: wasmInstance } = await WebAssembly.instantiateStreaming(stream, imports);
        await finishInitializeWasm(wasmInstance);
 }"""
@@ -164,28 +167,28 @@ export function WitnessVersionArrToBytes(inputArray: Array<WitnessVersion>): Uin
 
 /* @internal */
 export function encodeUint8Array (inputArray: Uint8Array): number {
-       const cArrayPointer = wasm.TS_malloc(inputArray.length + 4);
-       const arrayLengthView = new Uint32Array(wasm.memory.buffer, cArrayPointer, 1);
-       arrayLengthView[0] = inputArray.length;
-       const arrayMemoryView = new Uint8Array(wasm.memory.buffer, cArrayPointer + 4, inputArray.length);
+       const cArrayPointer = wasm.TS_malloc(inputArray.length + 8);
+       const arrayLengthView = new BigUint64Array(wasm.memory.buffer, cArrayPointer, 1);
+       arrayLengthView[0] = BigInt(inputArray.length);
+       const arrayMemoryView = new Uint8Array(wasm.memory.buffer, cArrayPointer + 8, inputArray.length);
        arrayMemoryView.set(inputArray);
        return cArrayPointer;
 }
 /* @internal */
 export function encodeUint32Array (inputArray: Uint32Array|Array<number>): number {
-       const cArrayPointer = wasm.TS_malloc((inputArray.length + 1) * 4);
-       const arrayMemoryView = new Uint32Array(wasm.memory.buffer, cArrayPointer, inputArray.length);
-       arrayMemoryView.set(inputArray, 1);
-       arrayMemoryView[0] = inputArray.length;
+       const cArrayPointer = wasm.TS_malloc((inputArray.length + 2) * 4);
+       const arrayLengthView = new BigUint64Array(wasm.memory.buffer, cArrayPointer, 1);
+       arrayLengthView[0] = BigInt(inputArray.length);
+       const arrayMemoryView = new Uint32Array(wasm.memory.buffer, cArrayPointer + 8, inputArray.length);
+       arrayMemoryView.set(inputArray);
        return cArrayPointer;
 }
 /* @internal */
 export function encodeUint64Array (inputArray: BigUint64Array|Array<bigint>): number {
-       const cArrayPointer = wasm.TS_malloc(inputArray.length * 8 + 1);
-       const arrayLengthView = new Uint32Array(wasm.memory.buffer, cArrayPointer, 1);
-       arrayLengthView[0] = inputArray.length;
-       const arrayMemoryView = new BigUint64Array(wasm.memory.buffer, cArrayPointer + 4, inputArray.length);
-       arrayMemoryView.set(inputArray);
+       const cArrayPointer = wasm.TS_malloc((inputArray.length + 1) * 8);
+       const arrayMemoryView = new BigUint64Array(wasm.memory.buffer, cArrayPointer, 1);
+       arrayMemoryView.set(inputArray, 1);
+       arrayMemoryView[0] = BigInt(inputArray.length);
        return cArrayPointer;
 }
 
@@ -197,13 +200,15 @@ export function check_arr_len(arr: Uint8Array, len: number): Uint8Array {
 
 /* @internal */
 export function getArrayLength(arrayPointer: number): number {
-       const arraySizeViewer = new Uint32Array(wasm.memory.buffer, arrayPointer, 1);
-       return arraySizeViewer[0];
+       const arraySizeViewer = new BigUint64Array(wasm.memory.buffer, arrayPointer, 1);
+       const len = arraySizeViewer[0];
+       if (len >= (2n ** 32n)) throw new Error("Bogus Array Size");
+       return Number(len % (2n ** 32n));
 }
 /* @internal */
 export function decodeUint8Array (arrayPointer: number, free = true): Uint8Array {
        const arraySize = getArrayLength(arrayPointer);
-       const actualArrayViewer = new Uint8Array(wasm.memory.buffer, arrayPointer + 4, arraySize);
+       const actualArrayViewer = new Uint8Array(wasm.memory.buffer, arrayPointer + 8, arraySize);
        // Clone the contents, TODO: In the future we should wrap the Viewer in a class that
        // will free the underlying memory when it becomes unreachable instead of copying here.
        // Note that doing so may have edge-case interactions with memory resizing (invalidating the buffer).
@@ -217,7 +222,7 @@ const decodeUint32Array = (arrayPointer: number, free = true) => {
        const arraySize = getArrayLength(arrayPointer);
        const actualArrayViewer = new Uint32Array(
                wasm.memory.buffer, // value
-               arrayPointer + 4, // offset (ignoring length bytes)
+               arrayPointer + 8, // offset (ignoring length bytes)
                arraySize // uint32 count
        );
        // Clone the contents, TODO: In the future we should wrap the Viewer in a class that
@@ -228,19 +233,35 @@ const decodeUint32Array = (arrayPointer: number, free = true) => {
        }
        return actualArray;
 }
-
+/* @internal */
+export function decodeUint64Array (arrayPointer: number, free = true): bigint[] {
+       const arraySize = getArrayLength(arrayPointer);
+       const actualArrayViewer = new BigUint64Array(
+               wasm.memory.buffer, // value
+               arrayPointer + 8, // offset (ignoring length bytes)
+               arraySize // uint32 count
+       );
+       // Clone the contents, TODO: In the future we should wrap the Viewer in a class that
+       // will free the underlying memory when it becomes unreachable instead of copying here.
+       const actualArray = new Array(arraySize);
+       for (var i = 0; i < arraySize; i++) actualArray[i] = actualArrayViewer[i];
+       if (free) {
+               wasm.TS_free(arrayPointer);
+       }
+       return actualArray;
+}
 
 export function freeWasmMemory(pointer: number) { wasm.TS_free(pointer); }
 
 /* @internal */
 export function getU32ArrayElem(arrayPointer: number, idx: number): number {
-       const actualArrayViewer = new Uint32Array(wasm.memory.buffer, arrayPointer + 4, idx + 1);
+       const actualArrayViewer = new Uint32Array(wasm.memory.buffer, arrayPointer + 8, idx + 1);
        return actualArrayViewer[idx];
 }
 
 /* @internal */
 export function getU8ArrayElem(arrayPointer: number, idx: number): number {
-       const actualArrayViewer = new Uint8Array(wasm.memory.buffer, arrayPointer + 4, idx + 1);
+       const actualArrayViewer = new Uint8Array(wasm.memory.buffer, arrayPointer + 8, idx + 1);
        return actualArrayViewer[idx];
 }
 
@@ -254,7 +275,7 @@ export function encodeString(str: string): number {
 /* @internal */
 export function decodeString(stringPointer: number, free = true): string {
        const arraySize = getArrayLength(stringPointer);
-       const memoryView = new Uint8Array(wasm.memory.buffer, stringPointer + 4, arraySize);
+       const memoryView = new Uint8Array(wasm.memory.buffer, stringPointer + 8, arraySize);
        const result = new TextDecoder("utf-8").decode(memoryView);
 
        if (free) {
@@ -313,7 +334,7 @@ export class CommonBase {
        protected constructor(ptr: number, free_fn: (ptr: number) => void) {
                this.ptr = ptr;
                if (Number.isFinite(ptr) && ptr != 0){
-                       finalizer.register(this, get_freeer(ptr, free_fn));
+                       finalizer.register(this, get_freeer(ptr, free_fn), this);
                }
        }
        // In Java, protected means "any subclass can access fields on any other subclass'"
@@ -327,7 +348,10 @@ export class CommonBase {
        }
        protected static set_null_skip_free(o: CommonBase) {
                o.ptr = 0;
-               finalizer.unregister(o);
+               // @ts-ignore TypeScript is wrong about the returnvalue of unregister here!
+               const did_unregister: boolean = finalizer.unregister(o);
+               if (!did_unregister)
+                       throw new Error("FinalizationRegistry unregister should always unregister unless you double-free'd");
        }
 }
 
@@ -366,7 +390,7 @@ export class UnqualifiedError {
                this.script_pubkey = bindings.decodeUint8Array(bindings.TxOut_get_script_pubkey(ptr));
                this.value = bindings.TxOut_get_value(ptr);
        }
-       public constructor_new(value: bigint, script_pubkey: Uint8Array): TxOut {
+       public static constructor_new(value: bigint, script_pubkey: Uint8Array): TxOut {
                return new TxOut(null, bindings.TxOut_new(bindings.encodeUint8Array(script_pubkey), value));
        }
 }"""
@@ -557,12 +581,12 @@ _Static_assert(sizeof(void*) == 4, "Pointers mut be 32 bits");
 
 #define DECL_ARR_TYPE(ty, name) \\
        struct name##array { \\
-               uint32_t arr_len; \\
+               uint64_t arr_len; /* uint32_t would suffice but we want to align uint64_ts as well */ \\
                ty elems[]; \\
        }; \\
        typedef struct name##array * name##Array; \\
        static inline name##Array init_##name##Array(size_t arr_len, int lineno) { \\
-               name##Array arr = (name##Array)do_MALLOC(arr_len * sizeof(ty) + sizeof(uint32_t), #name" array init", lineno); \\
+               name##Array arr = (name##Array)do_MALLOC(arr_len * sizeof(ty) + sizeof(uint64_t), #name" array init", lineno); \\
                arr->arr_len = arr_len; \\
                return arr; \\
        }
@@ -657,8 +681,8 @@ import * as bindings from '../bindings.mjs'
         assert False # Only called if above is None
     def get_native_arr_ptr_call(self, ty_info):
         if ty_info.subty is not None:
-            return "(" + ty_info.subty.c_ty + "*)(((uint8_t*)", ") + 4)"
-        return "(" + ty_info.c_ty + "*)(((uint8_t*)", ") + 4)"
+            return "(" + ty_info.subty.c_ty + "*)(((uint8_t*)", ") + 8)"
+        return "(" + ty_info.c_ty + "*)(((uint8_t*)", ") + 8)"
     def get_native_arr_entry_call(self, ty_info, arr_name, idxc, entry_access):
         return None
     def cleanup_native_arr_ref_contents(self, arr_name, dest_name, arr_len, ty_info):
@@ -720,8 +744,12 @@ import * as bindings from '../bindings.mjs'
             assert False
 
     def primitive_arr_to_hu(self, mapped_ty, fixed_len, arr_name, conv_name):
-        assert mapped_ty.c_ty == "uint8_t" or mapped_ty.c_ty == "int8_t"
-        return "const " + conv_name + ": Uint8Array = bindings.decodeUint8Array(" + arr_name + ");"
+        if mapped_ty.c_ty == "uint8_t" or mapped_ty.c_ty == "int8_t":
+            return "const " + conv_name + ": Uint8Array = bindings.decodeUint8Array(" + arr_name + ");"
+        elif mapped_ty.c_ty == "uint64_t" or mapped_ty.c_ty == "int64_t":
+            return "const " + conv_name + ": bigint[] = bindings.decodeUint64Array(" + arr_name + ");"
+        else:
+            assert False
 
     def var_decl_statement(self, ty_string, var_name, statement):
         return "const " + var_name + ": " + ty_string + " = " + statement
@@ -1008,15 +1036,14 @@ export class {struct_name.replace("LDK","")} extends CommonBase {{
                         out_c = out_c + arg_info.ret_conv[1].replace('\n', '\n\t') + "\n"
 
                 fn_suffix = ""
-                if fn_line.ret_ty_info.c_ty == "uint64_t" or fn_line.ret_ty_info.c_ty == "int64_t":
-                    fn_suffix += "b_"
-                else:
-                    fn_suffix += "u_"
-                for arg in fn_line.args_ty:
+                assert len(fn_line.args_ty) < 6
+                for arg_info in fn_line.args_ty:
                     if arg_info.c_ty == "uint64_t" or arg_info.c_ty == "int64_t":
                         fn_suffix += "b"
                     else:
                         fn_suffix += "u"
+                for i in range(0, 6 - len(fn_line.args_ty)):
+                    fn_suffix += "u"
                 if fn_line.ret_ty_info.c_ty.endswith("Array"):
                     out_c += "\t" + fn_line.ret_ty_info.c_ty + " ret = (" + fn_line.ret_ty_info.c_ty + ")"
                     out_c += "js_invoke_function_" + fn_suffix + "(j_calls->instance_ptr, " + str(self.function_ptr_counter)
@@ -1034,9 +1061,11 @@ export class {struct_name.replace("LDK","")} extends CommonBase {{
 
                 for idx, arg_info in enumerate(fn_line.args_ty):
                     if arg_info.ret_conv is not None:
-                        out_c = out_c + ", (uint32_t)" + arg_info.ret_conv_name
+                        out_c += ", (uint32_t)" + arg_info.ret_conv_name
                     else:
-                        out_c = out_c + ", (uint32_t)" + arg_info.arg_name
+                        out_c += ", (uint32_t)" + arg_info.arg_name
+                for i in range(0, 6 - len(fn_line.args_ty)):
+                    out_c += ", 0"
                 out_c = out_c + ");\n"
                 if fn_line.ret_ty_info.arg_conv is not None:
                     out_c = out_c + "\t" + fn_line.ret_ty_info.arg_conv.replace("\n", "\n\t") + "\n\treturn " + fn_line.ret_ty_info.arg_conv_name + ";\n"
@@ -1215,18 +1244,28 @@ export class {struct_name.replace("LDK","")} extends CommonBase {{
 
         hu_name = struct_name.replace("LDKC2Tuple", "TwoTuple").replace("LDKC3Tuple", "ThreeTuple").replace("LDK", "")
         out_opaque_struct_human = f"{self.hu_struct_file_prefix}"
+        constructor_body = "super(ptr, bindings." + struct_name.replace("LDK","") + "_free);"
+        extra_docs = ""
+        extra_body = ""
         if struct_name.startswith("LDKLocked") or struct_name.startswith("LDKReadOnly"):
-            out_opaque_struct_human += "/** XXX: DO NOT USE THIS - it remains locked until the GC runs (if that ever happens */"
+            extra_docs = "\n * This type represents a lock and MUST BE MANUALLY FREE'd!"
+            constructor_body = 'super(ptr, () => { throw new Error("Locks must be manually freed with free()"); });'
+            extra_body = f"""
+       /** Releases this lock */
+       public free() {{
+               bindings.{struct_name.replace("LDK","")}_free(this.ptr);
+               CommonBase.set_null_skip_free(this);
+       }}"""
         formatted_doc_comment = struct_doc_comment.replace("\n", "\n * ")
         out_opaque_struct_human += f"""
-/**
+/**{extra_docs}
  * {formatted_doc_comment}
  */
 export class {hu_name} extends CommonBase {implementations}{{
        /* @internal */
        public constructor(_dummy: object, ptr: number) {{
-               super(ptr, bindings.{struct_name.replace("LDK","")}_free);
-       }}
+               {constructor_body}
+       }}{extra_body}
 
 """
         self.obj_defined([hu_name], "structs")